第二章 SQL印射关系

本文详细介绍了MyBatis的SQL映射文件,包括mapper、resultMap、insert、update、delete、select等元素的用法。重点讨论了resultMap的resultType和resultMap属性,以及association和collection在处理复杂类型关联和集合映射中的应用。
摘要由CSDN通过智能技术生成

第二章SQL印射关系

SQL印射文件
》mapper:印射文件的根元素节点,只有一个属性namespace。
》cache:配置给定命名空间的缓存。
》cache-ref:从其他命名空间引用缓存配置。
》resultMap:用来描述数据库结果集和对象的对应关系。
》sql:可以重用SQL块,也可以被其他语句引用。
》insert:印射插入语句。
》update:印射更新语句。
》delete:印射删除语句。
》select:印射查询语句。

ResultType
resultType直接表示返回类型,包括基础数据类型和复杂数据类型。

resultMap
resultMap则是对外部resultMap定义的引用,对应外部resultMap的id,表示返回结果印射到哪一个resultMap上。它的应用场景一般是:数据库字段信息与对象属性不一致或者需要做复杂的联合查询以便控制印射结果。

resultType和resultMap的关联
在MyBatis进行查询印射的时候,其实查询出来的每个字段都放在一个对应的Map里面,其中键是字段名,值则是其对应的值。当select元素提供的返回类型属性是resultType的时候,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。当使用resultType的时候,直接在后台就能接收到其相应的对象属性值。其实MyBatis的每个查询印射的返回类型都是resultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis会自动把对应的值赋给resultType所指定对象的属性;当我们提供的返回类型是resultMap的时候,因为Map不能很好地表示领域模型,我们就需要通过进一步的定义把它转换为对应的实体对象。

resultMap的自动印射级别
选择部分字段进行resultMap印射,我们希望没有印射的字段是不能在后台查询并输出的,即使SQL语句中是查询所有字段,因为我们使用resultMap也是为了自由灵活地控制印射结果,达到只对关心的属性进行赋值填充的目的。

@Param注解实现多参数入参
使用@Param来传入多个参数。

resultMap的基本配置项
属性
》id:resultMap的唯一标识。
》type:表示该resultMap的印射结果类型。
子节点
》id:一般对应数据库中该行的主键id,设置此项可以提升MyBatis性能。
》result:印射到JavaBean的某个”简单类型”属性,如基础数据类型、包装类等。
子节点id和result均可实现最基本的结果集印射,将例印射到简单数据类型的属性。这两者唯一不同的是:在比较对象的实例时id将作为结果集的标识属性,有助于提高总体性能,特别是应用缓存和嵌套结果印射的时候。而要实现高级结果印射,就需要两个配置:association和collection。

association
association:印射到JavaBean的某个”复杂类型”,比如JavaBean类,即JavaBean内部嵌套一个复杂数据类型属性,这种情况就属于复杂类型关联。但是注意:association仅处理一对一的关联关系。

association的属性
》JavaType:完整Java类名或者别名。印射到一个JavaBean,则MyBatis通常会自行监测到其类型;印射到一个HashMap,则应该明确指定JavaType,来确保所需行为。
》property:印射数据库例的实体对象的属性。此处为在User里定义的属性:role。
association的子元素如下:
》id。
》result。
》property:印射数据库例的实体对象的属性。此处为Role的属性。
》column:数据库例名或别名。
collection
collection元素的作用和association元素的作用差不多,事实上,它们非常相似,也是印射到JavaBeau的某个复杂类型属性,只不过这个属性是一个集合列表,即JavaBeau内部嵌套一个复杂数据类型属性。和使用association元素一样。

本章总结
》MyBatis的SQL印射文件提供select、insert、update、delete等元素来实现SQL语句的印射。
》SQL印射文件的根节点是mappers元素,需要指定namespace来区别其他的mappers,保证全局唯一,并且其名称必须要跟接口同名,作用是绑定DAO接口,即面向接口编程。
》SQL印射文件的select的返回结果类型的印射可以使用resultMap和resultType,但不能同时使用。
》resultMap的association和collection可以实现高级结果印射。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值