mybatis collection标签_MyBatis第二天(结果映射+动态sql+关联查询)

笑不出莱:MyBatis第一天(介绍+文件配置+Mapper动态代理)​zhuanlan.zhihu.com

一、导包+配置文件+pojo类

1、jar包:mybatis的核心包和依赖包+连接数据库的jar包

2、日志文件(可以不需要)

3、SqlMapConfig.xml配置

<?xml version="1.0" encoding="UTF-8" ?>

4、pojo类

// 用户pojo类,对应用户表

二、结果映射(resultMap)

  1. 作用:pojo类属性名和数据库中查询结果名不同时,用resultMap来手动映射
  2. 注意:当resultMap只映射简单pojo类时(也就是此时pojo类不存在嵌套其他pojo或者不存在集合),resultMap里可以只写出不同名的属性,其余同名的属性会自动进行映射
<!--

三、动态sql

(只测试了常用的where,if,foreach。而choose, when, otherwise类似java中的switch,when对应case,otherwise对应default,且用的相对少,就没有测试)

1、where+if

(1)where标签:有sql子句的情况下才会插入where。而且,若整个sql语句的开头为 and 或者是 orwhere 元素也会将它们去除

(2)if标签:test属性值是判断的条件

<!-- 抽取出重复的sql片段,使用include标签引用它,可以达到重用的目的 -->

2、foreach(遍历标签,构建IN条件语句时用的多)

属性介绍:

  1. collection可迭代的对象可以直接是数组,集合(此时collection属性值就是array和list),也可以是包装在pojo类中的数组和集合(这时用包装类对应的的引用属性)
  2. item本次迭代获取的元素
  3. open:在前面添加的sql片段
  4. close:在结尾处添加的sql片段
  5. separator:指定遍历的元素之间使用的分隔符
<select 

四、关联查询

1、原始的DBUtils解决多表关联查询:

将多表查询的结果用MapListHandler(一行对应一个map(键为列名),许多map又被封装进一个list集合中)封装起来,遍历这个list集合,在利用beanUtils工具将每个map封装为简单的javabean(多个),再将这些javabean进行对应的嵌套

2、MyBatis解决多表关联查询(用resultMap):

(1)一对一:一个pojo里面嵌套了另一个pojo

(1.1) association标签:关联一个复杂类型(比如pojo)

属性介绍:

  • javaType:指定关联的这个复杂类型的java类型
  • property:pojo中对应的属性名

(1.2) mapper的配置

<!--  ==================一对一查询,订单表对应用户表(订单表为中心)============== -->

(1.3) 数据库的查询结果

d6eda100d74d22bef1258cd3f25ffb9c.png

(2)一对多:一个pojo里面嵌套了集合的pojo

(2.1)collection标签:关联一个复杂类型的集合

属性介绍:

  • ofType:这个复杂类型集合里装的对象的具体类型
  • property:pojo中对应的属性名

(2.2) mapper的配置

<!-- ==================	一对多查询,用户表对应订单表(用户表为中心)	============= -->

(2.3) 数据库的查询结果

b712f5460f0ef76fc59c0578f615f378.png

(3)注意:

存在pojo嵌套时,数据库中查出来的列的名字和pojo中属性名相同时,也不能省略。

五、Mapper接口+测试类

1、映射文件对应的接口

package 

2、测试类

package 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值