第二章SQL映射文件

2.1.1 SQL映射文件
顶级元素配置:
mapper:映射文件的根元素节点,只有一个namespace属性(命名空间),
其作用如下:

  • 用于区分不同的mapper,全局唯一
  • 绑定DAO接口,即面向接口编程。当namespace绑定某一接口之后,可以不用写该接口的实现类,MyBatis会通过接口的完整限定名查找到对应的mapper配置来执行SQL语句。因此namespace命名必须要跟接口同名。

cache:配置给定命名空间的缓存。
cache-ref:从其他命名空间引用缓存配置。
resultMap:用来描述数据库结果集和对象的对应关系。
sql:可以重用的SQL块,页可以被其他语句引用。
insert:映射插入语句。
update:映射更新语句。
delete:映射删除语句。
select:映射查询语句。

注意:
关于MyBatis的SQL映射文件中的mapper元素的namespace属性有如下要求。

(1) namespcece 的命名必须跟某个DAO接口网名,同属于DAO层,故代码结构上,映射文件与该DAO接口应放置在同一package下(如cn.smbms .dao.user),  并且习惯上都是以Mapper结尾(UserMapperjava、 UserMapper.xml)。

(2)在不同的mapper文件中,子元素的id可以相同,MyBatis 通过namespace和子元素的id联合区分。接口中的方法与映射文件中SQL语句id应一-对应。

id:命名空间中唯一的标识符,可以被用来引用这条语句。
parameterType:表示查询语句传入参数的类型的完全限定或别名。它支持基础数据类型和复杂数据类型。

2.1.2 使用resultMap完成查询结果的展现
(1)修改PO.JO. User jive, 增加sfolene属性,并修改查询用户列表的SOL语句,对用户表(smbms. user) 和角色表(smboms _role)进行连表查询,使用resultType做自动映射。
(2)通过resultMap来映射自定义结果。
我们推荐第二种方案,使用resultMap做自定义结果映射,字段名可以不一致,并且还可以指定要显示的列,比较灵活应用也广泛。
注意:
MyBatis 中使用resultType做自动映射,一定要注意:字段名和POJO的属性名必须一致。
若不一致,则需要给字段起别名,保证别名与属性名一致。

resultMap元素用来描述如何将结果集映射到 Jan对象觉处使用he对列表展示所量的必要字现来进行自由映射特别是当数据库的字段名和POJ中的属性名不一 致的情况下比如角色名称字段名lmn是oleiamne,而U对象的属性名则为seole此时就需要做映射。

元素的属性值和子节点

  动属性唯一标识北口值用于select元素resuitMep属性的引用。> tipe属性:表示该restMap的映射结果类型。

  子节点:用于标识一些简单属性,其中colm属性表示从数据库中查询的字段名,

  poperty则表示查询出来的字段对应的值赋给实体对象的哪个属性。

  最后在测试类中进行相关字段的输出展示列表(用户编码.用户名称、性别、年龄,电话、用户角色1.注意:用户角色不再是角色id.输出的是角色名称。

  MyBatis中在对查询进行select映射的时候,返回类型可以用esultType.也可以用resutMap,那么resultType和esuitMap到底有何关联和区别?应用场景又是什么?下面做详细讲解。

  1. resultType

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

2. resultMap

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

  3. resultType 和resultMap的关联

  在MyBatis进行查询映射的时候,其实查询出来的每个字段值都放在一个对应的Map里面,其中键是字段名,值则是其对应的值。当select元素提供的返回类型属性是resultType的时候. MyBatis会将Map里面的键值对取出赋给resutType所指定的对象对应的属性(即调用对应的对象里的属性的settet 方法进行填充)。正因为如此.当使用resultType的时候,直接在后台就能接收到其相应的对象属性值。由此可看出,其实MyBatis的每个查询映射的返回类型都是resutMap,只是当我们提供的返回类型属性是rsutType的时候.MyBatis 会自动把对应的值赋给rsutType所指定对象的属性,而当我们提共的返回类型是rsultMlp的时候,因为Map不能很好地表示领域模型,我们就需要通过进步的定义把它转化为对应的实体对象。

注意
在MyBatis中,使用resultMap能够进行自动映射匹配的前提是字段名和属性名需要一致,
在默认映射级别(PARTIAL) 情况下,若一致,即使没有做属性名和字段名的匹配,也可以在后台获取到未匹配过的属性值;若不一致,且在resultMap里没有做映射,那么就无法在后台获取并输出。

2.2.3 使用@Param注解实现多参数入参

  修改个人密码。对于此需求,也是修改操作,但是可以明确方法的传入参数只有两个:用户id和新密码。若按照之前封装成User对象的方式进行传参,并不是很合适,可以用更灵活的方式处理:直接进行多参数入参即可,代码可读性高,可清晰地看出这个接口方法所需的参数是什么。

2.3.2association

association:映射到JavaBean的某个”夏朶奘型” 属性, 比如JavaBean癸,即JavaBean内部嵌套- -个夐朶数据癸型(JavaBean) 属性,送神情况就属于夏朶炎型的美朕。但是需要注意: association収処理一対一的美朕美系。

2.3.3 collection

  coletion元素的作用和asociasion 元素的作用差不多一一样, 事实上,它们非常类似, 也是映射到JavaBean的某个“复杂类型”属性,只不过这个属性是一个集 合列表,即JavaBean内部嵌套一个复杂数据类型(集合)属性。和使用asociation 元素一样,我们使用嵌套查询,或者从连接中嵌套结果集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值