针对@Select({“<script></script>“})中大于小于号转义问题

文章讲述了在使用Java的@Select注解构建SQL语句时,遇到的关于`>`和`<`符号转义问题,以及如何避免`org.xml.sax.SAXParseException`,确保正确处理实体引用和HTML标签的嵌入。

使用场景:

//虽然有>=和<= 的转义,但是我在实际使用过程中,会出现“org.xml.sax.SAXParseException: 引用了实体 "ge", 但未声明它。”的错误,后来使用&gt;=和&lt;=解决问题。
@Select({“<script>
+"<if test=\"startDt != null and startDt !='' and startDt.length() > 0 \">" +
 "  AND to_char(a.crt_time, 'YYYY-MM-DD') &gt;= #{startDt} \n" +
 "</if>" +
 "<if test=\"endDt != null and endDt !='' and endDt.length() > 0 \">" +
 "  AND to_char(a.crt_time, 'YYYY-MM-DD') &lt;= #{endDt} \n" +
 "</if>" +
</script>“})

//如果不想转义,也可以用这种方式

and <![CDATA[to_char(a.crt_time, 'YYYY-MM-DD') >= #{startDt}]]>

在这种场景下,直接使用>或<出现“Caused by: org.xml.sax.SAXParseException: 元素内容必须由格式正确的字符数据或标记组成。”的错误,需要将>或< 进行转义。

显示结果实体名称

实体编号

描述

<&lt;&#60;小于号
>&gt;&#62;大于号
&le;&#8804;小于等于号
&ge;&#8805;大于等于号
&&amp;&#38;和号
"&quot;&#34;引号
'&apos;&#39;单引号(英文、IE不支持)
&ldquo;&#147;左双引号
&rdquo;&#148;右双引号
&lsquo;&#145;左单引号
&rsquo;&#146;右单引号
|&#124;竖线Vertical bar

在@Select注解中采用script标签包围拼接SQL语句时不能在标签里有>大于或<小于符号出现,但是=好像是可以出现的。

//据说in要传list或者数组,还没验证
@Select({
            "<script>",
            "select",
            "ip, content, note",
            "from t_log",
            "where note in",
            "<foreach collection='notes' item='note' open='(' separator=',' close=')'>",
            "#{note}",
            "</foreach>",
            "</script>"
    })
    List<TLog> getDataByNotes(@Param("notes") List<String> notes);


@Select({
            "<script>",
            "select",
            "ip, content, note",
            "from t_log",
            "where note in",
            "<foreach collection='notes' item='note' open='(' separator=',' close=')'>",
            "#{note}",
            "</foreach>",
            "</script>"
    })
    List<TLog> getDataByNotes2(@Param("notes") String[] notes);
   

<choose></choose> 的等于的使用,

  • test='userType == "admin"' 中,用 == 判断参数 userType 是否等于字符串 "admin"
  • 字符串常量需用双引号 " 包裹(因外层用单引号 ' 包裹整个 test 属性值)
@Select({
    "<script>",
    "SELECT id, username, user_type FROM sys_user",
    "<choose>",
        // 当 userType 等于 "admin" 时
        "<when test='userType == \"admin\"'>",
            "WHERE user_type = '管理员'",
        "</when>",
        // 当 userType 等于 "normal" 时
        "<when test='userType == \"normal\"'>",
            "WHERE user_type = '普通用户'",
        "</when>",
        // 其他情况(默认查询所有状态正常的用户)
        "<otherwise>",
            "WHERE status = 1",
        "</otherwise>",
    "</choose>",
    "</script>"
})
List<User> selectByUserType(@Param("userType") String userType);

内容概要:本文系统梳理了多个科研领域的前沿研究与技术实现,重点涵盖FDTD方法中的完美匹配层(PML)研究,以及Matlab/Simulink在电磁、电力、控制、通信、信号处理、图像处理、路径规划、能源系统优化等领域的仿真与算法实现。文中列举了大量基于Matlab和Python的科研案例,如风电功率预测、负荷预测、无人机三维路径规划、电池系统故障诊断、雷达模拟、通信编码、微电网优化调度等,强调结合智能优化算法(如粒子群、遗传算法、深度学习等)提升系统性能。同时,提供了丰富的代码资源与仿真模型,涵盖永磁同步电机控制、逆变器设计、多智能体任务配、虚拟电厂调度等复杂系统,助力科研人员快速开展复现实验与创新研究。; 适合人群:具备一定编程基础,熟悉Matlab/Python工具,从事电气工程、自动化、通信、人工智能、新能源、控制科学等相关领域研究的研发人员及研究生。; 使用场景及目标:① 学习实现FDTD仿真中的PML边界条件以有效抑制数值反射;② 掌握Matlab/Simulink在多物理场建模、控制系统设计与优化算法中的综合应用;③ 借助提供的代码资源完成科研复现、课程设计、竞赛项目或工程原型开发; 阅读建议:此资源以科研实战为导向,不仅提供理论方法,更强调代码实现与仿真验证。建议读者结合自身研究方向,按目录顺序查阅相关模块,下载配套代码进行调试与二次开发,以达到学以致用、融会贯通的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值