MyBatis-Plus 如何实现连表查询的示例代码
在项目开发中,难免会遇到连表查询的操作。
项目中用的是MyBatis-Plus,是新使用的框架。官方文档看这里。
我写过一篇通过单元测试来验证MyBatis-Plus的CRUD操作。点这里跳转
今天遇到连表查询的问题,特此记录一下。
遇到需要连表操作,想起MyBatis的操作连表查询,要是MyBatis-Plus也像MyBatis一样,就脑壳痛了。(MyBatis-Plus是MyBatis的增强版)
脑壳痛归脑壳痛,先动手干。
首先
因为官方的内置接口方法都是针对单表的,所以要连表的话,还是得中规中矩来。
//第一步,在mapper.java类中定义一个连表查询的方法selectTsxxWsla publicinterfaceWTsxxMapperextendsSuperMapper{ List
运行结果出来发现,select语句中的字段都封装成Object,存到List集合中去了,不过有一点就是如果字段的值是null的,就不会封到Object里。
有点小开心
回顾一下我上次在MyBatis的连表方式,首先我在主表的实体类中把需要连表的实体类加进去了。
然后在mapper.xml添加了association标签,用来配置关联关系的。
然后
我发现可以封装Object,那我想是不是就可以自定义一个VO来封装成一个实体类。
//将查询字段自定义成WxTsxxVo publicclassWxTsxxVo{ privateStringopenid; privateStringunionid; privateLonguser_id; privateStringuser_name; ..... } //原本List替换成List publicinterfaceWTsxxMapperextendsSuperMapper { List selectTsxxWsla(); } //原本List 替换成List @Test publicvoidtest3(){ List selectTsxxWsla=tsxxMapper.selectTsxxWsla(); for(WxTsxxVoobj:selectTsxxWsla){ System.out.println(obj); } }
然后很开心运行了test3,想着结果应该没问题的了,结果报错了,报了个转换异常,不能转换成WxTsxxVo对象。
不对啊,Object都没有报错,我定义了个WxTsxxVo实体就报错了?
后来想想应该是查询出来的结果不认识我这个WxTsxxVo,网上搜了一下「连表查询封装进自定义实体类」,看到有个解决方案是添加association标签,还有另外一个解决方案是在mapper.xml中写一个对应的resultMap
所以我选择尝试第二种方案。
运行成功
//对应WxTsxxVo实体类,写了一个对应的resultMap... //原先的resultType="map"替换成resultMap="WxTsxxVo" SELECTa.*,CONCAT(b.xxid,'')ASxxid,b.nr,b.xxbt,b.weixzt,b.ywlxbm,b.createtime,b.glid FROMv_weix_usera,w_tsxxb JOIN( SELECTxxid,user_name,createtimeFROMw_tsxx_user )cONb.xxid=c.xxid WHEREa.user_name=c.user_nameANDa.openid!=''ANDb.weixzt='2'ANDb.errcodeISNULLANDLOWER(b.ywlxbm)='wsla'
再次运行,这次就成功了。查询出来的每条结果都封装成WxTsxxVo,然后在放到List集合里面。
总结
1.新框架需要多点尝试,所以写测试用例就很重要了。
2.MyBatis也许也能像上面一样,并不需要在主表的实体类里面关联另外一个实体,不过有机会还是可以试试看的。
到此这篇关于MyBatis-Plus如何实现连表查询的示例代码的文章就介绍到这了,更多相关MyBatis-Plus连表查询内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。