马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本日我们来聊聊 MyBatis XML 文件里的 ,我依稀记得我第一次看到 ,心想,这是个啥啊?
起首我们要明确: 不是 MyBatis 的专属语法,而是 XML 的原生语法(全称 Character Data,字符数据)。
XML 剖析器 对某些特别字符(比如 、&、'、" 等)举行剖析的时间,大概会将这些特别字符 误判,比如 将 <strong> 的核心作用:将包裹的内容标记为 "纯文本",XML 剖析器会跳过对此中内容的语法剖析,直接 原样保存,从而制止特别字符与 XML 语法的辩论,包管 MyBatis 终极拿到的 SQL 是我们预期的样子。
我们除了可以使用 ,也可以使用 转义字符。
常用的 转义字符对照:
- < → <
- > → >
- & → &
- " → "
- ' → '
注意末了的 ; 须要留着。
错误写法:- <select id="getUserByAge" resultType="User">
- <select id="getUserByAge" resultType="User">
- <select id="getUserByAge" resultType="User">
- SELECT * FROM user WHERE <![CDATA[ age < #{age} ]]>
- </select>age < #{age}
- </select>
- </select>
复制代码 使用 转义 写法:- <select id="getUserByAge" resultType="User">
- <select id="getUserByAge" resultType="User">
- <select id="getUserByAge" resultType="User">
- SELECT * FROM user WHERE <![CDATA[ age < #{age} ]]>
- </select>age < #{age}
- </select>
- </select>
复制代码 使用 CDATA 写法:- <select id="getUserByAge" resultType="User">
- SELECT * FROM user WHERE <![CDATA[ age < #{age} ]]>
- </select>
复制代码 是不是使用 CDATA 的可读性要高许多,以是保举使用 CDATA,尤其是复杂SQL。
我们看个不是很复杂的SQL。
复杂SQL 转义 写法:- <select id="getUserByAge" resultType="User">
- SELECT * FROM user WHERE <![CDATA[ age < #{age} ]]>
- </select>(age < #{age} OR salary > #{salary}) AND (create_time gt;= #{startTime} OR update_time lt;= #{endTime})
复制代码 复杂SQL CDATA 写法:- <select id="getUserBySpec" resultType="User">
- SELECT * FROM user
- <![CDATA[
- WHERE (age < #{age} OR salary > #{salary})
- AND (create_time >= #{startTime} OR update_time <= #{endTime})
- ]]>
- </select>
复制代码 MyBatis 高版本 对部门特别字符做了兼容,比如直接写 > 大概不报错了。这是 "宽松剖析",跨情况(比如差别 XML 剖析器、差别数据库驱动等)仍有大概出题目,保举始终用 CDATA 包管兼容性。
是 MyBatis 中处置处罚 SQL 语句与 XML 语法辩论的安全屏蔽。对包罗 特别字符 的 SQL 片断举行最小范围的 CDATA 包裹,既包管了安全,又确保了 MyBatis 动态 SQL 功能的完备性。
手执烟火以营生,心怀诗意以谋爱。-- 烟沙九洲
免责声明:如果侵犯了您的权益,请联系站长及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金. |