MyBatis学习(三)

时间:2023-03-09 20:05:05
MyBatis学习(三)

输入和输出映射

resultType

指定输出结果的类型(pojo、简单类型、hashmap等),将sql查询结果映射为java对象 。

MyBatis学习(三)

注意:sql查询的列名要和resultType指定pojo的属性名相同,指定相同属性方可映射成功,如果sql查询的列名要和resultType指定pojo的属性名全部不相同,list中无法创建pojo对象。

resultMap

将sql查询结果映射为java对象。

如果sql查询列名和最终要映射的pojo的属性名不一致,使用resultMap将列名和pojo的属性名做一个对应关系(列名和属性名映射配置)

MyBatis学习(三)

使用resultMap

MyBatis学习(三)


高级映射

一对一查询

使用resultType实现

单表po类

MyBatis学习(三)

创建自定义POJO,继承自sql查询列多的po类。

MyBatis学习(三)

mapper.xml

定义mapper.xml文件,创建的pojo必须包括订单信息和用户信息,创建一个orderCustom

MyBatis学习(三)

mapper.java

MyBatis学习(三)

使用resultMap实现

resultMap提供一对一关联查询的映射和一对多关联查询映射,一对一映射思路:将关联查询的信息映射到pojo中

在主查询Orders类中创建一个User属性,将关联查询的信息映射到User属性中。

MyBatis学习(三)

mapper.xml

MyBatis学习(三)

resultMap定义

MyBatis学习(三)

mapper.java

MyBatis学习(三)

小结

resultType:要自定义pojo ,保证sql查询列和pojo的属性对应,这种方法相对较简单,所以应用广泛。

resultMap:使用association完成一对一映射需要配置一个resultMap,过程有点复杂,如果要实现延迟加载就只能用resultMap实现 ,如果为了方便对关联信息进行解析,也可以用association将关联信息映射到pojo中方便解析。


一对多查询

查询所有订单信息及订单下的订单明细信息。

SELECT
  orders.*,
  user.username,
  user.sex ,
  orderdetail.id orderdetail_id,
  orderdetail.items_num,
  orderdetail.items_id
FROM
  orders,
  USER,
  orderdetail
WHERE orders.user_id = user.id  AND orders.id = orderdetail.orders_id

resultMap进行一对多映射

resultMap 提供collection完成关联信息映射到集合对象中。

在orders类中创建集合属性:

MyBatis学习(三)

mapper.xml

MyBatis学习(三)

resultMap定义

MyBatis学习(三)

mapper.java

MyBatis学习(三)