2019-02-14 13:18:33 456浏览
今天扣丁学堂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");
【关注微信公众号获取更多学习资料】