Mybatis - plus 配置与运用
Mybatis - plus
mybatis-plus 官方文档
1、配置
引入对应的文件包,spring boot + mybatis 需添加依赖文件如下:

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- 添加 代码生成器 依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.1.1</version>
</dependency>
<!-- 添加 代码生成器 依赖 -->
<dependency>
<groupId>org.shenjia</groupId>
<artifactId>MyBatisX</artifactId>
<version>0.0.5</version>
</dependency>
<!-- 其他模板引擎 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
<!-- 其他模板引擎 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId><!--mysql数据库驱动-->
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
</dependencies>

application.yml添加mybatis - plus相关配置
配置mybatis-plus代码生成器

/**
* @author: zhoujiong
* @description: 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
* @className: CodeGenerator
* @date: 2019/5/13 15:37
*/
public class CodeGenerator {</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args) { </span><span style="color: #008000;">//</span><span style="color: #008000;">1 - FreemarkerTemplateEngine, 0-velocity</span>
<span style="color: #0000ff;">int</span> result = 0<span style="color: #000000;">;
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 自定义需要填充的字段</span>
List<TableFill> tableFillList = <span style="color: #0000ff;">new</span> ArrayList<><span style="color: #000000;">();
tableFillList.add(</span><span style="color: #0000ff;">new</span> TableFill("modify_time"<span style="color: #000000;">, FieldFill.INSERT_UPDATE));
tableFillList.add(</span><span style="color: #0000ff;">new</span> TableFill("create_time"<span style="color: #000000;">, FieldFill.INSERT)); </span><span style="color: #008000;">//</span><span style="color: #008000;">String tables[] = new String[]{"SYS_PERMISSION", "PK_SYS_PERMISSION", "T_BLOG", "PK_T_BLOG", "R_TAG_BLOG", "PK_R_TAG_BLOG", "SYS_PARAM", "SYS_USER", "PK_SYS_USER", "T_BLOG_CATEGORY", "PK_T_BLOG_CATEGORY", "T_BLOG_TAG", "PK_T_BLOG_TAG", "SYS_FUNCTION", "PK_T_COMMENT", "T_COMMENT_MSG", "R_USER_PERMISSION"};</span>
String tables[] = <span style="color: #0000ff;">new</span> String[]{"activity_rules"<span style="color: #000000;">}; System.out.println(System.getProperty(</span>"user.dir"<span style="color: #000000;">)); </span><span style="color: #008000;">//</span><span style="color: #008000;"> 代码生成器</span>
AutoGenerator mpg = <span style="color: #0000ff;">new</span><span style="color: #000000;"> AutoGenerator( ).setGlobalConfig(
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 全局配置</span>
<span style="color: #0000ff;">new</span><span style="color: #000000;"> GlobalConfig()
.setOutputDir(System.getProperty(</span>"user.dir") +"/src/main/java/")<span style="color: #008000;">//</span><span style="color: #008000;">输出目录</span>
.setFileOverride(<span style="color: #0000ff;">true</span>)<span style="color: #008000;">//</span><span style="color: #008000;"> 是否覆盖文件</span>
.setActiveRecord(<span style="color: #0000ff;">false</span>)<span style="color: #008000;">//</span><span style="color: #008000;"> 开启 activeRecord 模式</span>
.setEnableCache(<span style="color: #0000ff;">false</span>)<span style="color: #008000;">//</span><span style="color: #008000;"> XML 二级缓存</span>
.setBaseResultMap(<span style="color: #0000ff;">true</span>)<span style="color: #008000;">//</span><span style="color: #008000;"> XML ResultMap</span>
.setBaseColumnList(<span style="color: #0000ff;">true</span>)<span style="color: #008000;">//</span><span style="color: #008000;"> XML columList
</span><span style="color: #008000;">//</span><span style="color: #008000;">.setKotlin(true) </span><span style="color: #008000;">//</span><span style="color: #008000;">是否生成 kotlin 代码</span>
.setAuthor("zhoujiong"<span style="color: #000000;">)
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 自定义文件命名,注意 %s 会自动填充表实体属性!</span>
.setEntityName("%s"<span style="color: #000000;">)
.setMapperName(</span>"%sMapper"<span style="color: #000000;">)
.setXmlName(</span>"%sMapper"<span style="color: #000000;">)
.setServiceName(</span>"I%sService"<span style="color: #000000;">)
.setServiceImplName(</span>"%sServiceImpl"<span style="color: #000000;">)
.setControllerName(</span>"%sController"<span style="color: #000000;">)
.setOpen(</span><span style="color: #0000ff;">false</span>)<span style="color: #008000;">//</span><span style="color: #008000;">生成代码后不自动打开文件所在目录</span>
).setDataSource(
// 数据源配置
new DataSourceConfig()
.setDbType(DbType.MYSQL)// 数据库类型
.setTypeConvert(new MySqlTypeConvert() {
// 自定义数据库表字段类型转换【可选】
@Override
public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
System.out.println("自动检测到数据库类型:" + fieldType);
//金额或者敏感数值单位需要精确
if (fieldType.contains("NUMBER(") && fieldType.contains("2)")) {//含有这种格式的识别为金额类型
return DbColumnType.BIG_DECIMAL;
//编码枚举数值类型或者布尔类型使用整形表示
} else if (fieldType.contains("NUMBER") && !fieldType.contains(",")) {
return DbColumnType.INTEGER;
} else {
//使用默认的
return super.processTypeConvert(globalConfig, fieldType);
}
}
})
.setDriverName("com.mysql.jdbc.Driver")
.setUsername("")
.setPassword("")
.setUrl("")
).setStrategy(
// 策略配置<span style="color: #0000ff;">new</span><span style="color: #000000;"> StrategyConfig()
</span><span style="color: #008000;">//</span><span style="color: #008000;"> .setCapitalMode(true)</span><span style="color: #008000;">//</span><span style="color: #008000;"> 全局大写命名
</span><span style="color: #008000;">//</span><span style="color: #008000;"> .setDbColumnUnderline(true)</span><span style="color: #008000;">//</span><span style="color: #008000;">全局下划线命名
</span><span style="color: #008000;">//</span><span style="color: #008000;">.setTablePrefix(new String[]{"t_"})</span><span style="color: #008000;">//</span><span style="color: #008000;"> 此处可以修改为您的表前缀</span>
.setNaming(NamingStrategy.underline_to_camel)<span style="color: #008000;">//</span><span style="color: #008000;"> 表名生成策略
</span><span style="color: #008000;">//</span><span style="color: #008000;">.setInclude(new String[]{"SYS_USER","T_BLOG","R_TAG_BLOG","SYS_PARAM","T_BLOG_CATEGORY","T_BLOG_TAG","T_COMMENT","T_LEAVE_MSG"}) </span><span style="color: #008000;">//</span><span style="color: #008000;"> 需要生成的表</span>
.setInclude(tables) <span style="color: #008000;">//</span><span style="color: #008000;"> 需要生成的表
</span><span style="color: #008000;">//</span><span style="color: #008000;"> .setExclude(new String[]{"test"}) </span><span style="color: #008000;">//</span><span style="color: #008000;"> 排除生成的表
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 自定义实体父类</span>
.setSuperEntityClass("com.mybatis.puls.mybatisPuls.entity.BaseEntity"<span style="color: #000000;">)
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 自定义实体,公共字段
</span><span style="color: #008000;">//</span><span style="color: #008000;">.setSuperEntityColumns(new String[]{"test_id"})</span>
.setTableFillList(tableFillList)
// 自定义 mapper 父类
// .setSuperMapperClass("com.mybatis.puls.mybatisPuls.mapper.BaseMapper")
// 自定义 service 父类
// .setSuperServiceClass("com.mybatis.puls.mybatisPuls.service.IBaseService")
// 自定义 service 实现类父类
// .setSuperServiceImplClass("com.mybatis.puls.mybatisPuls.service.impl.BaseServiceImpl")
// 自定义 controller 父类
.setSuperControllerClass("com.mybatis.puls.mybatisPuls.controller.BaseController")
// 【实体】是否生成字段常量(默认 false)
// public static final String ID = "test_id";
// .setEntityColumnConstant(true)
// 【实体】是否为构建者模型(默认 false)
// public SysUser setName(String name) {this.name = name; return this;}
// .setEntityBuilderModel(true)
// 【实体】是否为lombok模型(默认 false)<a href="https://projectlombok.org/">document</a>
.setEntityLombokModel(true)
// Boolean类型字段是否移除is前缀处理
.setEntityBooleanColumnRemoveIsPrefix(true)
//设置是否使用restController注解
.setRestControllerStyle(true)
// .setControllerMappingHyphenStyle(true)
//设置逻辑删除字段,默认1有效,0无效
.setLogicDeleteFieldName("enabled")
).setPackageInfo(
// 包配置
new PackageConfig()
//.setModuleName("")
.setParent("com.mybatis.puls.mybatisPuls")// 自定义包路径
.setEntity("entity")
.setMapper("mapper")
.setService("service")
.setServiceImpl("service.impl")
.setController("controller")).setCfg(
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 注入自定义配置,可以在 VM 中使用 cfg.abc 设置的值</span>
<span style="color: #0000ff;">new</span><span style="color: #000000;"> InjectionConfig() {
@Override
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> initMap() {
Map</span><String, Object> map = <span style="color: #0000ff;">new</span> HashMap<><span style="color: #000000;">();
map.put(</span>"email", "@qq.com"<span style="color: #000000;">);
</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.setMap(map);
}
}.setFileOutConfigList(Collections.</span><FileOutConfig>singletonList(<span style="color: #0000ff;">new</span><span style="color: #000000;"> FileOutConfig(
</span>"/generator-templates-custom/mapper.xml" + ((1 == result) ? ".ftl" : ".vm"<span style="color: #000000;">)) {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 自定义输出文件目录</span>
@Override
public String outputFile(TableInfo tableInfo) {
return System.getProperty("user.dir") +"/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper.xml";
}
}))
).setTemplate(
// 关闭默认 xml 生成,调整生成 至 根目录
new TemplateConfig()
.setXml(null)
// 自定义模板配置,模板可以参考源码 /mybatis-plus/src/main/resources/template 使用 copy
// 至您项目 src/main/resources/template 目录下,模板名称也可自定义如下配置:
.setController("generator-templates-custom/controller.java")
.setEntity("generator-templates-custom/entity.java")
.setMapper("generator-templates-custom/mapper.java")
.setService("generator-templates-custom/service.java")
.setServiceImpl("generator-templates-custom/serviceImpl.java")
);
// 执行生成
if (1 == result) {
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
}
mpg.execute();</span><span style="color: #008000;">//</span><span style="color: #008000;"> 打印注入设置,这里演示模板里面怎么获取注入内容【可无】</span>
System.err.println(mpg.getCfg().getMap().get("email"<span style="color: #000000;">));
}
}

准备模板文件
ftl文件是freemarker模板文件
vm文件是velocity模板文件
本地配置SQL执行效率查询插件
结果显示
配置分页插件
详细也可参照官网
运用
page.setCurrent 设置当前页
page.setSize 设置一页大小
page.setOptimizeCountSql (false)不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题
page.setSearchCount 是否查询总数
然后通过setRecords()方法返回Page对象。
其他插件请参照官网。(例如 注入sql自定义,自定义全局操作)
注意:
- 在建表时不要已condition作为表字段,在使用条件构造器wrapper时,虽然mybatis-plus支持关键词自动转义,但对condition无效!
- 运用了mybatis-plus就不需要在引入mybatis相关包,以免引起冲突!
2、调用
- 通过调用 service crud 接口,条件查询数据库中 id = 20 的数据。
- 通过自已定义mapper(与注入自定义SQL不同,自定义SQL注入是在初始化就讲SQL方法注入到mybatis容器中,类似mybatis-plus中的 BaseMapper中的方法)
controller
service
继承 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
mapper
继承 com.baomidou.mybatisplus.core.mapper.BaseMapper
mapper.xml
条件构造器wrapper
详细构造器用法见文档
条件参数说明
查询方式 | 说明 |
---|---|
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") |
原文地址:https://www.cnblogs.com/BestWishesZJ/p/10844815.html
Mybatis - plus 配置与运用的更多相关文章
- Mybatis XML配置
Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...
- MyBatis Cache配置
@(MyBatis)[Cache] MyBatis Cache配置 MyBatis提供了一级缓存和二级缓存 配置 全局配置 配置 说明 默认值 可选值 cacheEnabled 全局缓存的开关 tru ...
- spring和mybatis整合配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- SSM ( Spring 、 SpringMVC 和 Mybatis )配置详解
使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...
- Mybatis中配置Mapper的方法
在这篇文章中我主要想讲一下Mybatis配置文件中mappers元素的配置.关于基础部分的内容可以参考http://haohaoxuexi.iteye.com/blog/1333271. 我们知道在M ...
- MyBatis 实践 -配置
MyBatis 实践 标签: Java与存储 Configuration mybatis-configuration.xml是MyBatis的全局配置文件(文件名任意),其配置内容和顺序如下: pro ...
- SpringMVC+Mybatis+MySQL配置Redis缓存
SpringMVC+Mybatis+MySQL配置Redis缓存 1.准备环境: SpringMVC:spring-framework-4.3.5.RELEASE-dist Mybatis:3.4.2 ...
- spring整合mybatis(hibernate)配置
一.Spring整合配置Mybatis spring整合mybatis可以不需要mybatis-config.xml配置文件,直接通过spring配置文件一步到位.一般需要具备如下几个基本配置. 1. ...
- 笔记:MyBatis XML配置详解
MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息.文档的顶层结构如下: configuration 配置 properties ...
- mybatis的配置和使用
mybatis的配置和使用 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...
随机推荐
- Lab 2 内存管理
常见的操作系统 只使用了 0 和3 段选择子 DPL 是段描述符的内容 段的信息 中断和陷入的 大致特权级的展现 RPL 当前要访问数据段对饮给的特权级 CPL 当前代码段的特权级 DPL 全局的 通 ...
- ElasticSearch入门之花落红尘(三)
上篇文章散仙介绍了ElasticSearch的入门安装和使用,那么本篇我们来看下,如何使用java api来和ElasticSearch进行交互,简单点说,就是实现一个增删改查,来找找入门的感觉. 在 ...
- mysql TIMESTAMP 不能为NULL
一般建表时候,创建时间用datetime,更新时间用timestamp.这是非常重要的. 我测试了一下,如果你的表中有两个timestamp字段,只要你更新任何非timestamp字段的值,则第一个t ...
- nginx配置虚拟主机的两种方式
一. 通过端口区分不同的虚拟主机 二. 通过域名区分不同的虚拟主机 备注: 1)hosts文件路径:
- svn 设置快捷命令
# some more svn aliases alias svnset='svn propset svn:externals . -F' alias svnget='svn propget svn: ...
- LUOGU P4195 Spoj3105 Mod
题面 bsgs问题.因为p可能不为质数,所以我们将原先解题的式子变形 每次除以p与a的最大公约数,直到最大公约数为1或b不能整除为止 代码 #include<iostream> #incl ...
- inode学习笔记
在学习文件描述符时会看到有个inode概念,今天学习了一下. 在操作系统里,一个文件对应一个inode,inode存储了该文件相关信息,作用有一点点像内存的指针,通过他可以找到对应位置上的数据,但是i ...
- 不同目录cookie共享的问题解决 cookie不同页面访问不到的问题
一般设置cookie的方法是setcookie(key, value, expire),参数分别的意思是建.值.过期时间,这里是大众的默认设置方法,但是忽略了一个问题,setcookie还有path与 ...
- 页面自动执行(加载)js的几种方法
https://www.cnblogs.com/2huos/p/js-autorun.html 一.JS方法1.最简单的调用方式,直接写到html的body标签里面: <html> < ...
- Java虚拟机系列(五)---垃圾收集(GC)
Java语言最大的优势除了它的平台无关性之外,还有它的自动内存分配和垃圾收集技术,本节我先来总结一下垃圾收集相关的内容.本文将从解答以下三个问题的角度来展开: 1.哪些内存需要回收? 2.什么时候回收 ...