项目中有时需要实现动态sql功能(非mybatis动态sql片段):
sql语句中可以使用mybatis的各种标签,注意<>等符号的转义,最后会根据输入的参数生成最终的sql,需要引入mybatis.jar
public static void main(String[] args) {
//参数
HashMap<String,Object> param=new HashMap<>();
param.put("id", "撒扥");
//原sql
String sourceSQL = "<?xml version="1.0" encoding="UTF-8"?>
" +
"<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
" +
"<mapper namespace="customMapperUtils">
" +
" <select id="selectData" parameterType="map" resultType="map">
" +
" select * from table where 1=1
" +
" <if test="id!=null and id!=''">
" +
" and id=${id}
" +
" </if>
" +
" </select>
" +
"</mapper>";
//解析
XMLMapperBuilder xmlMapperBuilder = new XMLMapperBuilder(new ReaderInputStream(new StringReader(sourceSQL),"UTF-8"), new Configuration(), sourceSQL, new HashMap<String, XNode>());
xmlMapperBuilder.parse();
MappedStatement mappedStatement = xmlMapperBuilder.getConfiguration().getMappedStatement("selectData");
String sql = mappedStatement.getBoundSql(param).getSql();
System.out.println(sql);
}