2019-02-14 13:18:33 1350瀏覽
今天扣丁學堂Java培訓老師給大家分享一篇關(guān)于MyBatis執(zhí)行動態(tài)SQL的方法詳解,希望對大家學習Java開發(fā)有所幫助,下面我們一起來看一下吧。
<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"); //接口方式調(diào)用 List<Map> list = xxMapper.executeSql(map); //sqlSession方式調(diào)用 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()); 這一段代碼是處理動態(tài)參數(shù)(#{})的 這個處理在動態(tài) SQL 處理之后, 因此可以在 SQL 中使用這種類型的參數(shù)。
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); //執(zhí)行方法 List<Map> list = xxMapper.executeSql(map);
map.put("class", "tk.mybatis.model.SysUser");
【關(guān)注微信公眾號獲取更多學習資料】
查看更多關(guān)于“Java開發(fā)資訊”的相關(guān)文章>>