項目地址:github
multipleselect
java mybatis 多表查詢
簡介
實現簡單的實體類操作多表, 首先你的項目是使用了mybatis-plus 纔可以使用
設計說明
-
如何關聯表?
找第一張表註解爲 TableId (mybatis-plus 註解)的屬性名, 到每二張表找同樣的屬性名, 如果沒找到,反過來找,如果還沒找到,挨個屬性找。以此類推,實現關聯的前提條件是 主從表的關聯例名必須一樣
// 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也要被發現
//引入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 //下面是要訂單表的所有信息 和用戶的姓名與號碼 和地址 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: = 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.setOrderBy(...columns) MultipleSelect.setOrderBy("${1}.ordersName desc", "${2}.userId asc", ...)
分頁
//MultipleSelect.setPage(pageNo, pageSize); MultipleSelect.setPage(1, 15); //第一頁 每頁 15條
multipleService.mulSelect返回結果
//MultipleResult /* 原型 private List<Map<String, Object>> 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");