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. docker上构建redis容器

    1.查看docker上的镜像 [root@holly ~]# docker images 2.搜索docker上的redis镜像,选择下载的版本 [root@holly ~]# docker sear ...

  2. 转载:Jsoup常用方法功能介绍(html解析器)

    jsoup 的作用:是一款 Java 的HTML 解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据 ...

  3. File- Linux必学的60个命令

    1.作用 件内容判断文件类型,使用权限是所有用户. 2.格式 file通过探测文 file [options] 文件名 3.[options]主要参数 -v:在标准输出后显示版本信息,并且退出. -z ...

  4. Apache 禁用IP 访问 和 HTTP 跳转 HTTPS

    如果需要 禁用IP 访问并且 需要 HTTP 跳转到 HTTPS <VirtualHost *:80> ServerName xxx.xxx.com RewriteEngine On Re ...

  5. gitlab merge request

    分支提了mr之后, 又有commit 不用重新提mr,mr中会自动更新 要保证项目下的.git目录中有hooks这个目录(如果是从github迁移到gitlab的项目, 可能没有这个目录, 导致mr不 ...

  6. python实现简单的百度翻译

    这段时间,一直在学python,想找点东西实现一下,练手,所以我想通过python代码来实现翻译,话不多说,看吧! 以chrome为例 1  打开百度翻译 https://fanyi.baidu.co ...

  7. mybatis学习:mybatis的注解开发和编写dao实现类的方式入门

    一.使用注解则不需要创建映射配置文件:即xxxDao.xml javaBean为什么要实现Serializable接口? Java的"对象序列化"能让你将一个实现了Serializ ...

  8. Hadoop Serialization -- hadoop序列化详解 (2)【Text,BytesWritable,NullWritable】

    回顾: 回顾序列化,其实原书的结构很清晰,我截图给出书中的章节结构: 序列化最主要的,最底层的是实现writable接口,wiritable规定读和写的游戏规则 (void write(DataOut ...

  9. TZOJ 1503 Incredible Cows(折半搜索+二分)

    描述 Farmer John is well known for his great cows. Recently, the cows have decided to participate in t ...

  10. 一个网页登陆界面写30多个测试Case——测试之道

    转自博文:http://www.cnblogs.com/I-am-Betty/p/3566411.html 具体需求: 有一个登陆页面, (假如上面有2个textbox, 一个提交按钮. 请针对这个页 ...