MyBatis 예제를 통하여 학습하기
- SqlSessionFactoryManager.java
public class SqlSessionFactoryManager {
private static SqlSessionFactoryManager instance = new SqlSessionFactoryManager();
private SqlSessionFactory factory;
private SqlSessionFactoryManager() {
String config = "mybatis/config/SqlSessionConfig.xml";
try {
Reader r = Resources.getResourceAsReader(config);
factory = new SqlSessionFactoryBuilder().build(r);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSessionFactoryManager getInstance() {
return instance;
}
public SqlSessionFactory getFactory() {
return factory;
}
public static void main(String[] args) {
System.out.println(SqlSessionFactoryManager.getInstance().getFactory());
}
}
| cs |
- SqlSessionConfig.xml
매핑 spring과 연동시에는 spring 설정에서 DataSource(dbcp) 를 정의한다.
<?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>
<!-- 사용할 클래스에 대한 별칭을 명시한다. -->
<typeAliases>
<typeAlias type="model.MemberVO" alias="mvo" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" />
<property name="username" value="scott" />
<property name="password" value="tiger" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mybatis/config/member.xml" />
</mappers>
</configuration>
| cs |
MyBatis를 사용하면 이런 과정들이 필요하다
Mapper와 설정정보를 통하여 기본 작업들을 준비한다고 보면된다
(예를들면 기존에 DAO에서 매번 접속하고 끊었던 반복코드들이 사라졌다)
- SqlMapper
갑자기 xml의 mapper가 추가되었다 하지만 정말 보기좋고 깔끔하게
sql문들을 볼수 있으며 그전에 물음표 (?)로 사용되었던 표기법이
#{value}와 #{param}등으로 바뀌었다.
<?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="member">
<sql id="selectMember">
select id,password,name,address from spring_member
</sql>
<select id="findMemberById" resultType="map">
<include refid="selectMember"></include>
where id=#{value}
</select>
<select id="findMemberById2" resultType="mvo">
<include refid="selectMember"></include>
where id=#{value}
</select>
<select id="getAllMemberList" resultType="mvo">
<include refid="selectMember"></include>
</select>
<insert id="registerMember" parameterType="mvo">
insert into
spring_member(id,password,name,address)
values(#{id},#{password},#{name},#{address})
</insert>
</mapper>
| cs |
- DAO
당연히 DAO가 빠질 수는 없다.
일단 Sql 설정정보가 저장된 Mapper 객체를 사용하여야한다.
핵심은 sessoin을 꼭 열고 닫는다!
그리고 ("namespace로 연동", 매개변수);
를 통하여 SqlMapper와 연동되어 값이 전달된 후 Sql문이 수행된다
public class MemberDAO {
private static MemberDAO instance = new MemberDAO();
private SqlSessionFactory factory;// MyBatis Mapper 객체
private MemberDAO() {
factory = SqlSessionFactoryManager.getInstance().getFactory();
}
public static MemberDAO getInstance() {
return instance;
}
public Map<String, String> findMemberById(String id) {
Map<String, String> map = null;
SqlSession session = factory.openSession();
try {
map = session.selectOne("member.findMemberById", id);
} finally {
session.close();
}
return map;
}
public MemberVO findMemberById2(String id) {
MemberVO vo = null;
SqlSession session = factory.openSession();
try {
vo = session.selectOne("member.findMemberById2", id);
} finally {
session.close();
}
return vo;
}
public List<MemberVO> getAllMemberList() {
SqlSession session = factory.openSession();
List<MemberVO> list = null;
try {
list = session.selectList("member.getAllMemberList");
} finally {
session.close();
}
return list;
}
public void registerMember(MemberVO paramVO) {
SqlSession session = factory.openSession();
try {
session.insert("member.registerMember", paramVO);
session.commit();
} finally {
session.close();
}
}
}
| cs |
역시나 초반에는 달라진 표기법으로 애를 먹었다.
하지만 표기법에 익숙해지고 Sql에 대한 이해도가 높아진다면
비즈니스 로직에 집중할 수 있을 것 같다 물론 파일이 하나 더 생기지만
가독성이 좋아 만족스럽다
0 개의 댓글:
댓글 쓰기