java/mybatis

mybatis 동적으로 쿼리 셋팅하는방법

새로운 도전을 위한 한걸음 2014. 8. 11. 11:33

mybatis 동적으로 쿼리 셋팅하는방법

쿼리를 xml로 셋팅하지 않고 동적으로 sql로 셋팅하는방법.


//동적으로 쿼리 추가하는 방법

private synchronized String addStatement(SqlSession sqlSession,String cacheKey, String query) {

String id = cacheKey;

Configuration configuration = sqlSession.getConfiguration();

if (configuration.hasStatement(id)) {

return id; 

}

logger.debug("add a mapped statement, "+id);

RawSqlSource sqlBuilder = new RawSqlSource(configuration,query , java.util.Map.class);

MappedStatement.Builder statementBuilder = new MappedStatement.Builder(configuration,id,sqlBuilder,SqlCommandType.SELECT);

statementBuilder.timeout(configuration.getDefaultStatementTimeout());

// 파라미터 타입 셋팅

List<ParameterMapping> parameterMappings = new ArrayList<ParameterMapping>();

ParameterMap.Builder inlineParameterMapBuilder = new ParameterMap.Builder(

 configuration,

 statementBuilder.id() + "-Inline",

 java.util.Map.class,

 parameterMappings);

statementBuilder.parameterMap(inlineParameterMapBuilder.build());

//reuslt 타입 세싵ㅇ

List<ResultMapping> resultMappings = new ArrayList<ResultMapping>();

List<ResultMap> resultMaps = new ArrayList<ResultMap>();

ResultMap.Builder resultMapBuilder = new ResultMap.Builder(

configuration,

statementBuilder.id() + "-Inline",

java.util.Map.class,

resultMappings

);

resultMaps.add(resultMapBuilder.build());

statementBuilder.resultMaps(resultMaps);

MappedStatement statement = statementBuilder.build();

configuration.addMappedStatement(statement);

return id;

}