MyBatis-Plus如何实现连表查询的示例代码

  

在项目开发中,难免会遇到连表查询的操作。

项目中用的是MyBatis-Plus,是新使用的框架。官方文档看这里。

我写过一篇通过单元测试来验证MyBatis-Plus的CRUD操作。点这里跳转

今天遇到连表查询的问题,特此记录一下。

遇到需要连表操作,想起MyBatis的操作连表查询,要是MyBatis-Plus也像MyBatis一样,就脑壳痛了。(MyBatis-Plus是MyBatis的增强版)

脑壳痛归脑壳痛,先动手干。

<强>首先

因为官方的内置接口方法都是针对单表的,所以要连表的话,还是得中规中矩来。

//,第一步,在,mapper.java 类中定义一个连表查询的方法,selectTsxxWsla   public  interface  WTsxxMapper  extends  SuperMapper< WTsxx>, {   ,List selectTsxxWsla ();   }//,第二步,在,mapper.xml 中定义,id=& # 39; selectTsxxWsla& # 39;,的查询块=& lt; mapper 名称空间“com.haoda.sswfw.dao.primary.mapper.WTsxxMapper"祝辞   ,& lt; select  id=皊electTsxxWsla", resultType=癿ap"比;   ,SELECT  . *, CONCAT (b.xxid & # 39; & # 39;), AS  xxid, b.nr, b.xxbt, b.weixzt, b.ywlxbm, b.createtime, b.glid    ,得到v_weix_user  w_tsxx  b    ,JOIN  (   ,,SELECT  xxid user_name createtime 得到w_tsxx_user   ,,,),c 提醒b.xxid =, c.xxid    ,WHERE  a.user_name =, c.user_name 以及a.openid  !=, & # 39; & # 39;,以及b.weixzt =, & # 39; 2 & # 39;,以及b.errcode  IS  NULL 以及低(b.ywlxbm),=, & # 39; wsla& # 39;   ,& lt;/select>   & lt;/mapper>//,第三步,直接写测试用例,看看能出来什么效果   @RunWith (SpringRunner.class)   @SpringBootTest   public  class  DbTest  {   ,@ autowired   ,private  WTsxxMapper  tsxxMapper;   ,   ,@Test   ,public  void  test3 (), {   ,List selectTsxxWsla =, tsxxMapper.selectTsxxWsla ();   ,for  (Object  obj : selectTsxxWsla), {   System.out.println才能(obj);   ,}   ,}   }

,运行结果出来发现,选择语句中的字段都封装成对象,存到列表集合中去了,不过有一点就是如果字段的值是空的,就不会封到对象里。

有点小开心

回顾一下我上次在MyBatis的连表方式,首先我在主表的实体类中把需要连表的实体类加进去了。

然后在映射器。xml添加了协会标签,用来配置关联关系的。

<>强然后

我发现可以封装对象,那我想是不是就可以自定义一个签证官来封装成一个实体类。

//,将查询字段,自定义成,WxTsxxVo   public  class  WxTsxxVo  {   ,private  String  openid;   ,private  String  unionid;   ,private  Long  user_id;   ,private  String  user_name;   ,.....   }//,原本,List,替换成,List   public  interface  WTsxxMapper  extends  SuperMapper< WTsxx>, {   ,List selectTsxxWsla ();   }//,原本,List,替换成,List   @Test   public  void  test3 (), {   ,List selectTsxxWsla =, tsxxMapper.selectTsxxWsla ();   ,for  (WxTsxxVo  obj : selectTsxxWsla), {   ,System.out.println (obj);   ,}   }

然后很开心运行了test3,想着结果应该没问题的了,结果报错了,报了个转换异常,不能转换成WxTsxxVo对象。

不对啊,对象都没有报的错,我定义了个WxTsxxVo实体就报错了?

后来想想应该是查询出来的结果不认识我这个WxTsxxVo,网上搜了一下“连表查询封装进自定义实体类”,看到有个解决方案是添加协会标签,还有另外一个解决方案是在映射器。xml中写一个对应的resultMap

所以我选择尝试第二种方案。

运行成功

//,对应,WxTsxxVo 实体类,写了一个对应的,resultMap   & lt; resultMap  id=癢xTsxxVo",类型=癱om.haoda.sswfw.job.vo.WxTsxxVo"比;   ,,& lt; result 列=皁penid",财产=皁penid",/比;   ,,& lt; result 列=皍nionid",财产=皍nionid",/比;   ,,& lt; result 列=皍ser_id",财产=皍ser_id",/比;   ,,& lt; result 列=皍ser_name",财产=皍ser_name",/比;   ,,…   时间/resultMap 祝辞& lt;//,原先的,resultType=癿ap",替换成,resultMap=癢xTsxxVo"   & lt; select  id=皊electTsxxWsla", resultMap=癢xTsxxVo"比;   ,SELECT  . *, CONCAT (b.xxid & # 39; & # 39;), AS  xxid, b.nr, b.xxbt, b.weixzt, b.ywlxbm, b.createtime, b.glid    ,得到v_weix_user  w_tsxx  b    ,JOIN  (   ,,SELECT  xxid user_name createtime 得到w_tsxx_user   ,,),c 提醒b.xxid =, c.xxid    ,WHERE  a.user_name =, c.user_name 以及a.openid  !=, & # 39; & # 39;,以及b.weixzt =, & # 39; 2 & # 39;,以及b.errcode  IS  NULL 以及低(b.ywlxbm),=, & # 39; wsla& # 39;   & lt;/select>

MyBatis-Plus如何实现连表查询的示例代码

Copyright © 2020-2023 feiqueyun.cn. All Rights Reserved. 肥雀云_南京肥雀信息技术有限公司版权所有 南京肥雀信息技术有限公司 苏ICP备16063723号-5