Mybatis开发遇到问题汇总

ぃ、小莉子 提交于 2019-12-16 15:24:03

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

1.mybatis 中![CDATA[...]]

在今天使用Mybatis的xml文件中写sql语句时写入了一些特殊字符 如 < > & 等,但解析xml文件的时候会被转义,事实上并不希望它被转义,可以使用<![CDATA[ ]]>. 这是XML语法,在CDATA内部的所有内容都会被解析器忽略. 但是因此会导致<if test=""></if> <where></where> <choose></choose> <trim></trim>等标签本身功能失效,所以使用时把带有特殊字符的语句或字符本身放在<![CDATA[ ]]>内即可,即尽量精确其作用范围.
也就是当你在使用有<if test=""></if> <where></where> <choose></choose> <trim></trim>的标签中使用 < > & 等特殊字符的时候,会出现xml语法错误,需要使用<![CDATA[ ]]>将 < > & 等特殊字符被解析器忽略,正确书写:

<select id="findChannelAlarmPage" resultType="DVBSChannelAlarmModel">
		select * from dvbs_channel_alarm_tab where 1=1
		<if test="queryMap.end_date != null">
			<![CDATA[
			and	check_time <= #{queryMap.end_date}
			]]>			
		</if>
</select>

2.bind 标签

bind 标签可以使用 OGNL 表达式创建一个变量井将其绑定到上下文中。在前面的例子中, 
UserMapper.xml 有一个 selectByUser 方法,这个方法用到了 like 查询条件,部分代码如下 。

<if test=” userNarne != null and userNarne ! = ””>
and user name like concat ( ’ 毛 ’, #{ userNarne },’ 毡 ’ )
</if>

使用 con cat 函数连接字符串,在 MySQL 中,这个函数支持多个参数,但在 Oracle 中只 
支持两个参数。由于不 同数据库之间的语法差异 ,如果更换数据库,有些 SQL 语句可能就需要 
重写。针对这种情况,可 以使用 bind 标签来避免由于更换数据库带来的一些麻烦。将上面的 
方法改为 bind 方式后,代码如下。

<if test=” userNarne != null and userNarne !=””>
<bind narne= " userNarneLike ” value = ”’ 草 ’+ userNarne + ’ 每 ’” / 〉
and user name like #{userNarneLike}
</if>

bind 标签的两个属性都是必选项, name 为绑定到上下文的变量名, value 为 OGNL 表 
达式。创建一个 bind 标签的变量后 , 就可以在下面直接使用,使用 bind 拼接字符串不仅可 
以避免因更换数据库而修改 SQL,也能预防 SQL 注入。

3.mybatis的存储过程

4.mybatis鉴别器

1、概述:

鉴别器在于确定使用那个ResultMap来映射SQL查询语句,在实现中我们往往有一个基类,然后可以派生一些类。比如我们要选择一群人可以用List<Person>,然而Person里面有个性别sex,根据它还可以分为Male或者Female。鉴别器就要根据sex决定用Male还是用Female相关的Mapper进行映射。

这些话还是很抽象,不过说起鉴别器,语言真的不好用描述,不过不要紧,我们来看一个实例就豁然开朗了,我们知道在上篇中我们已经有了一个员工的POJO,然后继承这个POJO分成一个男性,一个女性的POJO。

2、实例:

当我们查询一批员工的时候,我们希望的是返回一个List<Employee>,而里面的元素根据性别(sex)自动匹配是MaleEmployee或者是FemaleEmployee,于是我们需要根据sex的值去决定使用MaleEmployee或者是FemaleEmployee的resultMap去映射,这便是鉴别器。
--------------------- 
原文:https://blog.csdn.net/ykzhen2015/article/details/51249963 

5.mybatis的批量更新和批量插入

mybatis三种批量插入方式对比:

https://blog.csdn.net/m0_37981235/article/details/79131493

Mybatis中进行批量更新(updateBatch):

https://blog.csdn.net/xyjawq1/article/details/74129316

https://blog.csdn.net/xu1916659422/article/details/77971696

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!