项目中有时需要实现动态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); }