結合mybatis-plus 實現實體操作多表關聯查詢

 

項目地址: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");
​
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章