解决mybatis一对多关联查询多条数据只显示一条的问题

 更新时间:2020年12月04日 10:54:57   作者:愿你活成你喜欢的模样  
这篇文章主要介绍了解决mybatis一对多关联查询多条数据只显示一条的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

一对多,如果多个表字段名相同,要记住使用别名,否则多条数据只显示一条

<resultMap type="com.example.demo.model.TuserModel" id="extendMapper">
 <id column="id" property="id" />
 <result column="user_name" property="userName" />
 <result column="nick_name" property="nickName" />
 <result column="avatar" property="avatar" />
 <result column="email" property="email" />
 <result column="signature" property="signature" />
 <result column="create_time" property="createTime" />
 <result column="update_time" property="updateTime" />
 <result column="del_flag" property="delFlag" />
 <collection property="tpluginModels" ofType="com.example.demo.model.TpluginModel"
 column="id">
 <id column="pid" property="id" />
 <result column="user_id" property="userId" />
 <result column="name" property="name" />
 <result column="icon" property="icon" />
 <result column="vsersion" property="vsersion" />
 <result column="tags" property="tags" />
 <result column="description" property="description" />
 <result column="bcreate_time" property="createTime" />
 <result column="bupdate_time" property="updateTime" />
 <result column="del_flag" property="delFlag" />
 </collection>
 <!-- <collection property="tpluginModels" column="id" ofType="com.example.demo.model.TpluginModel" 
 select="pluginByUid" /> -->

下列sql

<select id="selectTuserBynameOrNick" resultMap="extendMapper"> select
 u.*,p.id as pid,p.user_id,p.name,p.icon,p.vsersion,p.tags,p.description,p.create_time
 as bcreate_time,p.update_time as bupdate_time,p.del_flag from t_user u
 LEFT
 JOIN t_plugin p ON u.id=p.user_id and u.del_flag=0 and
 p.del_flag=0 WHERE
 u.user_name LIKE CONCAT('%',#{name},'%') OR
 u.nick_name LIKE
 CONCAT('%',#{name},'%')
 </select>

补充知识:MyBatis使用resultMap解决列名和属性名不一致的问题

resultType可以指定将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。

如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。

需求:查询订单表orders的所有数据

SELECT id,user_id,number,createtime,note FROM orders,这里的数据库表user_id与pojo的Order对象中的userId不一致

orders表:

Order对象:

OrderMapper.xml配置:

其中注释掉了另一种使用数据库别名解决列名和属性名不一致的问题

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.sea.crm.mapper.OrderMapper">

 <!-- 使用as 给列取别名解决类名和属性名不一致的情况 -->
 <!--<select id="queryAll" resultType="Order"> SELECT id,user_id as userId,number,createtime,note 
 FROM orders </select> -->
 <!-- 使用resultMap解决列名和属性名不一致的情况 -->
 <!-- 配置一个resultMap映射列和属性 -->
 <resultMap type="Order" id="orderMap">
 <!-- id:设置ResultMap的id -->
 <!-- 定义主键 ,非常重要。如果是多个字段,则定义多个id -->
 <!-- property:主键在pojo中的属性名 -->
 <!-- column:主键在数据库中的列名 -->
 <id column="id" property="id" />
 <!-- 映射其他普通列 -->
 <result column="user_id" property="userId" />
 <result property="number" column="number" />
 <result property="createtime" column="createtime" />
</resultMap>
 <!-- 方法的返回值可以使用 -->
 <select id="queryAll" resultMap="orderMap">
 SELECT id,user_id ,number,createtime,note FROM orders
 </select>
</mapper>

单元测试:

public class OrderMapperTest {
 
 SqlSessionFactory factory = null;
 private OrderMapper orderMapper = null;

 @Before
 public void testInit() {
  // 1. 创建SqlSessionFactoryBuilder对象
  SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
  // 2. 加载SqlMapConfig.xml配置文件
  // /20181013_mybatis/config/SqlMapConfig.xml
  InputStream in = MyBatisTest.class.getResourceAsStream("/SqlMapConfig.xml");
  // 3. 创建SqlSessionFactory对象
  factory = builder.build(in);

 }
    @Test
 public void testqueryAll() {
  SqlSession session = factory.openSession();
  OrderMapper orderMapper = session.getMapper(OrderMapper.class);
  List<Order> orders = orderMapper.queryAll();
  System.out.println(orders);
 }
 }

以上这篇解决mybatis一对多关联查询多条数据只显示一条的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 在IntelliJ IDEA中多线程并发代码的调试方法详解

    在IntelliJ IDEA中多线程并发代码的调试方法详解

    这篇文章主要介绍了在IntelliJ IDEA中多线程并发代码的调试方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • SpringBoot部署到Linux读取resources下的文件及遇到的坑

    SpringBoot部署到Linux读取resources下的文件及遇到的坑

    本文主要给大家介绍SpringBoot部署到Linux读取resources下的文件,在平时业务开发过程中,很多朋友在获取到文件内容乱码或者文件读取不到的问题,今天给大家分享小编遇到的坑及处理方案,感兴趣的朋友跟随小编一起看看吧
    2021-06-06
  • 如何利用JAVA实现走迷宫程序

    如何利用JAVA实现走迷宫程序

    最近经常在机房看同学在玩一个走迷宫的游戏,比较有趣,自己也用java实现了一个,这篇文章主要给大家介绍了关于如何利用JAVA实现走迷宫程序的相关资料,需要的朋友可以参考下
    2021-06-06
  • Java读取Properties文件的七种方法的总结

    Java读取Properties文件的七种方法的总结

    这篇文章主要介绍了Java读取Properties文件的七种方法的总结的相关资料,需要的朋友可以参考下
    2017-07-07
  • Spring Cloud Ribbon 中的 7 种负载均衡策略的实现方法

    Spring Cloud Ribbon 中的 7 种负载均衡策略的实现方法

    Ribbon 内置了 7 种负载均衡策略:轮询策略、权重策略、随机策略、最小连接数策略、重试策略、可用性敏感策略、区域性敏感策略,并且用户可以通过继承 RoundRibbonRule 来实现自定义负载均衡策略,对Spring Cloud Ribbon负载均衡策略相关知识感兴趣的朋友一起看看吧
    2022-03-03
  • Java实现注册登录与邮箱发送账号验证激活功能

    Java实现注册登录与邮箱发送账号验证激活功能

    这篇文章主要介绍了Java实现注册登录与邮箱发送账号验证激活功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • Java实现快速并查集

    Java实现快速并查集

    这篇文章主要为大家详细介绍了Java实现快速并查集,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • Java算法练习题,每天进步一点点(1)

    Java算法练习题,每天进步一点点(1)

    方法下面小编就为大家带来一篇Java算法的一道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • 关于java的九个预定义Class对象

    关于java的九个预定义Class对象

    这篇文章主要介绍了关于java的九个预定义Class对象,在Java中,没有类就无法做任何事情。然而,并不是所有的类都具有面向对象特征。如Math.random,并只需要知道方法名和参数,需要的朋友可以参考下
    2023-05-05
  • Java中Integer的parseInt和valueOf的区别详解

    Java中Integer的parseInt和valueOf的区别详解

    这篇文章主要介绍了Java中Integer的parseInt和valueOf的区别详解,nteger.parseInt(s)是把字符串解析成int基本类型,Integer.valueOf(s)是把字符串解析成Integer对象类型,其实int就是Integer解包装,Integer就是int的包装,需要的朋友可以参考下
    2023-11-11

最新评论