问题
我在xml写了一个批量插入的语句,
其中有部分参数的值中,包含逗号,括号等特殊字符 , () <> /
导致语句生成后有特殊字符的参数值没有被自动加上引号
<insert id="insertVToolTlsCipherSuitsInfoList" parameterType="java.util.ArrayList">
insert into v_tool_tls_cipher_suits_info
values
(iana_name,protocol,hex_code,tls_version,keyExchange_alg_type,keyExchange_alg_security,keyExchange_alg_risk,authentication_alg_type,authentication_alg_security,authentication_alg_risk,encryption_alg_type,encryption_alg_security,encryption_alg_risk,hash_alg_type,hash_alg_security,hash_alg_risk,release_number,release_link,security_level)
<foreach collection="list" item="item" index="index" separator=",">
(#{item.ianaName},#{item.protocol},#{item.hexCode},#{item.tlsVersion},#{item.keyexchangeAlgType},#{item.keyexchangeAlgSecurity},#{item.keyexchangeAlgRisk},#{item.authenticationAlgType},#{item.authenticationAlgSecurity},#{item.authenticationAlgRisk},#{item.encryptionAlgType},#{item.encryptionAlgSecurity},#{item.encryptionAlgRisk},#{item.hashAlgType},#{item.hashAlgSecurity},#{item.hashAlgRisk},#{item.releaseNumber},#{item.releaseLink},#{item.securityLevel})
</foreach>
</insert>
解决方案
添加 标签
<![CDATA[ ]]>
用这个标签包裹,可以防止MyBatis在解析时把这些字符误认为是SQL的一部分。
最终代码
<insert id="insertVToolTlsCipherSuitsInfoList" parameterType="java.util.ArrayList">
insert into v_tool_tls_cipher_suits_info
(iana_name, protocol, hex_code, tls_version, keyExchange_alg_type, keyExchange_alg_security, keyExchange_alg_risk,
authentication_alg_type, authentication_alg_security, authentication_alg_risk, encryption_alg_type,
encryption_alg_security, encryption_alg_risk, hash_alg_type, hash_alg_security, hash_alg_risk, release_number,
release_link, security_level)
values
<foreach collection="list" item="item" index="index" separator=",">
(
<![CDATA[#{item.ianaName}]]>,
<![CDATA[#{item.protocol}]]>,
<![CDATA[#{item.hexCode}]]>,
<![CDATA[#{item.tlsVersion}]]>,
<![CDATA[#{item.keyexchangeAlgType}]]>,
<![CDATA[#{item.keyexchangeAlgSecurity}]]>,
<![CDATA[#{item.keyexchangeAlgRisk}]]>,
<![CDATA[#{item.authenticationAlgType}]]>,
<![CDATA[#{item.authenticationAlgSecurity}]]>,
<![CDATA[#{item.authenticationAlgRisk}]]>,
<![CDATA[#{item.encryptionAlgType}]]>,
<![CDATA[#{item.encryptionAlgSecurity}]]>,
<![CDATA[#{item.encryptionAlgRisk}]]>,
<![CDATA[#{item.hashAlgType}]]>,
<![CDATA[#{item.hashAlgSecurity}]]>,
<![CDATA[#{item.hashAlgRisk}]]>,
<![CDATA[#{item.releaseNumber}]]>,
<![CDATA[#{item.releaseLink}]]>,
<![CDATA[#{item.securityLevel}]]>
)
</foreach>
</insert>