結(jié)合mybatis-plus實現(xiàn)簡單不需要寫sql的多表查詢
java mybatis 多表查詢
簡介
實現(xiàn)簡單的實體類操作多表, 首先你的項目是使用了mybatis-plus 才可以使用
設(shè)計說明
- 如何關(guān)聯(lián)表?
找第一張表注解為 TableId (mybatis-plus 注解)的屬性名, 到每二張表找同樣的屬性名, 如果沒找到,反過來找,如果還沒找到,挨個屬性找。以此類推,實現(xiàn)關(guān)聯(lián)的前提條件是 主從表的關(guān)聯(lián)例名必須一樣
// user 表 @TableId private Integer userId // address 表 @TableId private Integer addressId private Integer userId
使用說明
將 com.freedomen.multipselect 包放到你的項目中,使 com.freedomen.multipselect.mapper里的xml 要被掃描到,或手動配置, 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 的第一個參數(shù)是所要查找的字段
//${0} 或 ${user} 表是第一張表的所有字段 ${0}.userName或${user}.userName表示userName字段, 默認第一張表的字段全部都返回的。 ${}中間的參數(shù)可以是后面實體的下標,也可以是表名 如user、user_address
//下面是要訂單表的所有信息 和用戶的姓名與號碼 和地址
MultipleSelect.newInstance("${1}.userName,${1}.userPhone,${2}", new Orders(), new User(), new Address());
查找條件
- eq: =
- notEq: !=
- like: LIKE (前置已經(jīng)加了 '%')
- between: between
- and: 改變連接方式為 AND練級(默認)
- or: 改變 連接方式為 OR
- division:括號
- in: IN
- notIn: NOT IN
- notLike: NOT LIKE
- ...等等
//實例好 查找實體后可以操作實體
//注意: 如何實體內(nèi)屬性有值 將會以 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, 默認為AND
.notEq("orderSno", "123"); //或者 orderSno 不等于 '123'
multipleSelect
.where("${1}") //哪張表接著用戶表 默認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", ...)
分頁
//MultipleSelect.setPage(pageNo, pageSize); MultipleSelect.setPage(1, 15); //第一頁 每頁 15條
multipleService.mulSelect返回結(jié)果
//MultipleResult /* 原型 private List<Map<String, Object>> data; //結(jié)果數(shù)據(jù) private Integer pageNo; //如果設(shè)置了分頁 會有 private Integer pageSize; //如果設(shè)置了分頁 會有 private Integer total; //如果設(shè)置了分頁 會有 */
邏輯刪除
//默認是讀取 mybatis-plus 的 TableLogic 注解 0 未刪除,
//如果不是用 0 表示未刪除, 可以修改 MultipleSelect 的 setCustomWhere 方法中的下面這段中的 0
if (logic != null)
sb.append(" AND ")
.append(te.getNickName())
.append(".")
.append(logic)
.append(" = ")
.append("0");
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。
相關(guān)文章
Java8加java10等于Java18的版本查看及特性詳解
這篇文章主要為大家介紹了Java?8加java10等于Java18的各個版本要點詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06
Java實現(xiàn)日志文件監(jiān)聽并讀取相關(guān)數(shù)據(jù)的方法實踐
本文主要介紹了Java實現(xiàn)日志文件監(jiān)聽并讀取相關(guān)數(shù)據(jù)的方法實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05
Java?18?新特性之Web服務(wù)器?jwebserver功能
JEP?408:?Simple?Web?Server,是這次Java?18推出的一個比較獨立的全新功能點。我們可以通過命令行工具來啟動一個提供靜態(tài)資源訪問的迷你Web服務(wù)器,本文通過一個構(gòu)建HTML頁面的例子,來嘗試一下jwebserver的功能2022-04-04

