MyBatis resultMap元素详解

您所在的位置:网站首页 resultmap标签下的id标签 MyBatis resultMap元素详解

MyBatis resultMap元素详解

2023-08-14 14:11| 来源: 网络整理| 查看: 265

目录

一、resultType和resultMap

二、resultMap标签解析及resultMap创建举例

元素标签详解

resultMap创建举例

resultMap如何将结果映射到结果集

如何使用association元素嵌套结果映射(一般使用一对一查询)

如何使用collection元素嵌套结果映射(一般使用一对多查询)

三、测试代码举例(包含一对一关联查询)

先在Mapper文件中,配置基本的sql语句

配置resultMap标签,映射不同的字段和属性名

使用resultMap进行关联查询

一对一查询

一、resultType和resultMap

resultType

resultType可以把查询结果封装到pojo类型中,但必须pojo类的属性名和查询到的数据库表的字段名一致。 如果sql查询到的字段与pojo的属性名不一致,则需要使用resultMap将字段名和属性名对应起来,进行手动配置封装,将结果映射到pojo中

resultMap

resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。

图片

二、resultMap标签解析及resultMap创建举例 元素标签详解 resultMap元素属性  id:映射规则集的唯一标识,可以被select元素的resultMap属性应用type:映射的结果类型,这里指定封装成userList实例 resultMap元素包含以下子元素 id:指定和数据表主键字段对应的标识属性。设置此项可以提升MyBatis框架的性能,特别是应用缓存和嵌套结果映射的时候。result:指定结果集字段和实体类属性的映射关系。association:映射到JavaBean某个“复杂类型”属性,比如JavaBean类collection:映射到JavaBean某个“复杂类型”属性,比如集合 resultMap创建举例 resultMap如何将结果映射到结果集 如何使用association元素嵌套结果映射(一般使用一对一查询) /** * 对用户和角色进行联表查询 * @return */ List findAllUserAndRole(); select user.*,role.id as roleId,role.roleName from smbms_user user inner join smbms_role role on user.userRole = role.id 如何使用collection元素嵌套结果映射(一般使用一对多查询) /** * 根据用户ID查询所有的地址信息 * @return */ List findAddressById(Long id); select user.*,address.id as addressId,address.addressDesc from smbms_user user inner join smbms_address address on user.id = address.userId where user.id = #{id} 三、测试代码举例(包含一对一关联查询) 先在Mapper文件中,配置基本的sql语句 SELECT id, user_id, number, createtime, note FROM `order` 配置resultMap标签,映射不同的字段和属性名

结果就可以封装到pojo类型中

使用resultMap进行关联查询 一对一查询

一对一数据模型:订单用户 一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询。如果从用户信息出发查询用户下的订单信息则为一对多查询,因为一个用户可以下多个订单。图片

改造pojo类 在订单类中添加User属性,User属性是一个引用类型,用于存储关联查询的用户信息,因为关联关系是一对一,所以只需要添加单个属性即可图片

配置Mapper.xml配置文件 OrderMapper.xml 先使用id和result属性,映射order类的结果集,然后在使用association映射关联对象User的结果集

SELECT o.id, o.user_id, o.number, o.createtime, o.note, u.username, u.address FROM `order` o LEFT JOIN `user` u ON o.user_id = u.id

测试

@Testpublic void testQueryOrderUserResultMap() { // mybatis和spring整合,整合之后,交给spring管理 SqlSession sqlSession = this.sqlSessionFactory.openSession(); // 创建Mapper接口的动态代理对象,整合之后,交给spring管理 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // 使用userMapper执行根据条件查询用户,结果封装到Order类中 List list = userMapper.queryOrderUserResultMap(); for (Order o : list) { System.out.println(o); } // mybatis和spring整合,整合之后,交给spring管理 sqlSession.close();}

结果

图片

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3