mysql plus多表关联_结合mybatis-plus 实现实体操作多表关联查询
這里將告訴您結合mybatis-plus 實現實體操作多表關聯查詢,教程操作方法:
multipleselect
java mybatis 實現簡單多表查詢
簡介
實現簡單的實體類操作多表, 首先你的項目是使用了mybatis-plus 才可以使用。
? 通過解析實體,調用通用的XML來實現多表查詢, 提供一個設計多表查詢的思路,復雜的Sql嵌套等目前并不支持
目前只支持:
? left join方式,(能關聯的兩張表的實體中關聯字段名稱必須一樣,數據庫字段可以不一樣可以通@TableField注解來解決
? where 基本查詢條件等
?分頁 查詢
?order 排序
可以用來三兩句搞定一些簡單關聯查詢業務,解決不需要寫的代碼
設計說明
如何關聯表?
?找第一張表注解為 TableId (mybatis-plus 注解)的屬性名, 到每二張表找同樣的屬性名, 如果沒找到,反過來找,如果還沒找到,挨個屬性找。以此類推,實現關聯的前提條件是 主從表的實體關聯列名必須是一樣的
// user 表
@TableId
private Integer userId
// address 表
@TableId
private Integer addressId
private Integer userId
//那么自動條件為 user.user_id = address.user_id
//或者是
@TableId(value="id")
private Integer userId
// address 表
@TableId(value="id")
private Integer addressId
@TableField(value="test_user_id")
private Integer userId
//目前只有left join
//那么自動條件為 user.id = address.test_user_id
使用說明
?將 com.freedomen.multipselect 包放到你的項目中,使 com.freedomen.multipselect.mapper里的xml 要被掃描到,或手動配置, com.freedomen.multipselect.service也要被發現
//引入service
@Autowired
private MultipleService multipleService;
//表關聯, 關聯用戶表和地址表,查找 用戶表的所有字段和地址表的所有字段
MultipleSelect multipleSelect = MultipleSelect.newInstance("${1}", new User(), new Address());
multipleSelect
.where("${0}")
.like("userName", "張三");
multipleService.mulSelect(multipleSelect);
查找字段
//MultipleSelect.newInstance 的第一個參數是所要查找的字段
//${0} 或 ${user} 表是第一張表的所有字段 ${0}.userName或${user}.userName表示userName字段, 默認第一張表的字段全部都返回的。 ${}中間的參數可以是后面實體的下標,也可以是表名 如user、user_address
//字段中有@TableField(exist=false)注解也是被跳過的
//下面是要訂單表的所有信息 和用戶的姓名與號碼 和地址
MultipleSelect.newInstance("${1}.userName,${1}.userPhone,${2}", new Orders(), new User(), new Address());
查找條件
eq: =
notEq: !=
like: LIKE (前置已經加了 '%')
between: between
and: 改變連接方式為 AND練級(默認)
or: 改變 連接方式為 OR
division:括號 ,不支持括號嵌套括號
in: IN
notIn: NOT IN
notLike: NOT LIKE
...
//實例好 查找實體后可以操作實體
//注意: 如何實體內屬性有值 將會以 eq方式and連接做為where 條件
/*
可以關聯的必要條件
Orders:
@TableId //或者數據庫字段為其它@TableId(value="id")
private Long ordersId;
private Long userId;
...
User:
@TableId
private Long userId;
...
Address:
@TableId
private Long addressId;
private Long userId;
...
*/
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() //改變后續操作關系為 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.where("${0}")
.eq("componyId", 1)
.division()
.like("userName", "abcd")
.or()
.like("userPhone", "abcd");
// 部分sql: compony_id = 1 and (user_name = 'abcd' or user_phone = 'abcd')
排序
//MultipleSelect.setOrderBy(...columns)
MultipleSelect.setOrderBy("${0}.createTime", "${1}.ordersName desc", "${2}.userId asc", ...)
分頁
//MultipleSelect.setPage(pageNo, pageSize);
MultipleSelect.setPage(1, 15); //第一頁 每頁 15條
multipleService.mulSelect返回結果
//MultipleResult
/*原型
private List> data; //結果數據
private Integer pageNo; //如果設置了分頁 會有
private Integer pageSize; //如果設置了分頁 會有
private Integer total;//如果設置了分頁 會有
*/
邏輯刪除
//默認是讀取 mybatis-plus 的 TableLogic 注解 0 未刪除,
//如果不是用 0 表示未刪除, 可以修改 MultipleSelect 的 setCustomWhere 方法中的下面這段中的 0
if (logic != null)
sb.append(" AND ")
.append(te.getNickName())
.append(".")
.append(logic)
.append(" = ")
.append("0");
結合mybatis-plus 實現實體操作多表關聯查詢就為您介紹到這里,感謝您關注懶咪學編程c.lanmit.com.
本文地址:https://c.lanmit.com/shujuku/qita/13784.html
總結
以上是生活随笔為你收集整理的mysql plus多表关联_结合mybatis-plus 实现实体操作多表关联查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为nova6se怎么升级鸿蒙,华为EM
- 下一篇: SQL使用函数处理数据