mybatis plus 查询排序_MyBatis-Plus | 最简单的查询操作教程(Lambda)
引言
是對MyBatis-Plus的功能進行簡單介紹,雖然是介紹,也讓我們領略到他的優雅與強大。你是不是已經被吸引了?別著急,上一節,我們算是參觀了MyBatis的風景,這一節,我將帶你領略他獨特的魅力。
Lambda
官方表示,3.x支持Lambda表達式,那應該怎么使用呢?我們來看個例子:
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(Student::getName, "馮文議");
List studentList = list(queryWrapper);
for (Student student : studentList)
Console.info(student);
看一下測試結果(為了看好,我們轉成json):
{
"id":1035789714459471874,
"name":"馮文議",
"age":26,
"info":"無畏造英雄",
"isDelete":false,
"createTime":"Sep 1, 2018 3:21:26 PM",
"updateTime":"Sep 1, 2018 3:21:26 PM",
"gender":"MALE",
"idcardId":1035789714388168706,
"cityId":1035762001753501698
}
如果你使用了我的配置,你也能看到相應的SQL
==> Preparing: SELECT id,name,age,info,is_delete,create_time,update_time,gender,idcard_id,city_id FROM t_student WHERE name = ?
==> Parameters: 馮文議(String)
<== Columns: id, name, age, info, is_delete, create_time, update_time, gender, idcard_id, city_id
<== Row: 1035789714459471874, 馮文議, 26, <>, 0, 2018-09-01 15:21:26.0, 2018-09-01 15:21:26.0, 1, 1035789714388168706, 1035762001753501698
<== Total: 1
分頁查詢
感覺哈,分頁查詢是他們框架的起因,那我們先說分頁查詢。直接看代碼:
第一步:在 Application 中配置
/**
* 分頁插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
第二步:寫分頁代碼(為了你能夠看得清楚,我截圖給你):
看結果(json):
{
"records":[
{
"id":1035788325322752001,
"name":"1",
"age":1,
"info":"1",
"isDelete":false,
"createTime":"Sep 1, 2018 3:15:55 PM",
"updateTime":"Sep 1, 2018 3:15:55 PM",
"gender":"MALE",
"idcardId":1035788325276614657,
"cityId":1035788325201117185
},
{
"id":1035789714459471874,
"name":"馮文議",
"age":26,
"info":"無畏造英雄",
"isDelete":false,
"createTime":"Sep 1, 2018 3:21:26 PM",
"updateTime":"Sep 1, 2018 3:21:26 PM",
"gender":"MALE",
"idcardId":1035789714388168706,
"cityId":1035762001753501698
}
],
"total":2,
"size":2,
"current":1,
"optimizeCountSql":true
}
不要問我前端應該怎么寫,表示我也不會寫。
條件查詢
終于要進入這里了,是不是很激動啊。別急,客官,抽根煙先,我們慢慢來。
【1】多eq
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.eq(Student::getName, "馮文議")
.eq(Student::getAge, 26);
List studentList = list(queryWrapper);
for (Student student : studentList)
Console.info(new Gson().toJson(student));
對于這部分的測試,我想結果是毫無因為,那么你應該關注什么呢?沒錯,SQL,所以,我們直接看SQL。當然,結果也是可以看到的。
==> Preparing: SELECT id,name,age,info,is_delete,create_time,update_time,gender,idcard_id,city_id FROM t_student WHERE name = ? AND age = ?
==> Parameters: 馮文議(String), 26(Integer)
<== Columns: id, name, age, info, is_delete, create_time, update_time, gender, idcard_id, city_id
<== Row: 1035789714459471874, 馮文議, 26, <>, 0, 2018-09-01 15:21:26.0, 2018-09-01 15:21:26.0, 1, 1035789714388168706, 1035762001753501698
<== Total: 1
我們還可以這樣寫:
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.and(obj ->
obj.eq(Student::getName, "馮文議")
.eq(Student::getAge, 26));
List studentList = list(queryWrapper);
for (Student student : studentList)
Console.info(new Gson().toJson(student));
【2】or
第一種:
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.or(obj1 -> obj1.eq(Student::getName, "馮文議"))
.or(obj2 -> obj2.eq(Student::getName, "1"));
List studentList = list(queryWrapper);
for (Student student : studentList)
Console.info(new Gson().toJson(student));
sql:
SELECT * FROM t_student WHERE ( name = ? ) OR ( name = ? )
第二種:
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.eq(Student::getName, "馮文議")
.or()
.eq(Student::getName, "1");
List studentList = list(queryWrapper);
for (Student student : studentList)
Console.info(new Gson().toJson(student));
SQL:
SELECT * FROM t_student WHERE name = ? OR name = ?
這樣的話,我們就可以拼接各種條件了。那么問題來了:到底有哪些關鍵字呢?性能如何呢?
條件構造器
查詢方式
說明
setSqlSelect
設置 SELECT 查詢字段
where
WHERE 語句,拼接 +?WHERE 條件
and
AND 語句,拼接 +?AND 字段=值
andNew
AND 語句,拼接 +?AND (字段=值)
or
OR 語句,拼接 +?OR 字段=值
orNew
OR 語句,拼接 +?OR (字段=值)
eq
等于=
allEq
基于 map 內容等于=
ne
不等于<>
gt
大于>
ge
大于等于>=
lt
小于<
le
小于等于<=
like
模糊查詢 LIKE
notLike
模糊查詢 NOT LIKE
in
IN 查詢
notIn
NOT IN 查詢
isNull
NULL 值查詢
isNotNull
IS NOT NULL
groupBy
分組 GROUP BY
having
HAVING 關鍵詞
orderBy
排序 ORDER BY
orderAsc
ASC 排序 ORDER BY
orderDesc
DESC 排序 ORDER BY
exists
EXISTS 條件語句
notExists
NOT EXISTS 條件語句
between
BETWEEN 條件語句
notBetween
NOT BETWEEN 條件語句
addFilter
自由拼接 SQL
last
拼接在最后,例如:last(“LIMIT 1”)
注意! xxNew 都是另起?( ... )?括號包裹。
自定義sql
如果官方提供的滿足不了你的需求,或者你的需求很復雜,導致你不知道如何使用條件構造器,那應該怎么辦呢?
很簡單。
第一步:找到 Dao,寫一個數據庫操作接口
public interface StudentDao extends BaseMapper {
List selectAll();
}
第二步:在xml文件中寫sql
select * from t_student
這樣我們就可以使用了:
@Resource
StudentDao studentDao;
List studentList = studentDao.selectAll();
for (Student student : studentList)
Console.info(new Gson().toJson(student));
測試:
封裝我們自己的Service
前面我們就說了,我是很不喜歡MP的查詢接口的,我們就把他弄成我們喜歡的吧,我這里借鑒 JPA接口了,哈哈
interface:
/**
* 查詢所有數據
* @return List
*/
List findAll();
/**
* 查詢部分數據
* @return List
*/
List findList();
/**
* 查詢一條數據
* @return Student
*/
Student findOne();
/**
* 根據主鍵ID查詢數據
* @param id 主鍵ID,為null,返回null
* @return Student
*/
Student findById(Long id);
impl:
@Override
public List findAll() {
return list(null);
}
@Override
public List findList() {
return list(null);
}
@Override
public Student findOne() {
return getOne(null);
}
@Override
public Student findById(Long id) {
ExceptionUtil.notNull(id, "id must not null.");
return getById(id);
}
我們來試一下:
哇!!!
是不是很爽!!!
資料
總結
以上是生活随笔為你收集整理的mybatis plus 查询排序_MyBatis-Plus | 最简单的查询操作教程(Lambda)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 感知机——鸢尾花 包含代码
- 下一篇: lwIP 细节之三:TCP 回调函数是何