激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - MyBatis-Plus 如何實現連表查詢的示例代碼

MyBatis-Plus 如何實現連表查詢的示例代碼

2020-08-25 00:16liujianko Java教程

這篇文章主要介紹了MyBatis-Plus 如何實現連表查詢的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在項目開發中,難免會遇到連表查詢的操作。

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

我寫過一篇通過單元測試來驗證 MyBatis-Plus 的 CRUD 操作。點這里跳轉

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

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

腦殼痛歸腦殼痛,先動手干。

首先

因為官方的內置接口方法都是針對單表的,所以要連表的話,還是得中規中矩來。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// 第一步,在 mapper.java 類中定義一個連表查詢的方法 selectTsxxWsla
public interface WTsxxMapper extends SuperMapper<WTsxx> {
 List<Object> selectTsxxWsla();
}
 
// 第二步,在 mapper.xml 中定義 id='selectTsxxWsla' 的查詢塊
<mapper namespace="com.haoda.sswfw.dao.primary.mapper.WTsxxMapper">
 <select id="selectTsxxWsla" 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>
 
// 第三步,直接寫測試用例,看看能出來什么效果
@RunWith(SpringRunner.class)
@SpringBootTest
public class DbTest {
 @Autowired
 private WTsxxMapper tsxxMapper;
 
 @Test
 public void test3() {
 List<Object> selectTsxxWsla = tsxxMapper.selectTsxxWsla();
 for (Object obj : selectTsxxWsla) {
  System.out.println(obj);
 }
 }
}

 運行結果出來發現,select 語句中的字段都封裝成 Object,存到 List 集合中去了,不過有一點就是如果字段的值是 null 的,就不會封到 Object 里。

有點小開心

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

然后在 mapper.xml 添加了 association 標簽,用來配置關聯關系的。

然后

我發現可以封裝 Object,那我想是不是就可以自定義一個 VO 來封裝成一個實體類。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 將查詢字段 自定義成 WxTsxxVo
public 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>
@Test
public void test3() {
 List<WxTsxxVo> selectTsxxWsla = tsxxMapper.selectTsxxWsla();
 for (WxTsxxVo obj : selectTsxxWsla) {
 System.out.println(obj);
 }
}

然后很開心運行了 test3,想著結果應該沒問題的了,結果報錯了,報了個轉換異常,不能轉換成 WxTsxxVo 對象。

不對啊,Object 都沒有報錯,我定義了個 WxTsxxVo 實體就報錯了?

后來想想應該是查詢出來的結果不認識我這個 WxTsxxVo,網上搜了一下「連表查詢封裝進自定義實體類」,看到有個解決方案是 添加association標簽,還有另外一個解決方案是在 mapper.xml 中寫一個對應的 resultMap

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

運行成功

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 對應 WxTsxxVo 實體類,寫了一個對應的 resultMap
<resultMap id="WxTsxxVo" 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 id="selectTsxxWsla" 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>

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

總結
1.新框架需要多點嘗試,所以寫測試用例就很重要了。
2.MyBatis 也許也能像上面一樣,并不需要在主表的實體類里面關聯另外一個實體,不過有機會還是可以試試看的。

到此這篇關于MyBatis-Plus 如何實現連表查詢的示例代碼的文章就介紹到這了,更多相關MyBatis-Plus 連表查詢內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家! 

原文鏈接:https://blog.csdn.net/godbrian/article/details/89562499

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91在线视频观看 | 久久久av亚洲男天堂 | 高清国产免费 | 免费毛片电影 | 黄色aaa视频| 欧美视频在线一区二区三区 | h网站在线观看 | 一本色道久久综合亚洲精品图片 | 午夜精品成人一区二区 | 国内精品久久久久久2021浪潮 | www久| 日日夜av | 99sesese| 在线观看中文字幕国产 | 制服丝袜日日夜夜 | 成人羞羞在线观看网站 | 九九热免费精品 | 久久久久在线观看 | 欧美亚洲综合在线 | av手机在线电影 | 视频一区二区精品 | 91久久另类重口变态 | 亚洲综合91 | 国产精品视频在线观看免费 | 欧美一级片免费在线观看 | 国产无遮挡成人免费视频 | 狠狠操夜夜爱 | 黄在线看 | 最新一区二区三区 | 密室逃脱第一季免费观看完整在线 | 热久久成人 | 精品久久一区二区 | 久久国产精品99久久人人澡 | 久久福利剧场 | 在线成人看片 | 日本网站一区 | 国产一级αv片免费观看 | 国产一区二区成人在线 | 一道本不卡一区 | 18视频在线观看娇喘 | 免费午夜视频 |