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;
}