mybatis 8

(MyBatis) Mysql tinyint(1) boolean이 integer로 바뀌는 현상

Mysql의 컬럼 타입 중 tinyint(1)은 0이면 false, 0보다 크면 true를 반환하므로, boolean으로 주로 사용하고 있다. query.xml SELECT test_yn FROM test LIMIT 1 DAO.java public Map selectYn() { return sqlSessionTemplate.selectList("selectYn"); } 이해하기 쉽게 boolean 컬럼 한 행을 가져오는 쿼리로 예를 들어봤다. test_yn이 tinyint(1) 이라면 나는 결과 값을 hashmap으로 받았으니 {"test_yn" : false} 이런식으로 받아질 것이고, Boolean으로 캐스팅해서 test_yn 값을 쓸 수 있다. 그런데 쿼리를 아래와 같이 바꿔보았다. SELECT t..

개발/Database 2015.09.17

[myBatis] select시 NoSuchMethodException , <init>() error

mybatis에서 select문을 실행시킬 때 객체에 저장하는 과정에서 아래와 같은 에러가 발생했다. error:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating class 클래스명 with invalid types () or values (). Cause: java.lang.NoSuchMethodException: 클래스명() select 결과를 저장하는 클래스는 아래와 같은 형식이었다. public class Test { private int a; private int b; public Test(int a, int ..

개발/Database 2015.04.24

[iBatis/myBatis] #와 $의 차이점

1. #는 쿼리가 수행될 때, 다음과 같이 된다 SELECT * FROM USER WHERE col = ? parameter : [값] ?에 bind된 값이 들어가게 된다. 이 쿼리의 컴파일 된 내용을 재사용 할 수 있고, 파라미터에 따라 대입해주므로 효율적이다.내부적으로 preparedStatement 객체에서 ? 에 들어갈 파라미터의 값을 set 해줌으로써 사용이 된다. * preparedStatement는 한번 수행한 쿼리를 캐싱하는 객체 사용 용도 >> #일 경우, 값에 사용한다. myBatis : 컬럼명 = #{값} iBatis : 컬럼명 = #값# * 쿼리에 작은 따옴표가 붙게 된다. 2. $는 쿼리가 수행될 때, 다음과 같이 된다 SELECT * FROM USERWHERE col = 값 값이..

개발/Database 2013.04.11

MyBatis] There is no getter for property named.. error

어제 단 한문장 때문에 에러가 나서 3시간동안 해맨거..... 내가 쓴 문법은 아래와 같았다. SELECT * FROM TABLE WHERE NAME = #{name} 이렇게 했을 뿐인데 There is no getter for property named 'name' in 'class java.lang.String'이런 에러가 계속 나타났다. if문을 지우면 #{name}에는 이상없이 잘 실행된다는거. 이유는if문에서 name을 가져오는 방식이 parameterType 안에 들어있는 클래스에서getter 메소드로 name을 받아오기 때문이다. 즉, 에러 그대로 String 객체에 name을 뱉어주는 getter 메소드가 없기 때문이다.Integer를 넘기거나 Long을 넘긴 사람이라면 다들 안됐을 것이다..

개발/Database 2012.09.07

MyBatis/iBatis] 방금 INSERT 된 Key 가져오기

여러 테이블에 insert를 해야되는데, 방금 insert 된 그 PK를 다른테이블에서 써야할 때... select를 해올수도 없고 그럴땐??? 1. MyBatis /* query */ id가 autoincrement인 PK일 경우, 여기서 insert 된 행의 id 값을 가져오게 된다. 그 id값은 DataClass에 선언되어있는 id 필드 안으로 값이 저절로 들어간다. java단에서 DataClass 객체의 id값을 보면 값이 들어있을 것이다. 2. iBatis /* query */ SELECT LAST_INSERT_ID() id 값을 리턴 받는 곳은 DAO 클래스에서 insert문을 호출하는 구문에서 값을 리턴 받으면 된다. int id = commonDB.insert(NAMESPACE + "ins..

개발/Database 2012.09.05

MyBatis] 쿼리에서 특정 문자 제거 (if 사용시)

쿼리를 쓸 때 조건절을 동적으로 사용하는 경우가 많다. 그럴 때 문제가 되는게 연산자나 콤마의 제거이다. 그럴 때는 Mybatis의 trim 을 쓰면 된다. 두가지의 예를 들어보겠다. 1. 맨 끝에 있는 콤마(,)를 제거하는 경우 UPDATE AUTHORusername=#{username},password=#{password},email=#{email},bio=#{bio},WHERE id=#{id} 맨앞에 SET을 붙이고 if안에 무엇이 들어가도 맨 끝에 있는 콤마를 지우겠다는 것이다. 2. 맨 앞에 있는 연산자를(AND 또는 OR) 제거하는 경우 SELECT * FROM AUTHOR OR password=#{password}

개발/Database 2012.08.28