电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

MyBatis-Plus 如何實(shí)現(xiàn)連表查詢的示例代碼

瀏覽:132日期:2023-10-23 10:49:52

在項(xiàng)目開發(fā)中,難免會(huì)遇到連表查詢的操作。

項(xiàng)目中用的是 MyBatis-Plus,是新使用的框架。官方文檔看這里。

我寫過一篇通過單元測(cè)試來驗(yàn)證 MyBatis-Plus 的 CRUD 操作。點(diǎn)這里跳轉(zhuǎn)

今天遇到連表查詢的問題,特此記錄一下。

遇到需要連表操作,想起 MyBatis 的操作連表查詢,要是 MyBatis-Plus 也像 MyBatis 一樣,就腦殼痛了。(MyBatis-Plus 是 MyBatis 的增強(qiáng)版)

腦殼痛歸腦殼痛,先動(dòng)手干。

首先

因?yàn)楣俜降膬?nèi)置接口方法都是針對(duì)單表的,所以要連表的話,還是得中規(guī)中矩來。

// 第一步,在 mapper.java 類中定義一個(gè)連表查詢的方法 selectTsxxWslapublic interface WTsxxMapper extends SuperMapper<WTsxx> { List<Object> selectTsxxWsla();}// 第二步,在 mapper.xml 中定義 id=’selectTsxxWsla’ 的查詢塊<mapper namespace='com.haoda.sswfw.dao.primary.mapper.WTsxxMapper'> <select resultType='map'> SELECT a.*,CONCAT(b.xxid,’’) AS xxid,b.nr,b.xxbt,b.weixzt,b.ywlxbm,b.createtime,b.glid FROM v_weix_user a,w_tsxx b JOIN ( SELECT xxid,user_name,createtime FROM w_tsxx_user ) c ON b.xxid = c.xxid WHERE a.user_name = c.user_name AND a.openid != ’’ AND b.weixzt = ’2’ AND b.errcode IS NULL AND LOWER(b.ywlxbm) = ’wsla’ </select></mapper>// 第三步,直接寫測(cè)試用例,看看能出來什么效果@RunWith(SpringRunner.class)@SpringBootTestpublic class DbTest { @Autowired private WTsxxMapper tsxxMapper; @Test public void test3() { List<Object> selectTsxxWsla = tsxxMapper.selectTsxxWsla(); for (Object obj : selectTsxxWsla) { System.out.println(obj); } }}

運(yùn)行結(jié)果出來發(fā)現(xiàn),select 語句中的字段都封裝成 Object,存到 List 集合中去了,不過有一點(diǎn)就是如果字段的值是 null 的,就不會(huì)封到 Object 里。

有點(diǎn)小開心

回顧一下我上次在 MyBatis 的連表方式,首先我在主表的實(shí)體類中把需要連表的實(shí)體類加進(jìn)去了。

然后在 mapper.xml 添加了 association 標(biāo)簽,用來配置關(guān)聯(lián)關(guān)系的。

然后

我發(fā)現(xiàn)可以封裝 Object,那我想是不是就可以自定義一個(gè) VO 來封裝成一個(gè)實(shí)體類。

// 將查詢字段 自定義成 WxTsxxVopublic class WxTsxxVo { private String openid; private String unionid; private Long user_id; private String user_name; .....}// 原本 List<Object> 替換成 List<WxTsxxVo>public interface WTsxxMapper extends SuperMapper<WTsxx> { List<WxTsxxVo> selectTsxxWsla();}// 原本 List<Object> 替換成 List<WxTsxxVo>@Testpublic void test3() { List<WxTsxxVo> selectTsxxWsla = tsxxMapper.selectTsxxWsla(); for (WxTsxxVo obj : selectTsxxWsla) { System.out.println(obj); }}

然后很開心運(yùn)行了 test3,想著結(jié)果應(yīng)該沒問題的了,結(jié)果報(bào)錯(cuò)了,報(bào)了個(gè)轉(zhuǎn)換異常,不能轉(zhuǎn)換成 WxTsxxVo 對(duì)象。

不對(duì)啊,Object 都沒有報(bào)錯(cuò),我定義了個(gè) WxTsxxVo 實(shí)體就報(bào)錯(cuò)了?

后來想想應(yīng)該是查詢出來的結(jié)果不認(rèn)識(shí)我這個(gè) WxTsxxVo,網(wǎng)上搜了一下「連表查詢封裝進(jìn)自定義實(shí)體類」,看到有個(gè)解決方案是 添加association標(biāo)簽,還有另外一個(gè)解決方案是在 mapper.xml 中寫一個(gè)對(duì)應(yīng)的 resultMap

所以我選擇嘗試第二種方案。

運(yùn)行成功

// 對(duì)應(yīng) WxTsxxVo 實(shí)體類,寫了一個(gè)對(duì)應(yīng)的 resultMap<resultMap type='com.haoda.sswfw.job.vo.WxTsxxVo'> <result column='openid' property='openid' /> <result column='unionid' property='unionid' /> <result column='user_id' property='user_id' /> <result column='user_name' property='user_name' /> ...</resultMap > // 原先的 resultType='map' 替換成 resultMap='WxTsxxVo'<select resultMap='WxTsxxVo'> SELECT a.*,CONCAT(b.xxid,’’) AS xxid,b.nr,b.xxbt,b.weixzt,b.ywlxbm,b.createtime,b.glid FROM v_weix_user a,w_tsxx b JOIN ( SELECT xxid,user_name,createtime FROM w_tsxx_user ) c ON b.xxid = c.xxid WHERE a.user_name = c.user_name AND a.openid != ’’ AND b.weixzt = ’2’ AND b.errcode IS NULL AND LOWER(b.ywlxbm) = ’wsla’</select>

再次運(yùn)行,這次就成功了。查詢出來的每條結(jié)果都封裝成 WxTsxxVo,然后在放到 List 集合里面。

總結(jié)1.新框架需要多點(diǎn)嘗試,所以寫測(cè)試用例就很重要了。2.MyBatis 也許也能像上面一樣,并不需要在主表的實(shí)體類里面關(guān)聯(lián)另外一個(gè)實(shí)體,不過有機(jī)會(huì)還是可以試試看的。

到此這篇關(guān)于MyBatis-Plus 如何實(shí)現(xiàn)連表查詢的示例代碼的文章就介紹到這了,更多相關(guān)MyBatis-Plus 連表查詢內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Mybatis 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 深圳市万色印象美业有限公司 | 英国雷迪地下管线探测仪-雷迪RD8100管线仪-多功能数字听漏仪-北京迪瑞进创科技有限公司 | 细胞染色-流式双标-试剂盒免费代做-上海研谨生物科技有限公司 | 烟台螺纹,烟台H型钢,烟台钢材,烟台角钢-烟台市正丰金属材料有限公司 | 化妆品加工厂-化妆品加工-化妆品代加工-面膜加工-广东欧泉生化科技有限公司 | 压滤机滤板_厢式_隔膜_板框压滤机滤板厂家价格型号材质-大凯环保 | 桂林腻子粉_内墙外墙抗裂砂浆腻子粉推荐广西鑫达涂料厂家供应 | 折弯机-刨槽机-数控折弯机-数控刨槽机-数控折弯机厂家-深圳豐科机械有限公司 | 云南标线|昆明划线|道路标线|交通标线-就选云南云路施工公司-云南云路科技有限公司 | 沈阳液压泵_沈阳液压阀_沈阳液压站-沈阳海德太科液压设备有限公司 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 深圳高新投三江工业消防解决方案提供厂家_服务商_园区智慧消防_储能消防解决方案服务商_高新投三江 | 包塑丝_高铁绑丝_地暖绑丝_涂塑丝_塑料皮铁丝_河北创筹金属丝网制品有限公司 | 定量包装秤,吨袋包装称,伸缩溜管,全自动包装秤,码垛机器人,无锡市邦尧机械工程有限公司 | 合肥花魁情感婚姻咨询中心_挽回爱情_修复婚姻_恋爱指南 | 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 | 广西资质代办_建筑资质代办_南宁资质代办理_新办、增项、升级-正明集团 | 单电机制砂机,BHS制砂机,制沙机设备,制砂机价格-正升制砂机厂家 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | 合肥制氮机_合肥空压机厂家_安徽真空泵-凯圣精机 | 江西自考网-江西自学考试网| 西门子伺服控制器维修-伺服驱动放大器-828D数控机床维修-上海涌迪 | 防火窗_耐火窗_防火门厂家_防火卷帘门-重庆三乐门业有限公司 | 丹佛斯压力传感器,WISE温度传感器,WISE压力开关,丹佛斯温度开关-上海力笙工业设备有限公司 | 有源电力滤波装置-电力有源滤波器-低压穿排电流互感器|安科瑞 | 济南保安公司加盟挂靠-亮剑国际安保服务集团总部-山东保安公司|济南保安培训学校 | 黄石东方妇产医院_黄石妇科医院哪家好_黄石无痛人流医院 | 烽火安全网_加密软件、神盾软件官网 | 茶楼装修设计_茶馆室内设计效果图_云臻轩茶楼装饰公司 | PCB接线端子_栅板式端子_线路板连接器_端子排生产厂家-置恒电气 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 假肢-假肢价格-假肢厂家-河南假肢-郑州市力康假肢矫形器有限公司 | 沈飞防静电地板__机房地板-深圳市沈飞防静电设备有限公司 | 五轴加工中心_数控加工中心_铝型材加工中心-罗威斯 | 长江船运_国内海运_内贸船运_大件海运|运输_船舶运输价格_钢材船运_内河运输_风电甲板船_游艇运输_航运货代电话_上海交航船运 | 智能交通网_智能交通系统_ITS_交通监控_卫星导航_智能交通行业 | 拉力机-万能试验机-材料拉伸试验机-电子拉力机-拉力试验机厂家-冲击试验机-苏州皖仪实验仪器有限公司 | 能耗监测系统-节能监测系统-能源管理系统-三水智能化 | 电磁铁_推拉电磁铁_机械手电磁吸盘电磁铁厂家-广州思德隆电子公司 | 福建珂朗雅装饰材料有限公司「官方网站」 | 防水试验机_防水测试设备_防水试验装置_淋雨试验箱-广州岳信试验设备有限公司 | 转子泵_凸轮泵_凸轮转子泵厂家-青岛罗德通用机械设备有限公司 | 烟气在线监测系统_烟气在线监测仪_扬尘检测仪_空气质量监测站「山东风途物联网」 | 口信网(kousing.com) - 行业资讯_行业展会_行业培训_行业资料 |