J'KYO
No pains,no gains.

Mybatis-Plus3.0入门手册

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

为什么有这个入门手册

目前最新版本:3.0 alpha/beta,升级 JDK 8 + 优化性能 Wrapper 支持 lambda 语法等等, Wrapper 也更改为 QueryWrapper和UpdateWrapper,网上的攻略已经不行了,这里提供一个新版本的入门采坑手册,并附上spring-cloud-study-mybatisplus开源学习项目。那么教程开始了。

maven的pom.xml配置

    <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.0-beta</version>
        </dependency>
        <!-- mybatis-plus begin -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0-beta</version>
        </dependency>
        <!-- mybatis-plus end -->
         <!-- Spring Boot Mybatis 依赖 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency> 

application.yml应用配置

官方给的配置,有报错,集中报错在IDGenerator那边,于是暂时屏蔽了,mysql是不需要的,如果用在oracle上应该是需要配置,等官方更新demo配置。

server:
  port: 3333
  servlet:
      context-path: /mybatisplus
tomcat:
    remote-ip-header: x-forward-for
    uri-encoding: UTF-8
    max-threads: 10
    background-processor-delay: 30
spring:
    http:
      encoding:
        force: true
        charset: UTF-8
    application:
        name: spring-cloud-study-mybatisplus
    freemarker:
        request-context-attribute: req
        #prefix: /templates/
        suffix: .html
        content-type: text/html
        enabled: true
        cache: false
        charset: UTF-8
        allow-request-override: false
        expose-request-attributes: true
        expose-session-attributes: true
        expose-spring-macro-helpers: true
        #template-loader-path: classpath:/templates/
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.jdbc.Driver
        driver-class-name: com.mysql.jdbc.Driver
        platform: mysql
        url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
        username: root
        password: root
        initialSize: 5
        minIdle: 5
        maxActive: 20
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 1
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        filters: stat,wall,log4j
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8888/eureka/
  instance:
    ip-address: ture
mybatis-plus:
  # 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Mapper.xml
  # 如果是放在resource目录 classpath:/mapper/*Mapper.xml
  mapper-locations: classpath:/com/softdev/system/demo/entity/*Mapper.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.softdev.system.*.entity
  global-config:
    db-config:
      #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
      id-type: UUID
      #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
      field-strategy: NOT_EMPTY
      #驼峰下划线转换
      table-underline: true
      #mp2.3+ 全局表前缀 mp_
      #table-prefix: mp_
      #刷新mapper 调试神器
      #refresh-mapper: true
      #数据库大写下划线转换
      #capital-mode: true
      # Sequence序列接口实现类配置
      #key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
      #逻辑删除配置(下面3个配置)
      logic-delete-value: 1
      logic-not-delete-value: 0
    #sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
      #自定义填充策略接口实现
    #meta-object-handler: com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
  configuration:
    #配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId) 
    map-underscore-to-camel-case: true
    cache-enabled: false
    #配置JdbcTypeForNull, oracle数据库必须配置
    jdbc-type-for-null: 'null' 

entity和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 {
    @Autowired
    private UserMapper userMapper;

    @GetMapping("/init")
    public ApiReturnObject  init(){
        List<User> userList=new ArrayList<User>();
        for (int i = 0; i < 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<User> userList=userMapper.selectPage(
                new Page<User>(1, 10), 
                new QueryWrapper<User>().like("name","1")
            );
        return ApiReturnUtil.success(userList.getRecords());
    }
} 

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参数

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

项目源码

https://github.com/moshowgame/spring-cloud-study 
https://github.com/moshowgame/spring-cloud-study/tree/master/spring-cloud-study-mybatisplus

posted on 2018-09-21 16:40  J'KYO  阅读(8029)  评论(0编辑  收藏  举报