MyBatis Mapper XML映射文件总结

概述

MyBatis的真正强大之处在于它的映射语句,这也是它的魔力所在。由于它的功能异常强大,映射器的XML文件文件就显得相对简单。如果拿他跟具有相同功能的JDBC代码进行对比,你会立即发现省掉将近95%的代码。MyBatis就是针对SQL构建的,并且比普通的方法做的更好。

select元素的主要属性介绍

下面的属性可以根据方法对比理解,id相当于方法名,parameterType相当与参数类型(因为Mybatis可以自动推断,可选),resultType/resultMap相当于返回值类型。

  • id。命名空间中唯一的标识符,可以被用来引用这条语句。
  • parameterType。是传入参数类型的完全限定名或别名。该属性是可选的,因为MyBatis可以通过TypeHandler推断出具体传入语句的参数,默认值为unset。
  • resultType。语句返回的期望类型的完全限定名或别名。注意如果结果返回的是集合情形,那应该是集合中包含的类型,而不是集合本身。返回时可以使用resulType或resultMap,但不能同时使用。
  • resultMap。外部resultMap的命名引用。结果集映射是MyBatis最强大的特性,对其有一个很好的理解的话,许多复杂映射的情形都能迎刃而解。返回时可以使用resultMap或resultType,但不能同时使用。

insert、update和delete

insert、update和delete元素用来映射DML语句,是MyBatis中最常用的元素之一。
配置与select非常接近。例如:

<insert
  id="inserUser"
  parameterType="org.fkit.domain.User"
  flushCache="true"
  statementType="PREPARED"
  keyProperty=""
  keyColumn=""
  useGeneratedKeys="false"
  timeout="20">
<update
  id="updateUser"
  parameterType="org.fkit.domain.User"
  flushCache="true"
  statementType="PREPARD"
  timeout="20">
<delete
  id="deleteUser"
  parameterType="org.fkit.domain.User"
  flushCache="true"
  statementType="PREPARED"
  timeout="20">

insert、update、delete元素的属性大多和select一致。

  • id。命名空间中唯一的标识符,可以被用来引用这条语句。
  • parameterType。是传入参数类型的完全限定名或别名。该属性是可选的,因为MyBatis可以通过TypeHandler推断出具体传入语句的参数,默认值为unset。
  • useGeneratedKeys。用于主键自动生成的数据库场景(仅对insert和update有用)这会令MyBatis使用JDBC的getGeneratedKeys方法获取由数据库内部生成的主键(比如,想MySql和SQLServer这样的关系数据库管理系统的自动递增字段),默认值为false。
  • keyProperty。(仅对insert和update有用)唯一标记一个属性,把需要返回的列值设置到对象的属性中。MyBatis会通过getGeneratedKeys的返回值或者通过insert/update元素的selectKey子元素设置它的键值,默认为unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
  • keyColumn。(仅对insert和update有效)指定生成的键值在数据库中的列名,这个设置仅对某些数据库(像PostgreSQL)是必须的,当主键列不是表中的第一列时需要设置。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。

返回值相关属性

userGeneratedKeys、keyProperty、keyColumn是为了把插入数据自动生成的主键值返回给调用者。
首先,如果数据库支持自动生成主键的字段(比如MySql和SQL Server),那么可以设置useGeneratedKeys=“true”,然后再把keyProperty设置到目标属性上就可以了(一般设置到id属性上)。例如,如果TB_USER表已经对id使用了自动生成的列类型,那么语句可以修改为。

<insert id="inserUser" useGeneratedKeys="true" keyProperty="id">
	insert into TB_USER (username,password,email,address)  
	values (#{username},#{password},#{email},#{address})
</insert>

对于不支持自动生成类型的数据库(比如Oracle)或可能不支持自动生成主键的JDBC驱动来说,MyBatis有另外一种方法来生成主键。

<insert id="insertUser">
	<selectKey keyProperty="id" resultType="int" order="BEFORE">
		select SEQUENCE_TB_USER.nextval as id from dual
	</selectKey>
	insert into TB_USER (id,username,password,email,address)
	values (#{id},#{username},#{password},#{email},#{address})
</insert>

在上面的示例中,selectKey元素将会首先运行,其通过查询SEQUENCE序列,TB_USER的id会被设置,然后插入语句会被调用。
selectKey元素描述如下:

<selectKey
	keyProperty="id"
	keyColumn="id"
	resultType="int"
	order="BEFORE"
	statementType="PREPARED">
  • keyProperty。selectKey语句结果应该被设置的目标属性。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
  • keyColumn。匹配返回的结果集中的列名称。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
  • resultType。结果的类型。MyBatis通常可以推算出来,但是为了更加确定,建议明确写出。MyBatis允许任何简单类型用作主键的类型,包括字符串。如果希望作用于多个生成的列,则可以使用一个包含期望属性的Object或一个Map。
  • order。可以被设置为BEFORE或AFTER。如果设置为BEFORE,那么它 会首先选择属性并设置到对象中,然后执行插入语句。设置为AFTER,那么先执行插入语句,然后是selectKey元素。

sql

sql元素可以被用来定义可重用的SQL代码,可以被包含在其他语句中。它可以被静态的(在加载参数时)参数化。
示例:

<sql id="base_columns">
  id,name,age,sex
</sql>
<select id="selectUser" resultType="com.fkit.User">
	select <include refid="base_columns">
	from t_user where id = #{id}
</select>

参数

参考:Mybatis @Param注解使用总结

resultMap

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

融极

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值