SQL Mapping Framework - Easy & Simple
자바 코드로부터 SQL문을 분리해서 관리.
매개변수 설정과 쿼리 결과를 읽어오는 코드를 제거.
작성할 코드가 줄어서 생산성 향상 & 유지 보수 편리.
//이전의 방법
//sql, java가 한 소스코드에 섞여있음.
public int insertUser(User user) {
int rowCnt = FAIL;
Connection conn = null;
PreparedStatement pstmt = null;
String sql = "insert into user_info values(?,?,?,?,?,?,new Date())";
try {
conn = ds.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, user.getId());
pstmt.setString(2, user.getPwd());
pstmt.setString(3, user.getName());
pstmt.setString(4, user.getEmail());
pstmt.setString(5, new java.sql.Date(user.getBirth.getTime()));
pstmt.setString(6, user.getSns());
return pstmt.executeUpdate();
} catch(SQLException e) {
e.printStrackTrace();
return FAIL;
} finally {
close(pstmt, conn);
}
}
//새로운 방법
//XML문서에 SQL만 따로 떼어 냄.
<?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="com.fastcampus.ch4.dao.UserMapper">
<insert id="insert" parameterType="com.fastcampus.ch4.domain.UserDto>
INSERT INTO user_info
VALUES ( #{id}, #{pwd}, #{name}, #{email}, #{birth}, #{sns}, now());
</insert>
//새로운 자바코드
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private SqlSession session;
private static String namespace = "com.fastcampus.ch4.dao.UserMapper.";
@Override
public int insert(User user) {
return session.insert(namespace+"insert", user);
}
(1)mybatis가 제공하는 인터페이스
SqlSessionFactory - SqlSession을 생성해서 제공.
SqlSession - SQL명령을 수행하는데 필요한 메서드 제공.
(2)mybatis-spring이 제공. 인터페이스를 구현한 것.
SqlSessionFactoryBean
//root-context.xml
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="mapperLocations" value="classpath:mapper/*Mapper.xml"/>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory"/>
</bean>
insert()
delete()
update()
selectOne()
selectList()
selectMap()
<!-- boardMapper.xml -->
<mapper namespace="com.fastcampus.ch4.dao.BoardMapper">
<select id="now" resultType="string">
SELECT now()
</select>
<select id="count" resultType="int">
SELECT count(*) from board
</select>
<insert id="insert" parameterType="com.fastcampus.ch4.domain.BoardDto">
INSERT INTO board (title, content, writer)
VALUES (#{title}, #{content}, #{writer})
</insert>
<select id="select" parameterType"int"
resultType="com.fastcampus.ch4.domain.BoardDto">
SELECT bno, title, content, writer, view_cnt, commnet_cnt, reg_date
FROM board
WHERE bno = #{bno}
</select>
public class BoardDaoImpl implements BoardDao {
@Autowired
private SqlSession session;
private static String namespace
= "com.fastcampus.ch4.dao.BoardMapper.";
public String getServerTime() throws Exception {
return session.selectOne(namespace+"now");
}
public int count() throws Exception {
return session.selectOne(namespace+"count");
}
public int insert(BoardDto dto) throws Exception {
return session.insert(namespace+"insert", dto);
}
public BoardDto select(Integer bno) throws Exception {
return session.selectOne(namespcae+"select", bno);
}
<typeAliases>
로 이름 짧게 하기<typeAliases>
<typeAlias alias="BoardDto" type="com.fastcampus.ch4.domain.BoardDto"/>
</typeAliases>