MyBatis总结(3)---映射文件的元素配置

MyBatis

1.简介
映射文件是MyBatis框架中十分重要的文件,可以说,MyBatis框架的强大之处就体现在映射文件的编写上。映射文件的命名一般是实体类名+Mapper.xml。例,Student类对应的映射文件是StudentMapper.xml文件。这个xml文件中包括Student类所对应的数据库表的各种增删改查sql语句。在映射文件中,< mapper>元素是映射文件的根元素,其他元素都是它的子元素:
在这里插入图片描述注:< mapper>元素有一个属性是namespace,它对应着实体类的Mapper接口,此接口就是MyBatis的映射接口,它对MapperXML文件中的sql语句进行映射。 例,

<mapper namespace="com.money.mappers.BookMapper">

2.主要元素
①< select>元素
< select>元素用于映射查询语句,它从数据库中读取出数据,并将读取的数据进行封装。例,

<select id="findAllBooks" resultMap="com.money.bean.Book">
	select id,name,price,sellnum
	from book
</select>

id属性的值要和实体类的Mapper映射接口中的方法名保持一致。resultMap属性为返回的结果集,如果该类没有配置别名就需要使用全限定名。resultType属性代表查询到的结果集中每一行所代表的数据类型。例,查询到学生结果集,则每一行代表一个学生对象,此时在映射接口中可以将该方法的返回值定为List< Student>,则MyBatis在底层会将查询到的每一个学生对象自动添加到该集合中,默认是ArrayList。如果映射方法的返回值为SortedSet<>,则默认是ThreeSet,此时实体类必须实现Comparable< T>接口,因为MyBatis底层创建集合对象是通过反射默认调用无参构造方法。当返回值是set<>则默认是HashSet。

当没有配置< resultMap>元素且列名和POJO中set方法去掉set后剩余的部分首字母小写不一致时就会出现映射不匹配的问题,此时可以通过给列名起别名的方法解决,别名必须和POJO中set方法去掉set后剩余的部分首字母小写得到的名字一致。但它的弊端就是只在当前select语句中有效,即只在当前映射方法中有效。配置< resultMap>元素可以有效解决这个问题。

< select>元素的常用属性:
在这里插入图片描述
②< insert>元素、< update>元素和< delete>元素
< insert>元素用于映射插入语句,在执行完元素中定义的SQL语句后,会返回一个表示插入记录数的整数。
< update>元素用于映射更新语句,< delete>元素用于映射删除语句。
以上元素的使用方式与select类似。例,

<insert id="insertBook" parameterType="Book">
	INSERT INTO book
	values(#{bID},#{bname},#{bprice},#{bnumber})
</insert>

parameterType为方法的参数类型,如果该类型没有配置别名就需要使用全限定名。此时的#{ }就相当于JDBC中sql语句的占位符?,它里面的值为parameterType类型get方法去掉get后剩余的部分首字母小写。
此时也是通过反射从parameterType类型中获取对应的值插入到数据库中。

③< resultMap>元素
< resultMap>元素表示结果映射集,是一个非常重要的元素。它的主要作用是定义映射规则、级联的更新以及定义类型转化器等。它可以引导MyBatis如何将结果映射为Java对象。例,

<!-- 将实体类与数据库列匹配 -->
<resultMap type="Book" id="BookResult">
	<id property="bID" column="id" />
	<result property="bname" column="name" />
	<result property="bprice" column="price" />
	<result property="bnumber" column="sellnum" />
</resultMap>

< resultMap>元素的type属性表示需要映射的POJO,如果此POJO没有配置别名那么这里要使用POJO的全限定名, id属性是这个resultMap的唯一标识,因为在一个XML文件中resultMap可能有多个。它有一个子元素< constructor>用于配置构造方法(当一个POJO中未定义无参的构造方法时,就可以使用< constructor>元素进行配置)。子元素< id>用于表示哪个列是主键,而< result>用于表示POJO和数据表中普通列的映射关系。property属性的值一般是POJO中set方法去掉set后剩余的部分首字母小写,column一般是数据表中的列名或列名的别名。当只有单表查询,且表中一部分或全部property和column的值完全相同时,< resultMap>元素那一部分或全部可以不用配置,此时select语句可以使用select *
配置property和type的原因:通过反射创建类对象。
注:attribute一般是类的成员变量名。

此外还有< association>和< collection>用于处理多表时的关联关系,而< discriminator>元素主要用于处理一个单独的数据库查询返回很多不同数据类型结果集的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值