在项目开发中,难免会遇到连表查询的操作。
项目中用的是MyBatis-Plus,是新使用的框架。官方文档看这里。
我写过一篇通过单元测试来验证MyBatis-Plus的CRUD操作。点这里跳转
今天遇到连表查询的问题,特此记录一下。
遇到需要连表操作,想起MyBatis的操作连表查询,要是MyBatis-Plus也像MyBatis一样,就脑壳痛了。(MyBatis-Plus是MyBatis的增强版)
脑壳痛归脑壳痛,先动手干。
<强>首先强>
因为官方的内置接口方法都是针对单表的,所以要连表的话,还是得中规中矩来。
//,第一步,在,mapper.java 类中定义一个连表查询的方法,selectTsxxWsla public interface  WTsxxMapper extends SuperMapper< WTsxx>, { ,List
,运行结果出来发现,选择语句中的字段都封装成对象,存到列表集合中去了,不过有一点就是如果字段的值是空的,就不会封到对象里。
有点小开心
回顾一下我上次在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如何实现连表查询的示例代码