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&lt;TableFill&gt; tableFillList = <span style="color: #0000ff;">new</span> ArrayList&lt;&gt;<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>&lt;String, Object&gt; map = <span style="color: #0000ff;">new</span> HashMap&lt;&gt;<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>&lt;FileOutConfig&gt;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 配置与运用的更多相关文章

  1. Mybatis XML配置

    Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

  2. MyBatis Cache配置

    @(MyBatis)[Cache] MyBatis Cache配置 MyBatis提供了一级缓存和二级缓存 配置 全局配置 配置 说明 默认值 可选值 cacheEnabled 全局缓存的开关 tru ...

  3. spring和mybatis整合配置

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  4. SSM ( Spring 、 SpringMVC 和 Mybatis )配置详解

    使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...

  5. Mybatis中配置Mapper的方法

    在这篇文章中我主要想讲一下Mybatis配置文件中mappers元素的配置.关于基础部分的内容可以参考http://haohaoxuexi.iteye.com/blog/1333271. 我们知道在M ...

  6. MyBatis 实践 -配置

    MyBatis 实践 标签: Java与存储 Configuration mybatis-configuration.xml是MyBatis的全局配置文件(文件名任意),其配置内容和顺序如下: pro ...

  7. SpringMVC+Mybatis+MySQL配置Redis缓存

    SpringMVC+Mybatis+MySQL配置Redis缓存 1.准备环境: SpringMVC:spring-framework-4.3.5.RELEASE-dist Mybatis:3.4.2 ...

  8. spring整合mybatis(hibernate)配置

    一.Spring整合配置Mybatis spring整合mybatis可以不需要mybatis-config.xml配置文件,直接通过spring配置文件一步到位.一般需要具备如下几个基本配置. 1. ...

  9. 笔记:MyBatis XML配置详解

    MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息.文档的顶层结构如下: configuration 配置 properties ...

  10. mybatis的配置和使用

    mybatis的配置和使用 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...

随机推荐

  1. Lab 2 内存管理

    常见的操作系统 只使用了 0 和3 段选择子 DPL 是段描述符的内容 段的信息 中断和陷入的 大致特权级的展现 RPL 当前要访问数据段对饮给的特权级 CPL 当前代码段的特权级 DPL 全局的 通 ...

  2. 如何做系列(5)-james mail安装总结

    安装james还是比较复杂的,我们在EC2上花费了差不多一天,发现不能发送邮件到外网,后续又陆续花了几天的时间,才成功搭建james邮件服务器. 现在愿意把我们的经历分享出来,让大家参考一下. 由于项 ...

  3. JZOJ2368 【SDOI2011】黑白棋

    题目 题目大意 在一个1*n的棋盘上,有黑棋和白棋交错分布,每次,一个人可以移动自己的ddd颗旗子. 问先手必胜的方案数. 思考历程 在一开始,我就有点要放弃的念头. 因为这题是一道博弈问题. 我是非 ...

  4. ROS 日志消息(C++)

    1.日志级别 日志消息分为五个不同的严重级别宏,与Android的Log定义的严重级别类似,如下基础宏: ROS_DEBUG_STREAM.ROS_INFO_STREAM.ROS_WARN_STREA ...

  5. Ionic 发送Http post PHP 获取不到数据

    1.app.js 配置请求设置 $httpProvider.defaults.headers.post={ 'Content-Type':'application/x-www-form-urlenco ...

  6. linux负载均衡(什么是负载均衡)

    linux负载均衡(什么是负载均衡) 一.总结 一句话总结: 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用 ...

  7. Web前后端缓存技术(缓存的主要作用是什么)

    Web前后端缓存技术Web前后端缓存技术(缓存的主要作用是什么) 一.总结 一句话总结: 加快页面打开速度 减少网络带宽消耗 降低服务器压力 1.在Web应用中,应用缓存的地方有哪些? 主要有浏览器缓 ...

  8. Java内功修炼系列一责任链模式

    在上一节的拦截器中提到,程序的设计者一般会用拦截器替替代动态代理,将动态代理的逻辑隐藏起来,而把拦截器接口提供给开发者,使开发者不需要关系动态代理的具体实现过程,但是有时候需要多个拦截器,而且拦截器之 ...

  9. 左神算法书籍《程序员代码面试指南》——1_10最大值减去最小值小于或等于num的子数组数量

    [题目]给定数组arr和整数num,共返回有多少个子数组满足如下情况:max(arr[i.j]) - min(arr[i.j]) <= num max(arfi.j])表示子数组ar[ij]中的 ...

  10. VS2005连接MySQL C API

    1.在属性添加:附加目录,附加依赖库,附加库目录: 2.在stdafx.h中加入: #include <winsock.h> #include "mysql.h" 3. ...