Or嵌套, 1-2层嵌套可以使用,如果多层嵌套的话不推荐使用,推荐使用手写sql,如果使用的话会增加后期的维护工作量.
@Test public void listOrAnd() { QueryWrapper<ByReconcileDepart> q = new QueryWrapper<ByReconcileDepart>(); // 嵌套查询, where ( scenes_name = ? OR ( ( scenes_name = ? AND scenes_name = ? ) ) ) q.eq("scenes_name", "大型自助机"); q.or(i->i.eq("scenes_name", "1").eq("scenes_name", "大型")); List<ByReconcileDepart> list = service.list(q); System.out.println(list); }
And嵌套
@Test public void listOrAnd2() { QueryWrapper<ByReconcileDepart> q = new QueryWrapper<ByReconcileDepart>(); // 嵌套查询, where ( scenes_name = ? AND ( ( scenes_name = ? AND scenes_name = ? ) ) ) q.eq("scenes_name", "大型自助机"); q.and(i->i.eq("scenes_name", "1").eq("scenes_name", "大型")); List<ByReconcileDepart> list = service.list(q); System.out.println(list); }
apply 手动添加Where条件
@Test public void listapply() { QueryWrapper<ByReconcileDepart> q = new QueryWrapper<ByReconcileDepart>(); // 手动拼接sql条件, 有两种形式, 一种为直接写死sql,一种使用占位符, 后面为可变参数 apply(String applySql, Object... params) q.apply("seq = 5"); List<ByReconcileDepart> list = service.list(q); System.out.println(list); } 更新类其中还提供了保存,删除接口,其使用方法比较简单,可以根据官网或者自己点进去代码查看即可,下面只介绍一下通过UpdateWrapper来进行更新的方式.
提供了条件构造器UpdateWrapper,其基本使用方法和QueryWrapper一致,不过添加了Set,即设置需要更新的字段
@Test public void updateWrapper() { // set为设置update set * 的内容,设置where后面的内容和条件选择器一致 UpdateWrapper<ByReconcileDepart> w = new UpdateWrapper<ByReconcileDepart>(); w.eq("seq", 5); w.set("organization_code", "123"); w.set("omg", "123"); boolean update = service.update(w); System.out.println(update); } 分页插件 pom.xml
以前使用的是pagehelper,不过直接引用的话会有jar包冲突,需要剔除一下jar即可.
<!-- pagehelper 解决掉jar包冲突 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.5</version> <exclusions> <exclusion> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </exclusion> </exclusions> </dependency> 代码示例 @Test public void listPage() { QueryWrapper<ByReconcileDepart> q = new QueryWrapper<ByReconcileDepart>(); q.eq("scenes_name", "大型自助机"); // 可以整合pagehandler, pom文件注意剔除, getTotal 获取总条数, 注意配置文件的配置方式 Page<ByReconcileDepart> startPage = PageHelper.startPage(5, 3); List<ByReconcileDepart> list = service.list(q); long total = startPage.getTotal(); System.out.println(total); System.out.println(list.size()); } 生成代码 pom.xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.2.0</version> </dependency> <!-- 默认模板pom --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.1</version> </dependency>注意pom.xml中添加对应的引擎引用
同时需要手动将 mybatis-plus-generator jar包中的模板文件copy到自己的项目中,jar包中的模板文件再resource/template中,打开jar包方法为解压即可.
代码官网的代码复制下来更改一下数据库连接,就可以直接生成看一下结果,正式用的话需要更改一下包名以及公共类型的代码.
这里全都是用的默认提供的生成规则,如果需要自定义模板的话自己去官网查看
同时需要自己手动添加数据库驱动.
在这一步遇到了一个报错,The server time zone value,即JDBC时区的问题,引起的原因是Mysql驱动的版本过高,解决办法为在数据库连接地址后面添加serverTimezone=GMT%2B8,或者降低版本(N多办法中的其中两个).
多层or/and嵌套推荐手写sql,Mybatis-plus只有在简单查询中好用,复杂查询推荐手写sql,便于以后的修改.
乐观锁插件原生的Mybatis如果需要启动乐观锁的话需要手动再sql中实现,现在提供了内置的控制方法. 这样的话还是比较好用的,虽然不如Hinerbate那样只能,还是能解决一些方法.
配置添加配置Bean
@Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor(); }
对应的字段添加 @Version 注解
说明仅支持 updateById(id) 与 update(entity, wrapper) 方法
在 update(entity, wrapper) 方法下, wrapper 不能复用!!!
newVersion 会回写到 entity 中