条件构造器Wrapper(看官网即可)
代码生成器
AutoGenerator 是 MyBatis­Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块 的代码,极大的提升了开发效率。
其实在学习mybatis的时候我们就使用过逆向工程,根据我们的数据表 来生成的对应的实体类,DAO接口和Mapper映射文件,而MyBatis­plus提供了 更加完善的功能,下面来针对两种方式做一个基本的对比
1、MyBatis­plus是根据java代码开生成代码的,而Mybatis是根据 XML文件的配置来生成的
2、MyBatis­plus能够生成实体类、Mapper接口、Mapper映射文件, Service层,Controller层,而Mybatis只能生成实体类,Mapper接口,Mapper映 射文件
1、操作步骤:
1、添加依赖
添加代码生成器依赖

1<dependency>
2<groupId>com.baomidou</groupId>
3<artifactId>mybatis‐plus‐generator</artifactId>
4<version>3.3.1.tmp</version>
5</dependency>

添加 模板引擎 依赖,MyBatis­Plus 支持 Velocity(默认)、Freemarker、
Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用

自定义模板引擎。

1<dependency>
2<groupId>org.apache.velocity</groupId>
3<artifactId>velocity‐engine‐core</artifactId>
4<version>2.2</version>
5</dependency>
6<dependency>
7<groupId>org.freemarker</groupId>
8<artifactId>freemarker</artifactId>
9<version>2.3.30</version>
10</dependency>
11<dependency>
12<groupId>com.ibeetl</groupId>
13<artifactId>beetl</artifactId>
14<version>3.1.1.RELEASE</version>
15</dependency>

2、编写生成类

public class MyTest {@Test
public void testGenerator(){//此处默认有两个对应的实现类,大家不要导错包GlobalConfig globalConfig = new GlobalConfig();//设置全局的配置
globalConfig.setActiveRecord(true)//是否支持AR模式
.setAuthor("lian")//设置作者
.setOutputDir("e:\\self_project\\mybatisplus_generatorcode\\src\\main\\java")//设置生成路径
.setFileOverride(true)//设置文件覆盖
.setIdType(IdType.AUTO) //设置主键生成策略
.setServiceName("%sService")//设置生成的serivce接口的名字
.setBaseResultMap(true) //设置基本的结果集映射
.setBaseColumnList(true);//设置基本的列集合
// 进行策略配置
StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig.setCapitalMode(true)//设置全局大写命名
.setNaming(NamingStrategy.underline_to_camel)//数据库表映射到实体的命名策
.setTablePrefix("tbl_")//设置表名前缀
.setInclude("tbl_emp");//生成的表
// 进行包名的策略配置
PackageConfig packageConfig = new PackageConfig(); packageConfig.setParent("cn.tulingxueyuan")
.setMapper("mapper")
.setService("service")
.setController("controller")
.setEntity("bean")
.setXml("mapper");
//整合配置
AutoGenerator autoGenerator = new AutoGenerator(); autoGenerator.setGlobalConfig(globalConfig).setDataSource(dataSourceCon
fig).setStrategy(strategyConfig).setPackageInfo(packageConfig);
autoGenerator.execute();
}
}

注意,当通过上述代码实现之后,大家发现可以在Controller层可以直
接实现调用,这些调用的实现最核心的功能就在于ServiceImpl类,这个类中自 动完成mapper的注入,同时提供了一系列CRUD的方法。

6、插件扩展
MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。默认情况下,
MyBatis 允许使用插件来拦截的方法调用包括:
Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler (getParameterObject, setParameters) ResultSetHandler (handleResultSets, handleOutputParameters) StatementHandler (prepare, parameterize, batch, update, query)
1、分页插件
在spring.xml文件中添加如下配置引入插件

1<property name="plugins">
2<array>
3<bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterc eptor"></bean>
4</array>
5</property>

编写测试类

1@Test
2public void TestPage(){3Page page = new Page(2,2);
4Page page1 = empDao.selectPage(page, null);
5List records = page1.getRecords();
6for (Object record : records) {7System.out.println(record);
8   }
9   System.out.println("==============");
10System.out.println("获取总条数:"+page.getTotal());
11System.out.println("当前页码:"+page.getCurrent());
12System.out.println("总页码:"+page.getPages());
13System.out.println("每页显示的条数:"+page.getSize());
14System.out.println("是否有上一页:"+page.hasPrevious());
15System.out.println("是否有下一页:"+page.hasNext());
16  }

2、乐观锁插件
当要更新一条记录的时候,希望这条记录没有被别人更新
乐观锁实现方式:

取出记录时,获取当前version
更新时,带上这个version
执行更新时, set version = newVersion where version = oldVersion
如果version不对,就更新失败 添加配置:

 <bean class="com.baomidou.mybatisplus.extension.plugins.OptimisticLockerI nterceptor"></bean>

修改实体类添加version字段并在表中添加version字段
编写测试类

@Test
public void testOptimisticLocker(){Emp emp = new Emp();
emp.setEmpno(22);
emp.seteName("zhang");emp.setSal(10000.0);
emp.setComm(1000.0);
emp.setVersion(2);
empDao.updateById(emp);
}

3、SQL执行分析插件,避免出现全表更新和删除

1<bean class="com.baomidou.mybatisplus.extension.plugins.SqlExplainInterc eptor">
2<property name="sqlParserList">
3<list>
4<bean class="com.baomidou.mybatisplus.extension.parsers.BlockAttackSqlPa rser"></bean>
5</list>
6</property>
7</bean>
1@Test
2public void testSqlExplain(){3int delete = empDao.delete(null);
4System.out.println(delete);
5  }

4、非法sql检查插件

 <bean class="com.baomidou.mybatisplus.extension.plugins.IllegalSQLInterce ptor"></bean>@Test
public void testSqlIllegal(){QueryWrapper<Emp> queryWrapper = new QueryWrapper<>();
queryWrapper.or();
List<Emp> list = empDao.selectList(queryWrapper);
for (Emp emp : list) {System.out.println(emp);}}

7、SQL注入器
全局配置 sqlInjector 用于注入 ISqlInjector 接口的子类,实现自定义 方法注入。也就是说我们可以将配置在xml中的文件使用注入的方式注入到全局 中,就不需要再编写sql语句
自定义注入器


添加配置:

1<bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.Glob alConfig">
2<property name="dbConfig" ref="dbConfig"></property>
3<property name="sqlInjector" ref="myinject"></property>
4</bean>
5   <bean id="myinject" class="cn.tulingxueyuan.injector.MyInjector"></bean>
1  package cn.tulingxueyuan.injector;
2
3import com.baomidou.mybatisplus.core.injector.AbstractMethod;
4import com.baomidou.mybatisplus.core.metadata.TableInfo;
5import org.apache.ibatis.mapping.MappedStatement;
6import org.apache.ibatis.mapping.SqlSource;
7
8public class DeleteAll extends AbstractMethod {9@Override
10public MappedStatement injectMappedStatement(Class<?> mapperClass, Clas s<?> modelClass, TableInfo tableInfo) {11String sql;
12MySqlMethod mySqlMethod = MySqlMethod.DELETE_ALL;
13if (tableInfo.isLogicDelete()) {14sql = String.format(mySqlMethod.getSql(), tableInfo.getTableName(), tab leInfo,
15sqlWhereEntityWrapper(true,tableInfo));
16} else {17mySqlMethod = MySqlMethod.DELETE_ALL;
18sql = String.format(mySqlMethod.getSql(), tableInfo.getTableName(),
19sqlWhereEntityWrapper(true,tableInfo));
20  }
21SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
22return addUpdateMappedStatement(mapperClass, modelClass, mySqlMethod.ge tMethod(), sqlSource);
23  }
24  }
25  package cn.tulingxueyuan.injector;
26
27
28  /**
29  * 自定义全局删除方法
30  */
31
32  public enum MySqlMethod {33
34
35  /**
36  * 删除全部
37  */
38  DELETE_ALL("deleteAll", "根据 entity 条件删除记录", "<script>\nDELETE FRO M %s %s\n</script>");
39
40
41private final String method;
42private final String desc;
43private final String sql;
44
45MySqlMethod(String method, String desc, String sql) {46this.method = method;
47this.desc = desc;
48this.sql = sql;
49  }
50
51public String getMethod() {52return method;
53  }
54
55public String getDesc() {56return desc;
57  }
58
59public String getSql() {60return sql;
61  }
62
63  }
64  package cn.tulingxueyuan.dao;
65
66import com.baomidou.mybatisplus.core.mapper.BaseMapper;
67import cn.tulingxueyuan.bean.Emp;
68
69  /**
70  * 在mybatis操作的时候,我们需要自己定义接口中实现的方法,并添加与之对应的EmpD ao.xml文件,编写对应的sql语句
71  * 在mybatis‐plus操作的时候,我们只需要继承BaseMapper接口即可,其中的泛型T表 示我们要实际操作的实体类对象
72  */
73public interface EmpDao extends BaseMapper<Emp> {74Integer deleteAll();
75  }

8、公共字段填充
实现元对象处理器接口:
com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
注解填充字段 @TableField(… fill = FieldFill.INSERT) 生成器策略部分 也可以配置!
metaobject:元对象,是mybatis提供的一个用于更加方便,更加优雅的访问对象 的属性,给对象的属性设置值的一个对象,还会用于包装对象,支持 Object,Map,Collection等对象进行包装。本质上metaobject是给对象的属性设置 值,最终还是要通过Reflect获取到属性的对应方法的invoker,最终执行。 编写自定义的公共字段填充

1  package cn.tulingxueyuan.fill;
2
3import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
4import org.apache.ibatis.reflection.MetaObject;
5
6import java.time.LocalDateTime;
7import java.util.stream.Stream;
8
9  public class MyMetaObjectHandler implements MetaObjectHandler {10
11@Override
12public void insertFill(MetaObject metaObject) {13this.strictInsertFill(metaObject, "eName", String.class, "lian"); // 起 始版本 3.3.0(推荐使用)
14// this.fillStrategy(metaObject, "createTime", LocalDateTime.now()); //
也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8‐SNAPSHOT`)
15  }
16
17@Override
18public void updateFill(MetaObject metaObject) {19this.strictUpdateFill(metaObject, "eName", String.class,"lian"); // 起始 版本 3.3.0(推荐使用)
20// this.fillStrategy(metaObject, "updateTime", LocalDateTime.now()); //
也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8‐SNAPSHOT`)
21  }
22  }

添加到对应的配置中:

测试:

mybats-puls---条件构造器Wrapper,插件扩展,SQL注入器,公共字段填充相关推荐

  1. MybatisPlus学习(四)条件构造器Wrapper方法详解

    https://www.cnblogs.com/xianz666/p/13857733.html MybatisPlus学习(四)条件构造器Wrapper方法详解 文章目录 1.条件构造器 2.Que ...

  2. MP条件构造器Wrapper

    5.1 概述 我们在实际操作数据库的时候会涉及到很多的条件.所以MP为我们提供了一个功能强大的条件构造器 Wrapper .使用它可以让我们非常方便的构造条件. ​ 其继承体系如下: ​ 在其子类Ab ...

  3. Mybatis-Plus 条件构造器Wrapper常用方法

    Mybatis-Plus 条件构造器Wrapper常用方法 下面拼接的也就是sql语句里面where后面的: 1.eq 匹配与键值相等的数据 eq(键,值) 2.ne 匹配与键值不相等的数据 ne(键 ...

  4. Mybatis-Plus实战中的几个条件构造器Wrapper用法

    Mybatis-Plus实战中的几个条件构造器Wrapper用法 其实Wrapper有很多其他的方法,组合起来也是殊途同归,大家可以自己点开源码去查看一些方法的使用说明 @Testvoid conte ...

  5. MybatisPlus学习 条件构造器Wrapper方法详解

    目录 1.条件构造器 2.AbstractWrapper 2.1.eq.allEq.ne. 2.2.gt.ge.lt.le 2.3.between.notBetween 2.4.like.notLik ...

  6. MybatisPlus条件构造器wrapper方法的使用

    目录 一.Wrapper介绍 二.QueryWrapper的方法 三.目录结构 (1)目录 1.实体类 2.Mapper接口层 3.AnimalServiceImpl服务实现层 4.IAnimalSe ...

  7. php mssql扩展SQL查询中文字段名解决方法

    一.问题: 数据库是MS SQLServer2000,要把SQLServer2000里的一张表的数据导入MySQL5,其中SQLServer2000表的字段以简体中文命名(强烈建议不要以中文做为字段名 ...

  8. php mysql 中文字段名_php mssql扩展SQL查询中文字段名解决方法

    一.问题: 数据库是MS SQLServer2000,要把SQLServer2000里的一张表的数据导入MySQL5,其中SQLServer2000表的字段以简体中文命名(强烈建议不要以中文做为字段名 ...

  9. MybatisPlus 之 Sql 注入器

    我们已经知道,在MP中,通过AbstractSqlInjector将BaseMapper中的方法注入到了Mybatis容器,这样这些方法才可以正常执行. 那么,如果我们需要扩充BaseMapper中的 ...

  10. Mybatis-Plus中的查(select)和 Wrapper条件构造器-详解 V2.0

    V1.0 已更新为 V-2.0  传送门→ (V-2.0)Mybatis-Plus中的查(select)和QueryWrapper条件构造器​​​​​​​ 前言 本文介绍 mybatis-plus 中 ...

最新文章

  1. Pandas 中的 concat 函数
  2. 实用技巧:使用 jQuery 异步加载 JavaScript 脚本
  3. r语言读取excel数据_R语言操纵Excel进行数据透视与批处理
  4. ubuntu18.10下面从视频中提取音频
  5. lr监控mysql_LR通过SiteScope监控mysql
  6. c语言课全部由字母,C语言程序设计课程期末练习试题.doc
  7. Flutter1.12与原生Android交互(kotlin)
  8. 如何系统学习领域驱动设计?
  9. 国内开源项目无法形成气候且难以持续性的问题分析
  10. Numpy Statistics 统计函数
  11. 奇安信代码安全实验室帮助微软修复两个 “重要” 漏洞,获官方致谢
  12. java 创建Reader_java – 最佳实践:为XMLReader创建SAX解析器
  13. centos 5.8 mysql_linux centos5.8装yum安装mysql
  14. jquery.blockUI.2.31.js 弹出层项目介绍
  15. 远控免杀从入门到实践 (11) 终结篇
  16. 栅栏密码 - Python脚本
  17. 【新农合专题】新农合系统资料汇总贴(新增134个)
  18. 旷视发布招股书,一起看看CV四小龙中的三小龙那些有意思的事情
  19. openoffice java_java代码实现开启openoffice服务和关闭sffice.exe进程
  20. JS C22作业:方块拖拽效果

热门文章

  1. 【MATLAB】求极限
  2. 一文搞懂三级管和场效应管驱动电路设计及使用
  3. 使用python、java语言批量下载抖音中我的视频、我喜欢的视频,解析抖音视频,批量下载抖音...
  4. 怎么用计算机测出来体脂,怎么测体脂比较科学
  5. Dell安装Ubuntu教程
  6. 鸿蒙应用开发 | 时间选择器(TimePicker)的功能和用法
  7. 学习 Delphi 必读的6本书【转译】
  8. Vs2010创建网站
  9. mysql修改唯一索引
  10. php 修改文件的权限_授予PHP写入文件和文件夹的权限