MyBatis XML映射文件

MyBatis XML映射文件

  Mapper接口开发方法只需要程序员编写Mapper接口,由Mybatis框架根据接口定义创建接口的动态代理对象。
Mapper接口开发需要遵循以下规范:

  1. Mapper.xml文件中的namespace与mapper接口的类路径相同。
  2. Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
  3. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
  4. Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

一、xml文件样式

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xx.mapper.xxxMapper">
、、、 、、、 、、、 、、、
</mapper>
  • Mapper接口对应的statement需要放到<mapper></mapper>标签之中
  • namespace为命名空间,用于隔离sql语句,与mapper接口的类路径相同

二、ResultMap

  resultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系,resultMap实质上还需要将查询结果映射到pojo对象中。resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。

<resultMap type="com.xx.domain.Order" id="orderMap" autoMapping="" extends="">
<!-- 订单信息查询结果,和用户和订单明细关联 -->
	<id property="id" column="id"></id>
	<result property="userId" column="user_id"></result>
	<result property="number" column="number"></result>
	... ... ... ...
	<association property="user" javaType="com.xx.domain.User">
	<!-- order和user 一对一对应 需要在Order类中添加User对象 -->
	<!-- 这里的id为user的id,如果写上表示给user的id属性赋值 -->
		<id property="id" column="user_id"/>
		<result property="username" column="username"/>
		<result property="password" column="password"/>
	</association>
	<collection property="orderDetails" ofType="com.xx.domian.OrderDetail">
	<!-- order和orderDetail 一对多对应 需要在Order类中添加List<OrderDetail> -->
	<!-- 一对多是多对多的特例 -->
		<id property="id" column="orderdetail_id"/>
		<result property="items_id" column="items_id"/>
		<result property="items_num" column="items_num"/>
	</collection>
</resultMap>

<resultMap> 标签

  使用association和collection完成一对一和一对多高级映射(对结果有特殊的映射要求)。

  • id属性:resultMap标签的标识。
  • type属性:返回值的全限定类名,或类型别名。
  • autoMapping属性:值范围true(默认值)|false,,设置是否启动自动映射功能,自动映射功能就是自动查找与字段名小写同名的属性名,并调用setter方法。而设置为false后,则需要在resultMap内明确注明映射关系才会调用对应的setter方法。
  • extends属性:填写其他resultMap的id,可以继承其中的映射关系

子标签

  • <id></id>标签,用于设置主键字段与领域模型属性的映射关系
  • <result></result>标签,用于设置普通字段与领域模型属性的映射关系
  • <association></association>标签,将关联查询信息映射到一个pojo对象中,

使用场景:
为了方便查询关联信息可以使用association将关联订单信息映射为用户对象的pojo属性中,比如:查询订单及关联用户信息。
使用resultType无法将查询结果映射到pojo对象的pojo属性中,根据对结果集查询遍历的需要选择使用resultType还是resultMap。

  • <collection></collection>标签,将关联查询信息映射到一个list集合中。

使用场景:
为了方便查询遍历关联信息可以使用collection将关联信息映射到list集合中,比如:查询用户权限范围模块及模块下的菜单,可使用collection将模块映射到模块list中,将菜单列表映射到模块对象的菜单list属性中,这样的作的目的也是方便对查询结果集进行遍历查询。
如果使用resultType无法将查询结果映射到list集合中。

三、ResultType

  简单输出类型也可以使用resultType,输出pojo对象和输出pojo列表在sql中定义的resultType是一样的。

返回单个pojo对象要保证sql查询出来的结果集为单条,内部使用session.selectOne方法调用,mapper接口使用pojo对象作为方法返回值。
返回pojo列表表示查询出来的结果集可能为多条,内部使用session.selectList方法,mapper接口使用List对象作为方法返回值。

四、TypeAliases

Mybatis支持别名:

别名映射的类型
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal

自定义别名

<typeAliases>
	<!-- 单个别名定义 -->
	<typeAlias alias="user" type="com.xx.domain.User"/>
	<!-- 批量别名定义,扫描整个包下的类,别名为类名(首字母大写或小写都可以) -->
	<package name="com.xx.domain"/>
	<package name="其它包"/>
</typeAliases>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值