项目中有时需要实现动态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\"?>\r\n" +
"<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\r\n" +
"<mapper namespace=\"customMapperUtils\">\r\n" +
" <select id=\"selectData\" parameterType=\"map\" resultType=\"map\">\r\n" +
" select * from table where 1=1 \r\n" +
" <if test=\"id!=null and id!=''\">\r\n" +
" and id=${id}\r\n" +
" </if>\r\n" +
" </select>\r\n" +
"</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);
}