MybatisPlus入门 看完就会CRUD 最新版 3.4.3.1 快速入门

MybatisPlus

简介

Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

我们的愿景是成为 Mybatis 最好的搭档,就像 魂斗罗 中的1P、2P,基友搭配,效率翻倍。

特性

  • 无侵入**: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 操作智能分析阻断,预防误操作
    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
代码托管

官方网站:http://mp.baomidou.com/

Gitee | Github

2. MP快速入门

  1. 创建数据库
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `teacher_id` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '小学生', '安徽', 1);
INSERT INTO `user` VALUES (2, '小学生', '安徽', 1);
INSERT INTO `user` VALUES (3, '小学生', '安徽', 1);
INSERT INTO `user` VALUES (4, '小学生', '安徽', 1);
INSERT INTO `user` VALUES (5, '小学生', '北京', 2);
INSERT INTO `user` VALUES (6, '小学生', '北京', 2);
INSERT INTO `user` VALUES (7, '小学生', '北京', 2);
INSERT INTO `user` VALUES (8, '小学生', '北京', 2);
INSERT INTO `user` VALUES (9, '小学生', '北京', 2);
INSERT INTO `user` VALUES (10, '小学生', '北京', 2);
INSERT INTO `user` VALUES (11, '小学生', '北京', 3);
INSERT INTO `user` VALUES (12, '小学生', '上海', 3);
INSERT INTO `user` VALUES (13, '小学生', '上海', 3);
INSERT INTO `user` VALUES (14, '小学生', '上海', 3);
  1. 引入Maven
	      <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
		<!--mybatis Plus-->
		 <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3.1</version>
        </dependency>
       		<!--JDBC-->
          <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!--MYSQL-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
          <!--Druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
  1. 修改配置文件
server:
  port: 8890
spring:
  application:
    name: mp_demo
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC&nullCatalogMeansCurrent=true
    username: root
#    本地密码
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    initialization-mode: always
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
mybatis-plus:
  mapper-locations: classpath:mapper/*.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.waitingresult.mybatis_plus.model
  global-config:
    # 数据库相关配置
    db-config:
      #主键类型  AUTO:"数据库ID自增", INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
      id-type: auto
      #字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"
      field-strategy: not_empty
      #驼峰下划线转换
      table-underline: true
      #是否开启大写命名,默认不开启
      #capital-mode: true
      #逻辑删除配置
      #logic-delete-value: 1
      #logic-not-delete-value: 0
      db-type: mysql
    #刷新mapper 调试神器
    refresh: true
  # 原生配置
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: true
  1. 实体类
    @TableId(value = “id”, type = IdType.AUTO)
    表示这个实体类的ID 是自增长.

AR模式

extends Model< T>
需要重写 pkVal
@Override
protected Serializable pkVal() {
return this.id;
}
继承Model以后 可以new对象.insert /
在

这里的图片信息, 没有更换, 里面的Wrapper 官方已经修改为QueryWrapper和UpdateWrapper
作用等于mapper

CRUD

  1. 测试数据库中只有user表,使用MP对数据库进行CRUD操作
  2. Mp 只需要写出接口,然后在接口上继承BaseMapper< T >即可
public interface UserMapper extends BaseMapper<User> {

}
@RestController
@RequestMapping("/user")
public class UserController {
	@Autowired
    private UserMapper userMapper;
    public void test(){
        userMapper.insert();
        //delete
        //updatebyid
        //add
        //selectList
        //selectPage
        //省略.
    }
}

以上是基本的 CRUD 操作,如您所见,我们仅仅需要继承一个 BaseMapper 即可实现大部分单表 CRUD 操作。BaseMapper 提供了多达 17 个方法给大家使用, 可以极其方便的实现单一、批量、分页等操作。极大的减少开发负担

EntityWrapper 条件构造器

3.1 EntityWrapper 简介

Mybatis-Plus 通过 EntityWrapper(简称 EW,MP 封装的一个查询条件构造器)或者Condition(与 EW 类似) 来让用户自由的构建查询条件,简单便捷,没有额外的负担,能够有效提高开发效率

实体包装器,主要用于处理 sql 拼接,排序,实体参数查询等

注意: 使用的是数据库的字段,不是java的属性名称

条件参数说明:

查询方式说明
setSqlSelect设置 SELECT 查询字段
whereWHERE 语句,拼接 + WHERE 条件
andAND 语句,拼接 + AND 字段=值
andNewAND 语句,拼接 + AND (字段=值)
orOR 语句,拼接 + OR 字段=值
orNewOR 语句,拼接 + OR (字段=值)
eq等于=
allEq基于 map 内容等于=
ne不等于<>
gt大于>
ge大于等于>=
lt小于<
le小于等于<=
like模糊查询 LIKE
notLike模糊查询 NOT LIKE
inIN 查询
notInNOT IN 查询
isNullNULL 值查询
isNotNullIS NOT NULL
groupBy分组 GROUP BY
havingHAVING 关键词
orderBy排序 ORDER BY
orderAscASC 排序 ORDER BY
orderDescDESC 排序 ORDER BY
existsEXISTS 条件语句
notExistsNOT EXISTS 条件语句
betweenBETWEEN 条件语句
notBetweenNOT BETWEEN 条件语句
addFilter自由拼接 SQL
last拼接在最后,例如:last(“LIMIT 1”)
3.2 EntityWrapper 使用

问题:年龄在 18~50 之间性别为男且姓名为 马 的所有用户

/**
 * 年龄在 18~25 之间性别为男且姓名为 马 的所有用户
 */
@Test
public void testFindListEntityWrapper(){
    CustomerMapper mapper = context.getBean(CustomerMapper.class);

    QueryWrapper<Customer> warpper= new QueryWrapper<Customer>();
    warpper.between("age",18,25)
            .eq("gender",0)
            .like("cust_name","马");
    Page<Customer> page = new Page<Customer>(1,30);
    List<Customer> list = mapper.selectPage(page, warpper);
    for (Customer customer : list) {
        System.out.println(customer);
    }
}
3.3 EntityWrapper 的公用

一般在项目中 为了实现 Warpper的公用, 会在ServiceImpl下 写一个 getQuery的方法
根据实体类对象, 返回一个 QUeryWrapper.供后续使用.

 private QueryWrapper<DTO> getQeuryWrapper(Dto dto) {
        QueryWrapper<DTO> wrapper = new QueryWrapper<>();
        if (ObjectUtil.isNotEmpty(dto.getId())) {
            wrapper.eq("id", dto.getId());
        }
        if (ObjectUtil.isNotEmpty(dto.getUid())) {
            wrapper.eq("uid", dto.getUid());
        }
        return wrapper;
    }
  • 22
    点赞
  • 124
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值