[☆☆Spring Legact Project 생성하고 해야 할 일☆☆]
1. pom.xml에 자바와 스프링버전 바꿔주기
2. pom.xml에 maven 라이브러리 추가해주기
-> 추가하고 Dependencies에서 추가 되어있는지 확인
3. DataSource작성(접속정보)
4. DataSource를 이용해서 DB접속 설정
-> 접속정보를 어디서 가져올지 설정
-> 쿼리문 xml이 있는 장소 설정
5. Mybatis를 자동으로 감지하여 사용할 수 있도록 설정
-> 탭에서 Namespaces에서 mybatis체크 version위에꺼 체크
6. RUN AS 해서 실행되나 보기
[MyBatis]
- 자바에서 DB프로그래밍을 쉽게 도와주는 프레임워크
- 프레임워크 : 하나의 작업을 하는 틀(절차) + 작업을 돕는 도구
- XML 이나 annotation 을 사용하여 저장 프로시저나 SQL 문으로 객체들을 연결시킨다.
- 퍼시스턴스 : 애플리케이션을 종료 후 실행 시 이전에 저장한 데이터를 다시 불러올 수 있는 기술
- MyBatis를 사용하기 위한 라이브러리
ojdbc8, common-dbcp, spring-dbcp, mybatis, mybatis-spring
- MyBatis 설정(servlet-context.xml에서 )
- dataSource : 접속정보
- sqlSessionFactory : Mybatis 연결시 DB 정보
mapper위치 지정(패키지가 생성되지 않으면 에러 발생)
- mybatis-spring:scan : MyBatis를 자동 감지하는 범위
- mapper.xml에 들어가는 선언문
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC
"-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"
>
[servlet-context.xml]
<beans:bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<beans:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<beans:property name="url" value="jdbc:oracle:thin:@gdportal.iptime.org:1521:xe"/>
<beans:property name="username" value="C##WEB_USER"/>
<beans:property name="password" value="web_pass"/>
</beans:bean>
<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource"/>
<beans:property name="mapperLocations" value="classpath:com/spring/main/dao/*.xml"/>
</beans:bean>
<mybatis-spring:scan base-package="com.spring.main.dao"/>
[게시판]
@Controller
public class HomeController {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired BoardService service;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Model model) {
ArrayList<BoardDTO> list = service.list();
logger.info("list size : {}",list.size());
model.addAttribute("boardList", list);
return "list";
}
@RequestMapping(value = "/delete", method = RequestMethod.GET)
public String delete(Model model,@RequestParam String idx) {
logger.info("삭제요청 : "+idx);
int success = service.delete(idx);
logger.info("성공여부 : "+success);
return "redirect:/";
}
@RequestMapping(value = "/detail", method = RequestMethod.GET)
public String detail(Model model,@RequestParam String idx) {
logger.info("상세보기요청 : "+idx);
BoardDTO dto = service.detail(idx);
logger.info("작성자 : "+ dto.getUser_name());
model.addAttribute("dto", dto);
return "detail";
}
@RequestMapping(value = "/writeForm", method = RequestMethod.GET)
public String writeForm(Model model) {
logger.info("글쓰기폼 요청");
return "writeForm";
}
@RequestMapping(value = "/write", method = RequestMethod.POST)
public String write(Model model,@RequestParam HashMap<String,String> params) {
logger.info("글쓰기 요청");
logger.info("params: "+params);
int success = service.write(params);
logger.info("글쓰기 성공여부 : "+success);
return "redirect:/";
}
}
* 스프링에서는 jsp간 이동 불가 -> 컨트롤러를 타야한다.
@Service
public class BoardService {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired BoardDAO dao;
public ArrayList<BoardDTO> list() {
logger.info("서비스 접근");
ArrayList<BoardDTO> list = dao.list();
return list;
}
public int delete(String idx) {
logger.info("삭제 쿼리 요청");
return dao.delete(idx);
}
public BoardDTO detail(String idx) {
logger.info("상세보기 쿼리 요청");
return dao.detail(idx);
}
public int write(HashMap<String, String> params) {
logger.info("글쓰기요청");
return dao.write(params);
}
}
public interface BoardDAO {
ArrayList<BoardDTO> list();
int delete(String idx);
BoardDTO detail(String idx);
int write(String user_name, String subject, String content);
int write(HashMap<String, String> params);
}
* 스프링에서는 DAO는 메서드 요청만 하고 쿼리작업은 mapper에서 한다.
[bbs_mapper.xml]
<mapper namespace="com.spring.main.dao.BoardDAO">
<select id="list" resultType="com.spring.main.dto.BoardDTO">
SELECT * FROM BBS ORDER BY idx DESC
</select>
<delete id="delete">
DELETE FROM bbs WHERE idx = #{param1}
</delete>
<select id="detail" resultType="com.spring.main.dto.BoardDTO">
SELECT * FROM BBS WHERE idx = #{param1}
</select>
<insert id="write" parameterType="hashMap">
INSERT INTO BBS (idx,user_name,subject,content,bHit)
VALUES(bbs_seq.NEXTVAL,#{user_name},#{subject},#{content},0)
</insert>
</mapper>