본문 바로가기

백엔드/myBatis

SqlSession was not registered for synchronization because synchronization is not active. Spring - myBatis 환경에서 트랜잭션이 적용되지 않으면 아래 로그를 볼 수 있다. Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1ad7d61e] was not registered for synchronization because synchronization is not active Fetching JDBC Connection from DataSource trace com.mchange.v2.resourcepool.BasicResourcePool@723b12e9 [managed: 20, unused: 19, excluded: 0] (e.g. com.mchange.v2.c3p0.i..
java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyPreparedStatement.isClosed()Z is abstract java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyPreparedStatement.isClosed()Z is abstract org.mybatis mybatis 3.4.6 org.mybatis mybatis-spring 1.3.2 위 처럼 mybatis 3.4.6, mybatis-spring 버전을 1.3.2로 사용하고 테스트를 하니 위 에러가 나더라.. com.mchange c3p0 0.9.5.2 c3p0 라이브러리 버전이 낮아서 그런거 이므로 최신 버전으로 바꾸어 사용하면 된다.
MyBatis 3.2) Mapper 방식과 DAO Pattern은 같이 사용할 수 없다. Mapper 방식은 아래 처럼 사용한다. pacakge com.openerp.dao public interface RoleDao{ List listRole(Parameters params); List listRole(Parameters params, int pg, int ps); } 이 경우 Mapper에 등록을 했기때문에 roleMapper 라는 이름으로 bean에 등록이 된다. "예전부터 사용해오던 DAO 패턴을 같이 쓸 수 없을까?" 라는 궁금증이 생겨 반나절동안 해 보았는데... 안된다. DAO 패턴도 어쨋든 Spring DI에 등록이 되어야 하는데 같은 클래스가 두개의 이름으로 등록이 되는 현상이 발생된다. No qualifying bean of type [com.openerp.dao.RoleD..
프로시저 호출 시 주의 할 점.. {CALL LOMS_APP.PRC_CLEAN_ATTRES(?, ?, ?)} { 와 CALL 사이에... tab (\t)가 들어 있는데 오류 난다... 헐... {CALL PRC_CLEAN_ATTEND(?, ?, ?)}
iBatis isEqual top_vacancy = 'Y',
[3.0] forEach 사용 item : forEach내에서 각 아이템 이름으로 사용할 것. index : index collection="classNames" // 배열명 open="" // forEach 시작 전 ex: "(" forEach 시작전에 ( #{item} separator="," // forEach 1회시 구분 해줄 기호 close="" // forEach 종료 후 ex: ")" forEach 종료 후에 ( #{item}, #{item}, #{item} .... #{item[index]} ) SUM(CASE WHEN R.CLASS_NAME = #{item} THEN R.CNT ELSE 0 END) AS #{item}
[3.0] like 검색. - iBatis 3.0 에서 간단하게 like 검색 하는 법 CB.CUSTOMER_NAME like CONCAT('%', #{customerName:VARCHAR}, '%') 사용 예 ) SELECT CB.COUPON_BOOK_NO, CN.COUPON_NAME_SEQ, CN.COUPON_NAME , CASE WHEN CB.CHARGE_TYPE = 'F' THEN '무상' ELSE '유상' END AS CHARGE_TYPE , AM.AUTO_MODEL_SEQ , AM.MODEL_NAME , IFNULL(CB.CAR_NUMBER, '') AS CAR_NUMBER , CB.VIN_NO , CB.CUSTOMER_NAME , CONCAT(CB.CUSTOMER_PHONE_1, '-', CB.CUSTOMER_PHON..
[3.0] JDBC Type 쿼리~~ AND (TO_DAYS(CB.COUPON_EXPIRED_DATE) - TO_DAYS(CAST(#{criterionDate} AS DATE)) BETWEEN #{criterionDay1:NUMERIC} AND #{criterionDay2:NUMERIC})