2016년 10월 28일 금요일

68day / Framework / MyBatis 연습


MyBatis 예제를 통하여 학습하기

  • SqlSessionFactoryManager.java
MyBatis 설정 정보(SqlSessionConfig.xml->mapper 계열xml) 를 로딩하는 객체

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
MyBatis DataSource에 대한 설정 및 SQL 정의 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<StringString> findMemberById(String id) {
        Map<StringString> 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에 대한 이해도가 높아진다면
비즈니스 로직에 집중할 수 있을 것 같다 물론 파일이 하나 더 생기지만
가독성이 좋아 만족스럽다

Related Posts:

  • KOSTA 소프트웨어 경진대회 KOSTA 경진대회 참가하다 행사내용 저번 주말에 이 경진대회 참가를 위해 주말 대체 수업을 들었어야했다. 순서로는 개발자분들의 세미나 -> 채용기업소개 -> KOSTA 상반기 수료자들 프로젝트 진행되었다. 특강 SW 산업의 이해 … Read More
  • 79day / Final Project / Transaction 드디어 시작된 Final project Final Project를 위한 팀 & 팀원들이 모두 결정 되었다. 일단 부족한 실력으로 Final Project를 시작하게 되어 걱정이긴 하지만 좋은 팀원들을 만났으니 좋은 작품 뽑아낼 수 있도록 달려야겠다!! … Read More
  • 80day / Final Project / Tiles Framework & 정규화 Tiles Framework와 정규화에 대하여 알아보았다. ↗ Page1에서 Page2로 이동할 때 기존의 Layout은 그대로 두고 Body부분만 바뀐다는 설명을 보여주는 이미지이다. 사실 JSP에서 <jsp:include>로 저런 L… Read More
  • 78day / Framework / spring Ajax 연동 Project 오랜만에 Ajax 중심의 Project를 했다. 강사님은 캡쳐하는 게 참 싫다고 하셨는 데 결국!! 문제는 주식매도 웹 구현! Ajax활용이 관건이다 (다대다까지 구현) 요구 조건을 분석해보자면! 1. 로그인시 하단에 클라이언트의 주식현황제공 … Read More
  • 77day / Framework / spring AOP Project http://www.xmind.net/m/v97q FROM Lennon Shimokawa AOP 응용하기 AOP알못이기때문에 굉장히 어려웠다. AOP가 뭔지는 어느 정도 이해하지만 당장 Coding을 하자니 도무지 머리속에서 나오지를 않는다. 몇일전에는 AOP… Read More

0 개의 댓글:

댓글 쓰기