基于Mapper代理配置的Mybatis多表查询一对一的三种方式

基于Mapper代理配置Mybatis多表查询的一对一映射(三种方式)


一、mybatis多表联查使用内连接


1、两表联查中一对一关系对于POJO的体现(截图忽略了get,set方法)

   


2、编写对应的PaperMapper接口和在同目录下创建对应sql映射文件PaperMapper.xml

注意:

这里我们在mybatis总配置里设置包扫描


<mappers>
<!-- 自动扫描指定包中的sql映射文件 -->
<package name="com.ashes.mapper"/>
</mappers>


(批量加载mapper 指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载 

遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中 

上边规范的前提是:使用的是mapper代理方法)




(1)mapper接口类名和mapper.xml映射文件名称保持一致,且namespace的值习惯上是包名家接口名


  


(2)Paper:方法返回值类型,对应select标签的resultMap,我们可以通过rm(自定义)找到对应id为rm的

resultMap,它的type的类型就是我们的Paper对应的POJO,因此找到我们的返回值类型

(3)getPaper:方法名,对应select标签的id,这里使用了代理模式,我们需要保证Mapper接口方法名和

Mapper.xml中定义的每个statement的id相同

(4)int pid: 参数,对应select标签中的parameterType的Integer




3、补充:


(1)<![CDATA[xxxxxx]]>:将标签内容当文本输出

(2)resultMap中的type:将查询结果映射到指定的POJO中

(3)id:指定查询列中的唯 一标识,订单信息的中的唯 一标识,如果有多个列组成唯一标识,配置多个id

(4)property:订单信息的唯 一标识列所映射到POJO的Paper中哪个属性

(5)column:订单信息的唯 一标识 列(数据库)

(6)association:用于映射关联查询单个对象的信息 property:要将关联查询的学生信息映射到Paper中哪个属性

(7)javaType:对应学生信息的POJO


4、测试





二、mybatis多表联查使用嵌套查询,执行多个sql操作(涉及延迟加载知识,后续讲解)


1、编写新的方法,规范如上



(1)通过rm2找到id为rm2的resultMap,可以看看(4)type是我们需要的返回类型

(2)resultMap执行到association时,通过select值getStu找到对应id为getStu的select的sql语句,我们可以看到resultType(3)是我们在association中需要的返回值类型




2、测试




注意:如果我们使用延迟加载(可以提高我们的效率)


(1)使用延迟加载


 (此处只有一条sql语句执行)


但是我们用延迟加载的时候需要做一个重要配置



Mybatis的检索策略:


1、立即检索:在对象的关联查询中,查询一方的数据,会立即检索关联方的数据(属于默认的检索策略)

2、延迟检索(懒加载):在对象的关联查询,查询一方数据,不会立即检索关联方数据,只有等到访问关联方对象的属性时,才发送sql语句去查询


(2)不使用延迟加载


 (不使用延迟加载就会一次执行两条sql)

内连接的使用会涉及笛卡尔积,效率不够高,一般建议使用嵌套查询,使用延迟加载


三、mybatis多表联查使用resultType


  


使用Map存储,resultType的值为hashmap,接口的方法返回值为Map,得到的结果集存入map中,

其中key是数据库的列名,value是数据库查询出的信息。




猜你喜欢

转载自blog.csdn.net/Ashes18/article/details/73322258