Java 代码中如何安全地拼接 SQL 语句到 Mybatis 的 XML 文件

Java技术迷

关键语句:

1
2
StringBuilder whereSql = new StringBuilder();
whereSql.append("SQL");

实现类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public List getList(Map<String, Object> map) {
    List<Map<String, Object>> rs = new ArrayList<Map<String, Object>>();
    try {
        StringBuilder whereSql = new StringBuilder();
 
        if (map.get("userName").toString().length()>0) {
            whereSql.append(" AND a.userName in ('" + map.get("userName").toString().replaceAll(",", "\',\'") + "')");//不为空时加入查询条件
        }
        if (map.get("CURRENTPAGE").toString().length()>0 && map.get("PAGESIZE").toString().length()>0) {//前端有传分页参数时就添加分页查询条件
            int currenpage = Integer.parseInt(map.get("CURRENTPAGE").toString());
            int pagesize = Integer.parseInt(map.get("PAGESIZE").toString());
            currenpage = ((currenpage - 1) * pagesize);
            whereSql.append(" limit " + currenpage + "," + pagesize);
        }
 
        rs = wmTblWorkorderMapper.getList(whereSql.toString());
        return rs;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

mapper:

1
List<Map<String,Object>> getList(@Param("whereSql") String whereSql);

mapper对应的xml:

1
2
3
<select id="getList" resultType="HashMap">
 SELECT * FROM user a WHERE 1=1 ${whereSql}
</select>

mybatis中拼接sql语句的特殊符号表示

需要在mybatis中,使用到大于号,小于号等等拼接sql语句,一般有以下XML转义字符 :

XML转义字符 

&lt;                          <                        小于号 
&gt;                         >                        大于号 
&amp;                    &                           和 
&apos;                    '                         单引号 
&quot;                    "                         双引号 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空