ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

记一次拼接Sql的问题

2021-07-08 00:01:24  阅读:217  来源: 互联网

标签:status 一次 GROUP sql param record 拼接 Sql id


    <select id="queryList" parameterType="java.lang.String" resultType="com.hengtn.evaluation.dto.response.EvaluationRecordResponseDTO">
        SELECT
        r.id AS id,
        r.create_time AS createTime,
        r.city_name AS cityName,
        r.star_level AS starLevel,
        r.status AS status,
        r.user_phone AS userPhone,
        r.user_id AS userId,
        GROUP_CONCAT(o.worker_name) AS workerName,
        o.order_number AS orderNumber,
        r.label AS label,
        r.content_text AS contentText
        FROM
        evaluation_record r
        JOIN evaluation_record_order o ON r.id = o.record_id
        WHERE 1=1

        ${param}

        GROUP BY id
        ORDER BY
        FIELD( 'status', 'PENDING', 'PROCESSED', 'NOPENDING' ),
        r.star_level,
        r.create_time

    </select>

如上xml所示,如果用#{param}则会报sql语句错误,使用${}则能成功运行

原因为,#{param}会在参数的基础上在做一层处理,就会导致传入拼接好的字符串param发生改变,sql解析发生错误.

这也是#{}有效能防止sql注入的原因

另外, GROUP_CONCAT(o.worker_name) AS workerName 能合并多个因为分组而重合的列

GROUP BY id,适合处理一对多的情况

ORDER BY FIELD( 'status', 'PENDING', 'PROCESSED', 'NOPENDING' ) 可以根据列对应的值排序,OREDER BY 后的多个排序条件用逗号隔开。

标签:status,一次,GROUP,sql,param,record,拼接,Sql,id
来源: https://blog.csdn.net/CodeDoit/article/details/118559877

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有