結(jié)合mybatis-plus實(shí)現(xiàn)簡(jiǎn)單不需要寫sql的多表查詢
java mybatis 多表查詢
簡(jiǎn)介
實(shí)現(xiàn)簡(jiǎn)單的實(shí)體類操作多表, 首先你的項(xiàng)目是使用了mybatis-plus 才可以使用
設(shè)計(jì)說(shuō)明
- 如何關(guān)聯(lián)表?
找第一張表注解為 TableId (mybatis-plus 注解)的屬性名, 到每二張表找同樣的屬性名, 如果沒(méi)找到,反過(guò)來(lái)找,如果還沒(méi)找到,挨個(gè)屬性找。以此類推,實(shí)現(xiàn)關(guān)聯(lián)的前提條件是 主從表的關(guān)聯(lián)例名必須一樣
// user 表 @TableId private Integer userId // address 表 @TableId private Integer addressId private Integer userId
使用說(shuō)明
將 com.freedomen.multipselect
包放到你的項(xiàng)目中,使 com.freedomen.multipselect.mapper
里的xml 要被掃描到,或手動(dòng)配置, com.freedomen.multipselect.service
也要被發(fā)現(xiàn)
//引入service @Autowired private MultipleService multipleService; //表關(guān)聯(lián), 關(guān)聯(lián)用戶表和地址表,查找 用戶表的所有字段和地址表的所有字段 MultipleSelect multipleSelect = MultipleSelect.newInstance("${1}", new User(), new Address()); multipleSelect .where("${0}") .like("userName", "張三"); multipleService.mulSelect(multipleSelect);
查找字段
//MultipleSelect.newInstance 的第一個(gè)參數(shù)是所要查找的字段 //${0} 或 ${user} 表是第一張表的所有字段 ${0}.userName或${user}.userName表示userName字段, 默認(rèn)第一張表的字段全部都返回的。 ${}中間的參數(shù)可以是后面實(shí)體的下標(biāo),也可以是表名 如user、user_address //下面是要訂單表的所有信息 和用戶的姓名與號(hào)碼 和地址 MultipleSelect.newInstance("${1}.userName,${1}.userPhone,${2}", new Orders(), new User(), new Address());
查找條件
- eq: =
- notEq: !=
- like: LIKE (前置已經(jīng)加了 '%')
- between: between
- and: 改變連接方式為 AND練級(jí)(默認(rèn))
- or: 改變 連接方式為 OR
- division:括號(hào)
- in: IN
- notIn: NOT IN
- notLike: NOT LIKE
- ...等等
//實(shí)例好 查找實(shí)體后可以操作實(shí)體 //注意: 如何實(shí)體內(nèi)屬性有值 將會(huì)以 eq方式and連接做為where 條件 MultipleSelect multipleSelect = MultipleSelect.newInstance("${1}.userName,${1}.userPhone,${2}", new Orders(), new User(), new Address()); multipleSelect .where("${0}") //哪張表 .eq("ordersId", 1) //并且 訂單id = 1 .like("ordersName", "cmcc") //并且 訂單名稱 like ''%cmcc' .or() //改變后續(xù)操作關(guān)系為 OR, 默認(rèn)為AND .notEq("orderSno", "123"); //或者 orderSno 不等于 '123' multipleSelect .where("${1}") //哪張表接著用戶表 默認(rèn)and連接 可以 .or()改為 OR .in("userId", [1, 2, 3]); // 并且userId in [1, 2, 3] multipleSelect .where("${2}") .or() .like("adressDetails", "江蘇"); //或者 地址 like '江蘇' multipleService.mulSelect(multipleSelect); //查詢
排序
//MultipleSelect.setOrderBy(...columns) MultipleSelect.setOrderBy("${1}.ordersName desc", "${2}.userId asc", ...)
分頁(yè)
//MultipleSelect.setPage(pageNo, pageSize); MultipleSelect.setPage(1, 15); //第一頁(yè) 每頁(yè) 15條
multipleService.mulSelect返回結(jié)果
//MultipleResult /* 原型 private List<Map<String, Object>> data; //結(jié)果數(shù)據(jù) private Integer pageNo; //如果設(shè)置了分頁(yè) 會(huì)有 private Integer pageSize; //如果設(shè)置了分頁(yè) 會(huì)有 private Integer total; //如果設(shè)置了分頁(yè) 會(huì)有 */
邏輯刪除
//默認(rèn)是讀取 mybatis-plus 的 TableLogic 注解 0 未刪除, //如果不是用 0 表示未刪除, 可以修改 MultipleSelect 的 setCustomWhere 方法中的下面這段中的 0 if (logic != null) sb.append(" AND ") .append(te.getNickName()) .append(".") .append(logic) .append(" = ") .append("0");
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Spring Boot集成Swagger2項(xiàng)目實(shí)戰(zhàn)
在日常的工作中,我們往往需要給前端(WEB端、IOS、Android)或者第三方提供接口,這個(gè)時(shí)候我們就需要給他們提供一份詳細(xì)的API說(shuō)明文檔。這篇文章我們就來(lái)分享一種API文檔維護(hù)的方式,即通過(guò)Swagger來(lái)自動(dòng)生成Restuful API文檔2018-01-01java代碼實(shí)現(xiàn)斗地主發(fā)牌功能
這篇文章主要介紹了java實(shí)現(xiàn)斗地主發(fā)牌功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11用java等語(yǔ)言仿360首頁(yè)拼音輸入全模糊搜索和自動(dòng)換膚
這篇文章主要為大家詳細(xì)介紹了仿360首頁(yè)支持拼音輸入全模糊搜索和自動(dòng)換膚的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10讓Java后臺(tái)MySQL數(shù)據(jù)庫(kù)能夠支持emoji表情的方法
最近開(kāi)發(fā)的iOS項(xiàng)目因?yàn)樾枰脩粑谋镜拇鎯?chǔ),自然就遇到了emoji等表情符號(hào)如何被mysql DB支持的問(wèn)題。下面這篇文章主要介紹了關(guān)于讓Java后臺(tái)MySQL數(shù)據(jù)庫(kù)能夠支持emoji表情的方法,需要的朋友可以參考下。2017-03-03教你怎么使用hadoop來(lái)提取文件中的指定內(nèi)容
發(fā)現(xiàn)有很多小伙伴不會(huì)使用hadoop來(lái)提取文件中的指定內(nèi)容,今天特地整理了這篇文章,文中有非常詳細(xì)的代碼示例,對(duì)不會(huì)這個(gè)方法的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05