MyBatis Plus 入门

MyBatis Plus 入门

1. MyBatis Plus 概述

1.1 简介

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

参考教程:http://mp.baomidou.com/guide/

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

1.2 特点

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多种数据库
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 XML 热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 支持关键词自动转义:支持数据库关键词(order、key…)自动转义,还可自定义关键词
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
  • 内置 Sql 注入剥离器:支持 Sql 注入剥离,有效预防 Sql 注入攻击

2. 入门案例

2.1 搭建环境

  • 步骤一:创建项目:test-mybatis-plus

  • 步骤二:修改pom.xml,添加依赖

  • 步骤三:创建yml文件,配置数据库相关

  • 步骤一:创建项目:test-mybatis-plus

  • 步骤二:修改pom.xml,添加依赖

        
        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.3.5.RELEASEversion>
        parent>   
    
    <dependencies>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
            
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
            dependency>
            
            <dependency>
                <groupId>org.projectlombokgroupId>
                <artifactId>lombokartifactId>
            dependency>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-testartifactId>
            dependency>
            
            <dependency>
                <groupId>com.baomidougroupId>
                <artifactId>mybatis-plus-boot-starterartifactId>
                <version>3.4.0version>
            dependency>
        dependencies>
    
  • 步骤三:创建yml文件,配置数据库相关

    spring:
      datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/cloud_db1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
        username: root
        password: 1234
    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  #输出日志
    

2.2 数据库和表

CREATE TABLE `tmp_customer` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `cname` varchar(50) DEFAULT NULL,
  `password` varchar(32) DEFAULT NULL,
  `telephone` varchar(11) DEFAULT NULL,
  `money` double DEFAULT NULL,
  `version` int(11) DEFAULT NULL,
  `create_time` date DEFAULT NULL,
  `update_time` date DEFAULT NULL,
  PRIMARY KEY (`cid`)
);

insert  into `tmp_customer`(`cid`,`cname`,`password`,`telephone`,`money`,`version`,`create_time`,`update_time`) 
values (1,'jack','1234','110',1000,NULL,NULL,NULL),(2,'rose','1234','112',1000,NULL,NULL,NULL),(3,'tom','1234','119',1000,NULL,NULL,NULL);

2.3 入门:查询所有

  • 步骤1:配置JavaBean

  • 步骤2:编写dao

  • 步骤3:编写启动类

  • 步骤4:编写测试类

  • 步骤1:配置JavaBean

    • @TableName 表名注解,value属性设置表名
package com.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.util.List;


@Data
@TableName("tmp_customer")
public class Customer {
    @TableId(type = IdType.AUTO)
    private Integer cid;
    private String cname;
    private String password;
    private String telephone;
    private String money;

    private Integer version;

    @TableField(exist = false)
    private List<Integer> ids;
}

@TableId标签参数

写法:@TableId(value=“数据库主键字段”,type = IdType.六种类型之一)

例如:@TableId(value=“user_id”,type = IdType.AUTO )

类型 sex
AUTO 数据库自增ID
NONE 数据库未设置主键类型(将会跟随全局)
INPUT 用户输入ID(该类型可以通过自己注册自动填充插件进行填充
ID_WORKER 默认的全局唯一ID(idWorker)
UUID 全局唯一ID(UUID)
ID_WORKER_STR 字符串全局唯一ID(ID_WORKER的字符串表示)

@TableField标签参数

写法:@TableField(参数类型)

例如:@TableField(exist = false)

描述
value 字段值(驼峰命名方式,该值可无)
update 预处理set字段自定义注入
condition 预处理WHERE实体条件自定义运算规则
el 详看注解说明
exist 是否为数据库表字段(默认true存在,false不存在)
strategy 字段验证(默认非null判断,查看com.baomidou.mybatisplus.enums.FieldStrategy)
fill 字段填充标记(FieldFill,配合自动填充使用)
  • 步骤2:编写dao
package com.mp.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.czxy.mp.domain.Customer;
import org.apache.ibatis.annotations.Mapper;


@Mapper
public interface CustomerMapper extends BaseMapper<Customer> {
}
  • 步骤3:编写启动类
package com.mp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class MybatisPlusApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatisPlusApplication.class, args);
    }
}

  • 步骤4:编写测试类
package com.czxy;

import com.czxy.mp.MybatisPlusApplication;
import com.czxy.mp.domain.Customer;
import com.czxy.mp.mapper.CustomerMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import java.util.List;


@RunWith(SpringRunner.class)
@SpringBootTest(classes = MybatisPlusApplication.class)
public class TestDemo01 {
    @Resource
    private CustomerMapper customerMapper;

    @Test
    public void testFindAll() {
        List<Customer> list = customerMapper.selectList(null);
        list.forEach(System.out::println);
    }
}

3. 基本操作

3.1 常见API

BaseMapper 封装CRUD操作,泛型 T 为任意实体对象

  • 增删改
方法名 描述
int insert(T entity) 插入一条记录,entity 为 实体对象
int delete(Wrapper wrapper) 根据 entity 条件,删除记录,wrapper 可以为 null
int deleteBatchIds(Collection idList) 根据ID 批量删除
int deleteById(Serializable id) 根据 ID 删除
int deleteByMap(Map map) 根据 columnMap 条件,删除记录
int update(T entity, Wrapper updateWrapper) 根据 whereEntity 条件,更新记录
int updateById(T entity); 根据 ID 修改
  • 查询
方法名 描述
T selectById(Serializable id) 根据 ID 查询
T selectOne(Wrapper queryWrapper) 根据 entity 条件,查询一条记录
List selectBatchIds(Collection idList) 根据ID 批量查询
List selectList(Wrapper queryWrapper) 根据 entity 条件,查询全部记录
List selectByMap(Map columnMap) 根据 columnMap 条件
List> selectMaps(Wrapper queryWrapper) 根据 Wrapper 条件,查询全部记录
List selectObjs( Wrapper queryWrapper) 根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值
IPage selectPage(IPage page, Wrapper queryWrapper) 根据 entity 条件,查询全部记录(并翻页)
IPage> selectMapsPage(IPage page, Wrapper queryWrapper) 根据 Wrapper 条件,查询全部记录(并翻页)
Integer selectCount(@Param(Constants.WRAPPER) Wrapper queryWrapper) 根据 Wrapper 条件,查询总记录数

3.2 添加

  • 获得自动增长列信息

MyBatis Plus 入门_第1张图片

    @Test
    public void testInsert() {
        Customer customer = new Customer();
        customer.setCname("测试");
        System.out.println(customer);
        customerMapper.insert(customer);
        System.out.println(customer);
    }

3.3 更新

  • 通过id更新
    @Test
    public void testUpdate() {
        Customer customer = new Customer();
        customer.setCid(4);
        customer.setCname("测试777");
        customer.setPassword("777");

        // 需要给Customer设置@TableId
        customerMapper.updateById(customer);
    }
  • 更新筛选过后的所有数据
	@Test
    public void testUpdate2() {
        Customer customer = new Customer();
        customer.setCname("测试777");
        customer.setPassword("777");
        // 更新筛选过后的所有数据,此处没有过滤条件
        customerMapper.update(customer,null);
    }

3.4 删除

  • 根据id进行删除
	@Test
    public void testDelete() {
        // 需要给Customer设置@TableId
        int i = customerMapper.deleteById(11);
        System.out.println(i);
    }
  • 批量删除
    @Test
    public void testBatchDelete() {
        // 需要给Customer设置@TableId
        int i = customerMapper.deleteBatchIds(Arrays.asList(9,10));
        System.out.println(i);
    }

你可能感兴趣的:(java,spring,maven)