Mybatis-Plus简介

Mybatis-Plus 是一款 Mybatis 动态 SQL 自动注入 Mybatis 增删改查 CRUD 操作中间件, 减少你的开发周期优化动态维护 XML 实体字段,无入侵全方位 ORM 辅助层让您拥有更多时间陪家人。

Mybatis-Plus特性

  • 无侵入:Mybatis-Plus 在 Mybatis 的基础上进行扩展,只做增强不做改变,引入 Mybatis-Plus 不会对您现有的 Mybatis 构架产生任何影响,而且 MP 支持所有 Mybatis 原生的特性
  • 依赖少:仅仅依赖 Mybatis 以及 Mybatis-Spring
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 预防Sql注入:内置 Sql 注入剥离器,有效预防Sql注入攻击
  • 通用CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 多种主键策略:支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题
  • 支持热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动
  • 支持ActiveRecord:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可实现基本 CRUD 操作
  • 支持代码生成:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用(P.S. 比 Mybatis 官方的 Generator 更加强大!)
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 支持关键词自动转义:支持数据库关键词(order、key…)自动转义,还可自定义关键词
  • 内置分页插件:基于 Mybatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,预防误操作

官网

http://mp.baomidou.com/
https://github.com/baomidou/mybatis-plus

为什么有这个入门手册

  • 【v1】
    目前最新版本:3.0 alpha/beta,升级 JDK 8 + 优化性能 Wrapper 支持 lambda 语法等等, Wrapper 也更改为 QueryWrapper和UpdateWrapper,网上的攻略已经不行了,这里提供一个新版本的入门采坑手册,并附上spring-cloud-study-mybatisplus开源学习项目。那么教程开始了。
  • 【v2】
    目前3.0已经进入正式阶段3.0.5,官方文档也陆续完善

maven的pom.xml配置

3.0.5之后,在SpringBoot2的包引入后,只需要这样一个包就搞定了。

<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.5</version>
</dependency>

application.yml应用配置

3.0.5之后,无需额外的配置,只需要一句@MapperScan("com.xxxx.xxx.mapper")即可开启Mybatis-Plus。以下配置为常规配置而已,仅供参考。
server:port: 3333servlet:context-path: /mybatisplus
tomcat:remote-ip-header: x-forward-foruri-encoding: UTF-8max-threads: 10background-processor-delay: 30
spring:http:encoding:force: truecharset: UTF-8application:name: spring-cloud-study-mybatisplusfreemarker:request-context-attribute: req#prefix: /templates/suffix: .htmlcontent-type: text/htmlenabled: truecache: falsecharset: UTF-8allow-request-override: falseexpose-request-attributes: trueexpose-session-attributes: trueexpose-spring-macro-helpers: true#template-loader-path: classpath:/templates/datasource:type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: com.mysql.jdbc.Driverdriver-class-name: com.mysql.jdbc.Driverplatform: mysqlurl: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: rootpassword: rootinitialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1testWhileIdle: truetestOnBorrow: falsetestOnReturn: falsefilters: stat,wall,log4j

Entity

推荐用我写的生成器,用sql语句生成实体类,而且最好用lombok简化setget
http://java.bejson.com/generator

Mapper

Mapper只需要extends BaseMapper<T>就可以完美实现增删改查等一系列操作,非常方便
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface UserMapper extends BaseMapper<User>{

}

这里Entity省略setter和getter方法,可以用lombok的@Data代替

@Data
public class User implements Serializable {private static final long serialVersionUID = 1L;
private int id;private String userId;private String userName;private String passWord;private String name;private String tell;private int status;

}

Controller控制器

这里随便写个init方法和find方法,init就不用说了,初始化一些数据进去,find使用了QueryWrapper构造器,很方便。

@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserMapper userMapper;
@GetMapping("/init")
public ApiReturnObject  init(){List&lt;User&gt; userList=new ArrayList&lt;User&gt;();for (int i = 0; i &lt; 10; i++) {int n=RandomUtil.randomInt(10000,99999)+i;User user=new User();user.setId(n);user.setName(n+"");user.setPassWord(n+"");user.setStatus(1);user.setUserId(n+"");user.setUserName(n+"");userMapper.insert(user);userList.add(user);user=null;}return ApiReturnUtil.success(userList);
}@GetMapping("/find")
public ApiReturnObject  find(){IPage&lt;User&gt; userList=userMapper.selectPage(new Page&lt;User&gt;(1, 10), new QueryWrapper&lt;User&gt;().like("name","1"));return ApiReturnUtil.success(userList.getRecords());
}

}

这里还放出一段实战语句,直接用QueryWrapper构造器模糊查询证书编码,这个构造器是mybatis-plus的一个精华,请用好

@RestController
public class CertContoller {@Autowiredprivate CertMapper certMapper;
@RequestMapping("/certCompanyDetail")
public Object certCompanyDetail(){return certMapper.selectOne(new QueryWrapper&lt;Cert&gt;().like("cert_num","EGAG-SAL05-201811XXXX"));
}

}

Postman测试

访问数据初始化 http://127.0.0.1:1111/mybatisplus/user/init

{"errorCode": "00","errorMessage": "success","returnObject": [{"id": 52585,"name": "52585","passWord": "52585","status": 1,"userId": "52585","userName": "52585"},{"id": 33432,"name": "33432","passWord": "33432","status": 1,"userId": "33432","userName": "33432"}。。。这里省略其他的]
}

访问构造器查询 http://127.0.0.1:3333/mybatisplus/user/find

{"errorCode": "00","errorMessage": "success","returnObject": [{"id": 41618,"name": "41618","passWord": "41618","status": 1,"userId": "41618","userName": "41618"},{"id": 17804,"name": "17804","passWord": "17804","status": 1,"userId": "17804","userName": "17804"}。。。省略其他包含1的]
}

QueryWrapper条件参数说明

查询方式 说明
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
orderByAsc(有变化,中间有By) ASC 排序 ORDER BY
orderByDesc(有变化,中间有By) DESC 排序 ORDER BY
exists EXISTS 条件语句
notExists NOT EXISTS 条件语句
between BETWEEN 条件语句
notBetween NOT BETWEEN 条件语句
addFilter 自由拼接 SQL
last 拼接在最后,例如:last("LIMIT 1")

分页插件

已经在springboot注入mybatis的分页插件,直接使用Page参数<index,size>调用即可,简单方便。

 IPage<User> userList=userMapper.selectPage(new Page<User>(1, 10), new QueryWrapper<User>().like("name","1"));

MybatisPlus3整合相关推荐

  1. Spring Boot+Gradle+ MyBatisPlus3.x搭建企业级的后台分离框架

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:任务加油站 原文:toutiao.com/i6861 ...

  2. gradle官方文档_Spring Boot+Gradle+MyBatisPlus3.x搭建企业级的后台分离框架

    你再主动一点点   我们就有故事了 原文:toutiao.com/i6861456496740270604 1.技术选型 解析器:FastJSON 开发工具:JDK1.8 .Gradle.IDEA 技 ...

  3. springboot2.3整合mybatis-plus3.3.2较为详细的教程

    springboot2.3整合mybatis-plus3.3.2较为详细的教程 前言 项目环境 maven依赖如下 项目配置如下 建表语句如下 使用mybatis-plus代码生成插件生成代码 配置分 ...

  4. Springboot2.0从零开始搭建脚手架-初始化和整合MybatisPlus3.0+...

    初始化springboot项目 添加web依赖,基于springboot2.1.3稳定版本 初始化spring boot项目地址 https://start.spring.io/ 包名:com.nqm ...

  5. SpringBoot整合MyBatis-Plus3.1详细教程

    一.说明 Mybatis-Plus是一个Mybatis框架的增强插件,根据官方描述,MP只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑.并且只需简单配置,即可快速进行 CRUD 操作,从而 ...

  6. mybatis jar包_springboot2整合mybatis-plus3踩到的坑

    前言 最近在进行项目重构,在架构师的建议下,就把项目中mybatis切换成mybatis-plus.因为mybatis-plus在mybatis的基础上只做增强不做改变,因此切换的成本很低,就只需改j ...

  7. bilibili在线解析接口_SpringBoot+Gradle+MyBatisPlus3.x + Swagger搭建在线和离线API

    1.简要说明 本文章是搭建SpringBoot + Gradle + MyBatisPlus3.x + SwaggerBootstrapUi整合在线和离线API 本框架以Java语言实现为主,基于Sp ...

  8. ShardingSphere-JDBC5.2整合mybatisPlus入门

    一.分库分表技术 当单表的数据量非常大,已经达到了数据库的IO瓶颈时,即使是尝试了加索引,读写分离等方案之后,单表的查询速度还是非常慢.这时候就可以考虑使用水平分表的方案,即通过把单表的数据拆分存放到 ...

  9. springboot整合mybatis-plus完整案例

    1.mybatis-plus,plus意思为插件,只在原来的基础上增强不做改变,只要进行简单的配置就可以对单表进行crud,还提供了强大的条件构造器wrapper以及代码生成器等.如下为springb ...

最新文章

  1. R语言do.call函数和call函数实战
  2. Python Django CBV下的通用视图函数
  3. 电脑销售渠道_双十一遇上英雄联盟S10,苏宁游戏装备销售增长258%
  4. CF 1174 D. Ehab and the Expected XOR Problem 异或技巧
  5. python 32的值_示例解读 Python 2 和 Python 3 之间的主要差异
  6. java web 应用技术与案例教程_《Java Web应用开发技术与案例教程》怎么样_目录_pdf在线阅读 - 课课家教育...
  7. 洛谷.3919.[模板]可持久化数组(可持久化线段树/平衡树)
  8. ORA-02291: 违反完整约束条件 …… - 未找到父项关键字
  9. Oracle 11g行字段拼接WMSYS.WM_CONCAT问题Not A LOB
  10. IOS 公共类-数字处理
  11. python代码怎么练_自己练习的Python代码(1)
  12. CSS学习笔记:transition
  13. MybatisPlus
  14. 计算机系统基础袁春风试题,计算机系统基础习题解答与教学指导
  15. datedif函数(datedif函数在哪里找)
  16. fastlane二开java_Fastlane 使用手册(二)
  17. 从TikTok功能优化,抓住直播带货机遇
  18. css textarea行数_超级简单:在一个TextArea中如何限制行数和字符数
  19. 传感器实训心得体会_传感器心得体会
  20. EDB数据库创建流程指南

热门文章

  1. 微信浏览器无法自动播放视频几种解决方式
  2. 不用动手就能清洁美白你的牙齿,360°无死角微笑一百分丨钛空智慧星球推荐...
  3. iframe之父子页面通信
  4. php mockery单元测试,php – mockery重载类缺少方法
  5. 【转载】社交的蒸发冷却效应
  6. 基于混沌算法的图像加密技术(一)
  7. Kotlin中自定义dialog
  8. python通过新 mplfinance 模块绘制 k 线图
  9. portainer连接swarm集群
  10. 将字符串生成艺术字pyfiglet.figlet_format