Mybatis-Plus,mybatis plus mybatis
00-1010简介Lambda分页查询条件查询[1] Multi-EQ [2]或条件构造函数自定义sql封装我们自己的服务数据汇总
00-1010 MyBatis-Plus 最优雅简洁的数据库操作
简单介绍一下MyBatis-Plus的功能。虽然是入门,但也让我们领略到了它的优雅和力量。你已经被吸引了吗?别担心,在上一节,我们参观了米巴提斯的风景。在这一节,我将向你展示他的独特魅力。
目录
官方说3.x支持Lambda表达式,那么应该怎么用呢?让我们举个例子:
QueryWrapperStudent query wrapper=new query wrapper();QueryWrapper.lambda()。情商(Student:3360GetName,冯);list student student list=list(query wrapper);for(学生Student : Student list)console . info(学生);看一下测试结果(为了乐观起见,我们改用json):
{id 33601035789714459471874,姓名 3360 冯,年龄 336026,信息 3360 无畏英雄, isdelete 3360 false,创建时间 3360 2018 :213:26PM ,更新时间 : 2018年9月1日3:2133:23
如果使用我的配置,还可以看到相应的SQL。
==Preparing: SELECT id,name,age,info,is_delete,create_time,update_time,gender,idcard_id,city_id FROM t_student WHERE name=?==参数:冯(string)==columns3360ID,姓名,年龄,info,is _ delete _ time,update _ time,性别,身份证_ id,City _ id==row 3360 1035789714459471874,冯,26,blob,0,2018-09-01 15336021336026.0,2018-09-01 153366601
00-1010我感觉哈,分页查询是他们框架的起因,先说分页查询。直接看代码:
步骤1:在应用程序中配置
/* * *分页插件*/@ bean public Pagination interceptor Pagination interceptor(){ return new Pagination interceptor();}第二步:写分页代码(我截图给你,让你看清楚):
看结果(json):
{ records :[{ id :1035788325322752001, name:1 , age:1, info:1 , isDelete:false, create time : 2018年9月1日下午3:15:55 , update time 3360 2009月1日
quot;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<Student> queryWrapper = new QueryWrapper<>();queryWrapper.lambda() .eq(Student::getName, "冯文议") .eq(Student::getAge, 26);List<Student> 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, <<BLOB>>, 0, 2018-09-01 15:21:26.0, 2018-09-01 15:21:26.0, 1, 1035789714388168706, 1035762001753501698<== Total: 1
我们还可以这样写:
QueryWrapper<Student> queryWrapper = new QueryWrapper<>();queryWrapper.lambda() .and(obj -> obj.eq(Student::getName, "冯文议") .eq(Student::getAge, 26));List<Student> studentList = list(queryWrapper);for (Student student : studentList) Console.info(new Gson().toJson(student));
【2】or
第一种:
QueryWrapper<Student> queryWrapper = new QueryWrapper<>();queryWrapper.lambda() .or(obj1 -> obj1.eq(Student::getName, "冯文议")) .or(obj2 -> obj2.eq(Student::getName, "1"));List<Student> studentList = list(queryWrapper);for (Student student : studentList) Console.info(new Gson().toJson(student));
sql:
SELECT * FROM t_student WHERE ( name = ? ) OR ( name = ? )
第二种:
QueryWrapper<Student> queryWrapper = new QueryWrapper<>();queryWrapper.lambda() .eq(Student::getName, "冯文议") .or() .eq(Student::getName, "1");List<Student> studentList = list(queryWrapper);for (Student student : studentList) Console.info(new Gson().toJson(student));
SQL:
SELECT * FROM t_student WHERE name = ? OR name = ?
这样的话,我们就可以拼接各种条件了。那么问题来了:到底有哪些关键字呢?性能如何呢?
条件构造器
条件参数说明
查询方式说明setSqlSelect设置 SELECT 查询字段whereWHERE 语句,拼接 +WHERE 条件
andAND 语句,拼接 +AND 字段=值
andNewAND 语句,拼接 +AND (字段=值)
orOR 语句,拼接 +OR 字段=值
orNewOR 语句,拼接 +OR (字段=值)
eq等于=allEq基于 map 内容等于=ne不等于<>gt大于>ge大于等于>=lt小于<le小于等于<=like模糊查询 LIKEnotLike模糊查询 NOT LIKEinIN 查询notInNOT IN 查询isNullNULL 值查询isNotNullIS NOT NULLgroupBy分组 GROUP BYhavingHAVING 关键词orderBy排序 ORDER BYorderAscASC 排序 ORDER BYorderDescDESC 排序 ORDER BYexistsEXISTS 条件语句notExistsNOT EXISTS 条件语句betweenBETWEEN 条件语句notBetweenNOT BETWEEN 条件语句addFilter自由拼接 SQLlast拼接在最后,例如:last(LIMIT 1)注意! xxNew 都是另起( ... )
括号包裹。
自定义sql
如果官方提供的满足不了你的需求,或者你的需求很复杂,导致你不知道如何使用条件构造器,那应该怎么办呢?
很简单。
第一步:找到 Dao,写一个数据库操作接口
public interface StudentDao extends BaseMapper<Student> { List<Student> selectAll(); }
第二步:在xml文件中写sql
<!--List<Student> selectAll();--><select id="selectAll" resultMap="BaseResultMap"> select * from t_student</select>
这样我们就可以使用了:
@ResourceStudentDao studentDao;List<Student> studentList = studentDao.selectAll();for (Student student : studentList) Console.info(new Gson().toJson(student));
测试:
封装我们自己的Service
前面我们就说了,我是很不喜欢MP的查询接口的,我们就把他弄成我们喜欢的吧,我这里借鉴 JPA接口了,哈哈
interface:
/** * 查询所有数据 * @return List<Student> */List<Student> findAll();/** * 查询部分数据 * @return List<Student> */List<Student> findList();/** * 查询一条数据 * @return Student */Student findOne();/** * 根据主键ID查询数据 * @param id 主键ID,为null,返回null * @return Student */Student findById(Long id);
impl:
@Overridepublic List<Student> findAll() { return list(null);}@Overridepublic List<Student> findList() { return list(null);}@Overridepublic Student findOne() { return getOne(null);}@Overridepublic Student findById(Long id) { ExceptionUtil.notNull(id, "id must not null."); return getById(id);}
我们来试一下:
哇!!!
是不是很爽!!!
资料
[1] MyBatis-Plus测试示例
[2] 官网测试例子:WrapperTest.java
总结
到此这篇关于MyBatis-Plus中最简单的查询操作的文章就介绍到这了,更多相关MyBatis-Plus查询操作内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。