Mybatis

  • Preparedstatement

데이터 컬럼 하나하나 꺼내오는 작업 복잡함

while(rs.next()){
              int empno = rs.getInt("empno");
              String ename = rs.getString("ename");
              String dname = rs.getString("dname");
              String loc = rs.getString("loc");
              int sal = rs.getInt("sal");
              String hiredate = rs.getString("hiredate");
              System.out.println("hiredate > " + hiredate );
              String state = rs.getString("state");
              Employee emp = null;
  • 이런 작업이 반복적으로 발생하는 단점
  • configuration.xml

    • db연결, mapper등록, dto alias 설정

    • mapper -> 실제 DB연동

      • 실제 sql을 가지고 있고 sql에 id를 할당
    • DB연동에 필요한 4가지 정보다 Mapper가 어디있는지 기재

  • factory

    • configuration을 읽어와서 sql 사용 가능하게끔 해줌(mapper를 사용해서)
    • 기존에 service를 활용했는데 여기선 sqlsession을 사용할거임
    • sqlsession을 DAO에 넘기면서 mapper에 담아둔 sql중 id에 맞는 sql 실행
  • MySqlSession
    • configuration의 자원들과 mapper에 등록된 select문을 가져와 실행하는 공장
에러코드 원인
java.lang.ExceptionInInitializerError configuration 문제
초기화 못시키는중
java.sql.SQLException: Error setting driver on UnpooledDataSource. driver문제
java.io.IOException: Could not find resource DeptMappe.xml mapper 경로
java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for selectAll mapper에서 id문제
java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for selectA dao에서 id 잘못 작성
: java.lang.ClassNotFoundException: Cannot find class: com.dto.Dep 경로 잘못 작성
java.sql.SQLSyntaxErrorException: mapper/sql구문 작성 오류
java.sql.SQLSyntaxErrorException: ORA-00984: column not allowed here mapper/쿼리 잘못 작성
java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.dept.DeptMapper2.selectByDeptnoHashMap configuration에 mapper등록 안됨
Could not resolve type alias 'Dept'. alias 오류
  • mapper.xml에서 부등호 사용할때
<select id="test" parameterType="int" resultType="String">
<![CDATA[
        SELECT TEST_DESC FROM TB_Test WHERE TEST_ID < #{idx}
]]>
</select>

or

<select id="test" parameterType="int" resultType="String">
        SELECT TEST_DESC FROM TB_Test WHERE TEST_ID <![CDATA[<]]> #{idx}
</select>

rowbounds

  • 인덱스 번호로 특정갯수(시작번호, 꺼내올 개수) 출력
  • dao파일
public List<Dept> selectTopN(SqlSession session, String loc, int offset, int limit) {
        List<Dept> dept = session.selectList("com.dept.DeptMapper5.topNLoc", loc, new RowBounds(offset, limit));
        return dept;

    }

+ Recent posts