반응형

mybatis 9

spring boot에서 mybatis ${} 사용시 sql injection 방어하기

mybatiss를 사용할 경우 ${param}, #{param}과 같이 # 또는 $으로 parameter를 받을 수 있는데, 보통 아래와 같이 #을 사용해서 받는 것을 권장합니다. 그 이유는, #{}이 SQL Injection 공격에 안전하기 때문인데요 SELECT * FROM TB_USER WHERE USER_ID = #{userId} #이 SQL Injection에 안전한 이유는, #이 내부적으로 PreparedStatement를 사용하기 때문입니다. PreparedStatement는 값을 binding 하는 시점에 전달된 값에 대한 특수 문자, 쿼리 등을 필터링하여 SQL Injection을 막습니다. 하지만 ${}를 부득이하게 사용해야 할 경우가 있습니다. 제가 다니는 회사를 예로 들면, 고객사가..

웹 개발 2020.11.21

[ibatis]JavaBeansDataExchange could not instantiate result class

ibatis에서 객체를 초기화 할 때 생기는 예외입니다. 저같은 경우는 xml에서 select문을 사용할 때 resultClass="java.util.Map" 으로 사용했는데 아래와 같이 Cause가 발생했습니다. Cause: java.lang.RuntimeException: JavaBeansDataExchange could not instantiate result class. Cause: java.lang.InstantiationException: java.util.Map 이 경우 resultClass="java.util.HashMap" 으로 변경해주면 해결됩니다. 인터페이스 자체를 사용하기 위해서는 그 자체를 구현해주는 클래스로 선언을 해야 하는데 Map은 인터페이스이기 때문에 Map으로 선언해버리면..

mybstis typeAlias 사용하기

mybatis에서 parameterType이나 resultType에 VO를 사용하려면 com.abc.project.UserVO 와 같이 경로를 모두 써줘야 해서 불편하다. typeAlias를 이용하여 짧게 변경할 수 있는데 사용법은 크게 2가지가 있다. 1. 클래스 단위 등록 - mybatis 설정 파일에 typeAliases를 등록한다. ... 2. 패키지 단위 등록 - 이 경우는 특정 패키지에 vo를 모두 넣어놨을 때 사용하는 방법. 2.1 VO에 Alias 작성 package com.test.vo; import org.apache.ibatis.type.Alias; @Alias("test") public class TestVo { ... } 2.2 mybatis 설정 파일에 패키지 등록 ...

[mybatis] Oracle LONG, CLOB Select 시 에러날때 : getCLOB not implemented for class oracle.jdbc.driver.XXX

오라클에서는 Long Type이나 CLOB Type 컬럼을 select 할때 getCLOB() 가 구현되지 않았다면서 에러가 난다. 1. jdbc-context.xml ( spring 설정 파일 ) 에 mybatis-config.xml 추가 2. /WEB-INF/spring/mybatis-config.xml 파일 작성 3. LongHandler.java 파일 생성 import java.io.StringReader; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.ibatis.type.JdbcTyp..

[Spring 3.2.8 + maven + mybatis 3.2.2 + mybatis-spring 1.2.0]hikariCP 사용하기

hikaricp(히카리 커넥션풀)은 빠른 속도로 인해 점점 더 주목 받고 있는 커넥션 풀입니다. 공식 홈페이지 : https://github.com/brettwooldridge/HikariCP brettwooldridge/HikariCP 光 HikariCP・A solid, high-performance, JDBC connection pool at last. - brettwooldridge/HikariCP github.com 위 홈페이지 내용을 보면 "현존하는 가장 빠른 커넥션 풀" 이라고 소개하고 있습니다. 또한 안정성도 보장됩니다. boneCP의 경우 히카리로 인해 개발을 중단한다고 써져 있습니다. 설치 및 사용 방법은 아래와 같습니다. 1. pom.xml 설정 ( maven 설정 ) 1) Hikari..

ibatis/mybatis - org.postgresql.jdbc4.Jdbc4PreparedStatement.setQueryTimeout(int) 에러 발생 시

1. 해결방법 JDBC 설정에서 defaultStatementTimeout를 삭제합니다. ex) 2. 상세 설명 defaultStatementTimeout 는 모든 JDBC 쿼리에 대한 timeout 시간(초) 지정합니다. 지정하지 않는 경우 timeout 없습니다.(cf. 각 statement 설정에 따라) (각 statement 의 설정으로 override 가능함. 모든 driver가 이 설정을 지원하는 것은 아님에 유의할 것.) 즉, timeout이 발생하여 발생 한 오류입니다.

[mybatis] insert return [serial]

mybatis를 사용하다가 table의 키가 serial일 때 insert된 키의 값이 필요할 경우가 있는데 아래와 같이 사용합니다. insert문 keyProperty : map의 survey_id라는 이름의 변수 (혹은 키)에 값을 넣겠다는 의미 keyColumn : db의 어떤 column에서 값을 가져올지 정하는 값. keyColumn을 생략하면 default로 가장 앞의 key를 가져오는데 만약 pk가 여러개의 column이 묶여 있을 경우 문제가 될 수 있다. 위와 같이 설정 할 경우 map에 survey_id라는 key의 value를 사용 할 수 있습니다.

728x90
반응형
loading