码迷,mamicode.com
首页 > 数据库 > 详细

mybatis如何传入java中拼接的sql语句

时间:2018-10-08 18:08:57      阅读:310      评论:0      收藏:0      [点我收藏+]

标签:_id   size   city   串处理   bat   location   sys   integer   int   

mybatis 虽然xml文件有强大的模板标签的处理能力,但实际开发中有时比较复杂的sql还有一部分得在java中预先拼装好,然后放到xml文件中直接使用。
但是mybatis是先进行预处理的,所以你传入的片段也好其他也好,都会当做一个值来看待,因此在mybatis中不能使用#{xx}来解析,而是得用${xx}来解析才行。
因为#{xx}字符串处理,加单引号,可一定程度的防注入。${xx}直接引用不做处理,比如数字。

 

代码如下:

StringBuilder dynamicRegionSql = new StringBuilder();
        for (int i = 0; i < ipLocation2DTOs.size(); i++) {
            dynamicRegionSql.append("(region_id=\"");
            dynamicRegionSql.append(ipLocation2DTOs.get(i).getRegionId());
            dynamicRegionSql.append("\"");
            if (ipLocation2DTOs.get(i).getCityId() != null && ipLocation2DTOs.get(i).getCityId().size() != 0) {
                dynamicRegionSql.append(" and city in (");
                List<String> cityIds = ipLocation2DTOs.get(i).getCityId();
                for (int j = 0; j < cityIds.size(); j++) {
                    dynamicRegionSql.append("\"");
                    dynamicRegionSql.append(cityIds.get(j));
                    dynamicRegionSql.append("\"");
                    if (j != (cityIds.size() -1) ) {
                        dynamicRegionSql.append(",");
                    }
                }
                dynamicRegionSql.append(")");
            }
            dynamicRegionSql.append(")");

            if (i != (ipLocation2DTOs.size() -1) ) {
                dynamicRegionSql.append(" or ");
            }
        }
//        System.out.println(dynamicRegionSql);
        int affectNum = deviceLocationMapper.queryCountByRegion(productModel, dynamicRegionSql.toString());

xml文件中:

<select id="queryCountByRegion" resultType="java.lang.Integer">
        SELECT
        count(*) as num
        FROM device_location
        WHERE
            product_model = #{productModel} and
            ${dynamicRegionSql}
    </select>

 

mybatis如何传入java中拼接的sql语句

标签:_id   size   city   串处理   bat   location   sys   integer   int   

原文地址:https://www.cnblogs.com/kangjianrong/p/9755605.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!