1탄. JDBC - SPRING DAO로 게시판 만들기 (spring dao)
2탄. JDBC - MyBatis로 게시판 만들기 (spring + mybatis)
(1탄 Spring DAO로 게시판 만든 프로젝트 그대로 copy해와서 사용)
프로젝트 복사해와서 새 프로젝트 작업 시 체크 사항
- tomcat add and remove
- app-context.xml에 base-package 명 바꿔주기
- 프로젝트 우클릭 > properties > web project settings 바꿔주기
프로젝트명: SpringwebMybatis / 패키지명: com.jdbc.springweb
1. pom.xml 추가
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- mybatis spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
-> 새로 build 되는게 아니라, 이전의 프로젝트에서 이미 lib들이 .m2 폴더에 다운받아져있기 때문에 저장된 lib들에 mybatis 관련 lib를 추가시키는 형태로 작업이 일어남
2. servlet-context.xml
IOC 흐름
dataSource -> sessionFactory -> sessionTemplate -> BoardDAO3 에서 가져다 씀
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="com.jdbc.springweb" />
<beans:bean id="boardDAO3" class="com.jdbc.dao.BoardDAO3">
<beans:property name="sessionTemplate" ref="sessionTemplate"/>
</beans:bean>
<beans:bean id="sessionTemplate"
class="org.mybatis.spring.SqlSessionTemplate">
<beans:constructor-arg ref="sessionFactory"/>
</beans:bean>
<!-- DB(jdbc)정보와 MyBatis환경세팅(mybatis-config.xml)을 가지고와서 Factory 생성 -->
<beans:bean id="sessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="configLocation" value="classpath:/mybatis-config.xml"/>
</beans:bean>
<!-- mybatis-config.xml이 특정 패키지 안에 있는게 아니므로 경로 그냥 써줘도 됨 (SpringMyBatis 프로젝트 참고) -->
<!-- DB정보 -->
<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<beans:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<beans:property name="url" value="jdbc:oracle:thin:@192.168.16.14:1521:TestDBB"/>
<beans:property name="username" value="suzi"/>
<beans:property name="password" value="a123"/>
</beans:bean>
<!-- thin: 가장최소한의방법으로빠르게접근하는법 port번호,ip,TestDBB로 접근 -->
<!-- class=~ 이 위치에 db관련 라이브러리가 있음
그 곳에 p:~~ 를 통해 입력한 내 db값들은 전달해줘서
dataSource라는 객체를 생성하는 과정 -->
<!-- db의연결자를알고있어야 DAO가 db한테 접근 가능
-> DAO에 setter 메소드 만들고 의존성 주입시킬거란걸 예상 가능 -->
<beans:bean id="myUtil" class="com.jdbc.util.MyUtil"/>
</beans:beans>
3. mybatis-config.xml
mybatis사용하려면 mybatis 환경설정 파일 필요
(참고) SpringMyBatis 프로젝트는 콘솔 프로젝트여서 java파일들과 같은 경로에 넣었지만
SpringwebMyBaits 프로젝트는 Web MVC 프로젝트 이므로 src/main/java에 떨궈서 모든 패키지에 적용 될 수 있도록 한 것
SpringMyBatis 프로젝트의 mybatis-config.xml 위치
myBatis-config.xml를 새로 추가했기 때문에, servlet-config.xml 의 Factory한테 정보를 넘겨준 것
myBatis부터는 CommonDAO, CommonDAOImpl 같은게 필요 없어짐 -> mapper가 생김
Spring3.0에서는 boardMapper.xml -> 이런 파일을 sqlMapper라고 한다. 여기다가 select, insert, delete문을 넣는 것
configuration태그 안에 있는건 사실 Spring3.0 에서는 기재하지 않아도 된다. (mapper 설정 부분은 3.0에서도 써줘야함)
이미 servlet-context.xml에서 단계에서 myBatis 가져오는건 완료되기 때문
★ myBatis를 다른프레임워크에서 갖다쓸 때, configuration 태그 내용을 꼭 넣어줘야한다 (알아두기!!)
(ex. spring과 struts2를 함께 쓰는경우)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-/mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties>
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@192.168.16.14:1521:TestDBB"/>
<property name="username" value="suzi"/>
<property name="password" value="a123"/>
</properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 위의 db정보를 불러다 쓰는것 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- spring에서 이걸 가져다 쓸 수 있게 servlet-context.xml 에 등록 -->
<mappers>
<mapper resource="com/jdbc/mybatis/boardMapper.xml"/>
</mappers>
</configuration>
4. boardMapper.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">
<mapper namespace="boardmapper">
<select id="maxNum" resultType="int">
select nvl(max(num,0) from board
</select>
<insert id="insertData" parameterType="com.jdbc.dto.BoardDTO">
insert into board(num,name,pwd,email,subject,content,
ipAddr,hitCount,created) values(#{num},#{name},#{pwd},#{email},
#{subject},#{content},#{ipAddr},0,sysdate)
</insert>
<select id="getDataCount" parameterType="map" resultType="int">
select nvl(max(num,0) from board
where ${searchKey} like '%' || #{searchValue} || '%'
</select>
<select id="getLists" parameterType="map" resultType="com.jdbc.dto.BoardDTO">
select * from (
select rownum rnum, data.* from(
select num,name,subject,hitCount,
to_char(created,'YYYY-MYY-DD') created
from board where ${searchKey} like '%' || #{searchValue} || '%'
order by num desc) data)
<![CDATA[
where rnum>=#{start} and rnum<=#{end}
]]>
))
</select>
<update id="updateHitCount" parameterType="int">
update board set hitCount = hitCount+1 where num=#{num}
</update>
<select id="getReadData" parameterType="int" resultType="com.jdbc.dto.BoardDTO">
select num,name,pwd,email,subject,content,ipAddr,hitCount,created
from board
where num=#{num}
</select>
<update id="updateData" parameterType="com.jdbc.dto.BoardDTO">
update board set name=#{name},pwd=#{pwd},email=#{email},subject=#{subject},
content=#{content} where num=#{num}
</update>
<delete id="deleteData" parameterType="int">
delete baord where num=#{num}
</delete>
</mapper>
5. BoardDTO
package com.jdbc.dto;
public class BoardDTO {
private int num;
private String name,pwd,email,subject,content,ipAddr,created;
private int hitCount;
//getter,setter
}
6. BoardDAO
package com.jdbc.dao;
import java.util.HashMap;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import com.jdbc.dto.BoardDTO;
public class BoardDAO3 {
private SqlSessionTemplate sessionTemplate;
public void setSessionTemplate(SqlSessionTemplate sessionTemplate)
throws Exception {
this.sessionTemplate = sessionTemplate;
}
public int getMaxNum(){
int maxNum = 0;
maxNum =
sessionTemplate.selectOne("boardmapper.maxNum");
return maxNum;
}
public void insertData(BoardDTO dto){
sessionTemplate.insert("boardmapper.insertData",dto);
}
public List<BoardDTO> getList(int start, int end,
String searchKey, String searchValue){
HashMap<String, Object> params =
new HashMap<String, Object>();
params.put("start",start);
params.put("end",end);
params.put("searchKey",searchKey);
params.put("searchValue",searchValue);
List<BoardDTO> lists =
sessionTemplate
.selectList("boardmapper.getLists",params);
return lists;
}
public int getDataCount(String searchKey,String searchValue){
HashMap<String, Object> params =
new HashMap<String, Object>();
params.put("searchKey",searchKey);
params.put("searchValue",searchValue);
int result =
sessionTemplate
.selectOne("boardmapper.getDataCount", params);
return result;
}
public void updateHitCount(int num){
sessionTemplate
.update("boardmapper.updateHitCount",num);
}
public BoardDTO getReadData(int num){
BoardDTO dto =
sessionTemplate
.selectOne("boardmapper.getReadData", num);
return dto;
}
public void deleteData(int num){
sessionTemplate
.update("boardmapper.deleteData",num);
}
public void updateData(BoardDTO dto){
sessionTemplate
.update("boardmapper.updateData",dto);
}
}
'Spring 3.0 - 4.3' 카테고리의 다른 글
MySQL + Spring 3.0 연결 (0) | 2019.12.16 |
---|---|
@RequestParam란? - parameter를 쉽게 컨트롤하기 (0) | 2019.11.27 |
Spring DAO 를 이용한 게시판 만들기 (0) | 2019.11.18 |
Spring 3.0 - AOP 개념 및 예제 (미) (0) | 2019.11.16 |
Spring Web MVC를 이용하여 웹 서버 띄우기 (0) | 2019.11.14 |