공부/MYBATIS(25)
-
attempted to return null from a method with a primitive return type (int)
스프링 / mybatis 를 써서 개발하다보니.. 살다살다 보지 못했던 여러 오류들을 만나고 있음... 그 중 하나.. attempted to return null from a method with a primitive return type (int). 테이블 리스트의 페이지를 나누기 위해, 전체 건수를 count(*) 해서 리턴하는 SQL문을 호출하다 발생한 에러.. xxxMapper.java 파일의 getTotalCount() 의 return type 을 int 로 해서 발생... 이유는 count(*) 할 때, 혹은 max(column_name) 등을 할 때.. null 이 발생하는 경우가 있음.. int 는 null 을 매핑할 수 없으므로.. 위와 같은 exception 이 발생.... 따라서 p..
2014.09.19 -
308. Advanced Result Maps ( 향상된 결과 맵 )
마이바티스는 한 가지 생각을 염두에 두고 만들어졌어 : 데이터베이스는 항상 원하거나 필요로 하는 것은 아니여. 모든 데이터베이스의 3rd normal form 이나 BCNF가 완벽하기를 염원했지만 그렇지 못해. 그리고, 만약 하나의 데이터베이스가 완벽하게 모든 어플리케이션에 맵핑하는게 가능다면 대단해질거야. 하지만 그렇지 못해. ResultMap 이 마이바티스가 이 문제에 대해 제공하는 답이야.예를 들어, 어떻게 이 문장을 매핑할까? select B.id as blog_id, B.title as blog_title, B.author_id as blog_author_id, A.id as author_id, A.username as author_username, A.password as author_pass..
2012.06.07 -
307. Result Maps ( 결과 맵 )
resultMap 은 마이바티스에서 가장 중요하고 강력한 것이여. ResultSet 으로부터 데이터를 검색하기 위해 JDBC가 필요로 하는 코드의 90%를 날려버리지. 그리고, 경우에 따라 JDBC가 지원하지 않는 것을 할 수도 있어. 사실, 복잡한 구문을 가진 join mapping 같은 것과 동등한 코드를 작성하기 위해서는 아마 수천라인의 코드로 펼쳐질 수 있을 거야. 간단한 구문의 ResultMap의 디자인을 위해 명시적은 결과 매핑이 필요하지 않아, 그리고 좀 더 복잡한 구문도 관계를 서술하는 정도 이상은 거의 필요치 않아. 이미 명시적인 resultMap이 없는 간단히 매핑된 예제를 보았어. 예를 들면, select id, username, hashedPassword from some_table..
2012.06.01 -
306. 문자열 대체 (String substitution)
기본적으로 #{} 문법을 사용함으로써, 마이바티스가 PreparedStatement 속성을 생성하고, PerparedStatement의 각강의 파라미터에 대응한 값을 안전하게 세팅해. 이 방법은 안전하고, 빠르고 거의 언제나 선호되는 방법이지만, 때때로 SQL 구문으로 변경되지 않은 무자열을 직접 주입하고 싶을 수도 있지. 예를 들면, ORDER BY 같은 경우, 다음과 같이 사용할 수도 있어. ORDER BY ${columnName}여기서 마이바티스는 문자열을 수정하거나 회피하지 않아. NOTE 사용자로부터 입력을 받아들이고, 위 방법으로 변경되지 않은 입력을 구문에 제공하는 것은 안전하지 않아. 이는 잠재적인 SQL 주입 공격에 노출되기 때문에 이러한 필드에 사용자 입력을 허용하지 않거나, 항상 그것..
2012.05.29 -
305. 파라미터 ( Parameters )
지금까지 단순한 파라미터들을 가진 구문들의 예제를 보았어. 마이바티스에서 파라미터는 매우 강력한 요소야. 단순한 상황에서 거의 90% 이상의 경우, 간단한 파라미터들로 충분해. 예를들면, select id, username, password from users where id = #{id} 위 예제는 매우 간단한 명명된 파라미터 매핑을 보여주고 있어. 파라미터 타입은 'int' 로 세팅되었고, 그래서 파라미터 이름은 아무렇게나 해도 돼. 원시타입이나, 'Integer', 'String' 같은 데이터 타입들은 연관된 파라퍼티를 갖고 있지 않아. 그러므로 파라미터의 전체 값을 대체하게 돼. 하지만 복잡한 객체를 전달한다면, 좀 다르게 해야해. 예를 들면, insert into users (id, userna..
2012.05.09 -
304. SQL
이 요소는 다른 구문에 포함될 수 있는 SQL code의 조각을 정의하기 위해 사용된다. 예를들면, id,username,password 이후, SQL 조각은 다른 구문에 포함될 수 있다. 예를 들면, select from some_table where id = #{id}
2012.05.03