在Java開發中,我們經常需要動態拼接sql語句,從而滿足不同場景下的查詢和操作需求。對於這一需求,querywrapper是一個非常實用的工具,它能夠方便地進行sql語句的拼接,同時還支持多種查詢方式。接下來,我們將從不同方面詳細講解querywrapper的使用方法。
一、querywrapper拼接原生sql
在使用querywrapper時,我們可以直接拼接原生sql,只需傳遞完整的sql語句即可。例如:
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("count(*)").inSql("id", "select id from user where age > 18");
在上述代碼中,我們使用了select()方法拼接了一個子查詢,並使用了inSql()方法將其作為條件拼接到主查詢中。這種方式在處理複雜查詢時非常方便。
二、QueryWrapper拼接QueryWrapper
有時候,我們需要在一個查詢中嵌套另一個查詢,以實現更複雜的查詢需求。querywrapper提供了lambda表達式的方式支持這種嵌套查詢。例如:
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.in("age", new QueryWrapper<User>().select("age").gt("age", 18));
在上述代碼中,我們使用了in()方法拼接了一個子查詢,並使用了lambda表達式在子查詢中添加了一個條件。這種方式可以方便地實現複雜的條件拼接。
三、自己編寫QueryWrapper的方法
querywrapper提供了鏈式調用的方式編寫查詢條件,這種方式非常方便易用。但如果需要處理更複雜的查詢需求,我們可能需要自己編寫querywrapper的方法。例如:
public class CustomWrapper<T> extends AbstractWrapper<T, Object, CustomWrapper<T>> {
public CustomWrapper() {
this(null);
}
public CustomWrapper(T entity) {
this.entity = entity;
this.initNeed();
}
public CustomWrapper(T entity, String sqlSelect) {
this.entity = entity;
this.sqlSelect = sqlSelect;
this.initNeed();
}
// 自定義方法處理複雜的查詢需求
public CustomWrapper<T> customMethod(String param) {
this.and(true, sql(param));
return typedThis;
}
}
CustomWrapper<User> wrapper = new CustomWrapper<>();
wrapper.customMethod("name = '張三' and age > 18");
在上述代碼中,我們自定義了一個CustomWrapper類,實現了自己的查詢方法。這種方式非常靈活,可以滿足各種複雜的查詢需求。
四、querywrapper用法
querywrapper提供了豐富的操作方法,支持各種查詢和操作需求。在使用時,我們需要根據具體需求選擇合適的方法。下面列舉了一些常用方法:
- select():設置查詢字段
- eq():等於
- ne():不等於
- gt():大於
- ge():大於等於
- lt():小於
- le():小於等於
- between():在兩個值之間
- notBetween():不在兩個值之間
- in():包含在某個集合中
- notIn():不包含在某個集合中
- isNull():為空
- isNotNull():不為空
- like():模糊查詢
- notLike():不模糊查詢
- orderBy():排序
- groupBy():分組
- having():分組查詢條件
五、QueryWrapper關聯查詢
querywrapper不僅支持單表查詢,還支持關聯查詢。我們可以通過實體類之間的關聯關係來實現關聯查詢。例如:
@Data
public class User {
private Long id;
private String name;
private Integer age;
private Long companyId;
}
@Data
public class Company {
private Long id;
private String name;
}
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("user.id", "user.name", "user.age", "company.name")
.eq("user.age", 18)
.eq("company.name", "alibaba")
.eq("user.company_id", new QueryWrapper<Company>()
.select("min(id)")
.eq("name", "alibaba"))
.join("company", "company.id = user.company_id");
在上述代碼中,我們使用了join()方法實現了表的關聯查詢,並在查詢中嵌套了另一個查詢。這種方式可以方便地實現複雜的查詢需求。
六、querywrapper或怎麼拼接
有時我們需要使用or關鍵字來拼接多個條件,querywrapper提供了or()方法來實現這一需求。例如:
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "張三").or().eq("name", "李四");
在上述代碼中,我們使用了or()方法來拼接了兩個條件,它們之間是使用or關鍵字連接的。這種方式非常靈活,可以滿足各種複雜的查詢需求。
七、querywrapper怎麼拼接多個條件選取
在使用querywrapper拼接多個條件時,我們可以使用lambda表達式在一個查詢中拼接多個條件。例如:
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.lambda()
.eq(User::getAge, 18)
.and(lw -> lw.eq(User::getName, "張三").or().eq(User::getName, "李四"));
在上述代碼中,我們使用了lambda表達式在一個查詢中拼接了多個條件,它們之間使用and、or關鍵字連接。這種方式非常簡潔、易用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/245093.html