2019-02-14 13:18:33 413浏览
今天扣丁学堂Java培训老师给大家分享一篇关于MyBatis执行动态SQL的方法详解,希望对大家学习Java开发有所帮助,下面我们一起来看一下吧。
<select id="executeSql" resultType="map"> ${_parameter} </select>
sqlSession.selectList("executeSql", "select * from sysuser where enabled = 1");
List<Map> executeSql(String sql);
xxMapper.executeSql("select * from sysuser where enabled = 1");
select * from sysuser where enabled = #{enabled} and userName like concat('%',#{userName},'%')
<select id="executeSql" resultType="map"> ${sql} </select>
List<Map> executeSql(Map map);
Map map = new HashMap(); //这里的 sql 对应 XML 中的 ${sql} map.put("sql", "select * from sysuser " + " where enabled = #{enabled} " + " and userName like concat('%',#{userName},'%')"); //#{enabled} map.put("enabled", 1); //#{userName} map.put("userName", "admin"); //接口方式调用 List<Map> list = xxMapper.executeSql(map); //sqlSession方式调用 sqlSession.selectList("executeSql", map);
@Override public BoundSql getBoundSql(Object parameterObject) { DynamicContext context = new DynamicContext(configuration, parameterObject); rootSqlNode.apply(context); SqlSourceBuilder sqlSourceParser = new SqlSourceBuilder(configuration); Class < ?>parameterType = parameterObject == null ? Object.class: parameterObject.getClass(); SqlSource sqlSource = sqlSourceParser.parse(context.getSql(), parameterType, context.getBindings()); BoundSql boundSql = sqlSource.getBoundSql(parameterObject); for (Map.Entry < String, Object > entry: context.getBindings().entrySet()) { boundSql.setAdditionalParameter(entry.getKey(), entry.getValue()); } return boundSql; }
提示 在上面的代码中: sqlSourceParser.parse(context.getSql(), parameterType, context.getBindings()); 这一段代码是处理动态参数(#{})的 这个处理在动态 SQL 处理之后, 因此可以在 SQL 中使用这种类型的参数。
select * from sysuser where 1 = 1 <#if enabled??> enabled = #{enabled} </#if> <#if userName?? && userName != ''> and userName like concat('%',#{userName},'%') </#if>
select * from sysuser where 1 = 1 <#if enabled??> enabled = #{enabled} </#if> <#if userName?? && userName != ''> and userName like '%${userName}%' </#if>
//#{enabled} map.put("enabled", 1); //#{userName} map.put("userName", "admin"); //这里的 sql 对应 XML 中的 ${sql} String sql = "上面两个复杂SQL中的一个"; //使用Freemarker处理sql sql = processSqlByFreemarker(sql, map); //将处理后的sql放到map中 map.put("sql", sql); //执行方法 List<Map> list = xxMapper.executeSql(map);
map.put("class", "tk.mybatis.model.SysUser");
【关注微信公众号获取更多学习资料】