MyBatis Pluss笔记

一、概述

MyBatisPlus是一款Mybatis的增强工具,用于简化开发,提高效率。它在MyBatis的基础上只做增强,不做改变,为简化开发、提升效率而生。直接去官网:https://baomidou.com/

二、快速入门

1.准备工作

(1)准备数据

create table user(
	id bigint(20) not null auto_increment comment 'id',
	user_name varchar(20) not null comment '用户名',
	password varchar(20) not null comment '密码',
	name varchar(30) default null comment '姓名',
	age int(11) default null comment '年龄',
	address varchar(100) default null comment '地址',
	primary key(id)
);


insert into user(id,user_name,password,name,age,address) values
(1,'瑞文','123','瑞文',12,'山东'),
(2,'盖伦','gailun123','盖伦',23,'河南'),
(3,'妲己','daji123','妲己',67,'虎山')

(2)创建SpringBoot工程

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.6.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.6.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>2.6.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
            <version>3.3.1</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>

    </dependencies>

(3)创建启动类

@SpringBootApplication
@MapperScan("com.szq.demo.mapper")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

(4)准备实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Long id ;
    private String userName;
    private String password;
    private String name;
    private Integer age ;
    private String address;
}

2使用MybatisPlus

(1)添加依赖

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
            <version>3.3.1</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        ```
(2)配置数据库信息

```bash
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.6.211:57644/test1
    driver-class-name: com.mysql.jdbc.Driver

(3)创建Mapper接口。创建Mapper接口继承BaseMapper接口

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.szq.demo.domain.User;

public interface UserMapper extends BaseMapper<User> {
}

BaseMapper接口中已经提供了很多的常用方法,所以我们只需要直接从容器中获取Mapper就可以了,不需要自己去编写sql语句。
(4)配置Mapper扫描,在启动类上配置我们的Mapper在哪个包下面

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.szq.demo.mapper")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

(5)获取Mapper进行测试

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class UserMapperTest {
    @Autowired
    private UserMapper userMapper;
    @Test
    public void testSelectUser(){
        List<User> users = userMapper.selectList(null);
        System.out.println(users);
    }
}

3.常用设置

3.1 设置表映射规则

默认情况下MP操作的表名就是实体类的类名,但是如果表名和类名不一致就需要我们自己设置映射规则。

(1)单独设置:可以在实体类的类名上加上@TableName注解进行标识。例如:如果表名是tb_user,而实体类名是User,则可以使用如下写法:

@TableName("tb_user")
public class User{
	//...
}

3.2全局设置表名前缀

一般一个项目表名的前缀都是统一风格的,这个时候如果一个一个设置就太麻烦了,我们可以通过配置来设置全局的表名前缀。例如:如果一个项目中所有的表名相比于类名都是多了一个前缀tb_,就可以在application.yml里面使用这种设置方式:
mybatis-plus:
  global-config:
    db-config:
      # 表名前缀设置
      table-prefix: tb_

3.3设置主键生成策略

3.3.1单独设置
默认情况下,使用MP插入数据的时候,如果在我们没有设置主键生成策略的情况下,默认的策略都是基于雪花算法的自增id。如果我们需要使用别的策略可以在定义实体类的时候,在代表主键的字段上加上@TableId注解,使用其type属性指定主键生成策略。例如我们可以使用如下方式设置主键自增长:
@Data
@NoArgsConstructor
@AllArgsConstructor
//如果表名和类名不一样,就可以在类名加上tb_这样的前缀即可
//@TableName("tb_user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id ;
    private String userName;
    private String password;
    private String name;
    private Integer age ;
    private String address;
}

全部主键策略定义在了枚举类IdType中,IdType有如下取值:
(1)Auto:数据库ID自增,依赖于数据库。该类型确保数据库设置了ID自增,否则无效。
(2)None:未设置主键类型,若在代码中没有手动设置主键,则会根据主键的全局策略自动生成(默认的主键全局策略是基于雪花算法的自增Id)
(3)Input:需要手动设置主键,若不设置,插入操作生成SQL语句的时候,主键这一列的值就是null
(4)ASSIGN_ID:当没有手动设置主键的时候,即实体类中的主键属性为空的时候,才会自动填充,使用雪花算法
(5)ASSIGN_UUID:当实体类的主键属性为空的时候,才会自动填充,使用UUID

3.3.2全局设置
mybatis-plus:
  global-config:
    db-config:
      # 表名前缀设置
      table-prefix: tb_
      # id生成策略 auto为数据库自增
      id-type: auto

3.4设置字段和列名

默认情况下MP会开启字段列名的驼峰命名映射,即从经典数据库列名A_COLUMN(下划线命名)到经典的Java属性名aColumn(驼峰命名)的类似映射。如果需要关闭,可以使用如下配置进行关闭:

mybatis-plus:
  global-config:
    db-config:
      # 表名前缀设置
      table-prefix: tb_
      # id生成策略 auto为数据库自增
      id-type: auto
  #是否开启自动驼峰命名规则(camel case)映射,即从经典的数据库列明A_COLUMN(下划线命名),到经典的Java属性名:aColumn的类似映射
  configuration:
    map-underscore-to-camel-case: false

3.5设置字段映射关系

默认情况下MP会根据实体类的属性名去映射表的列名,如果数据库列表和实体类的属性名不一致了,我们就可以使用@TableField注解的value属性来配置映射关系。例如如果表中一个列名叫address,而实体类中的属性名为addressStr则可以使用如下的方式进行配置

    @TableField(value = "user_name")
    private String userName;

3.6设置字段和列明的驼峰映射

默认情况下MP会开启字段列明的驼峰映射,即从经典的数据库列明A_COLUMN(下划线命名)到经典的java属性名aColumn(驼峰命名)的类似映射。如果要关闭驼峰映射,可以进行如下配置

mybatis-plus:
  #是否开启自动驼峰命名规则(camel case)映射,即从经典的数据库列明A_COLUMN(下划线命名)变成java的aColumn
  configuration:
    map-underscore-to-camel-case: false

3.7日志设置

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl```

4.基本使用

4.1插入数据

我们可以使用Insert方法来实现数据的插入

 @Test
    public void testInsert(){
        User user = new User();
        user.setUserName("打野");
        user.setPassword("999");
        int res = userMapper.insert(user);
        System.out.println(res);
    }

4.2 删除操作

我们可以使用delete XXX 方法来实现数据的删除

@Test
    public void testDelete(){
        List<Integer> ids = new ArrayList<>();
        ids.add(2);
        ids.add(3);
        int i = userMapper.deleteBatchIds(ids);
        System.out.println(i);
    }

4.3 更新操作

我们可以使用updateXXX方法来实现数据的删除

@Test
    public void testUpdate(){
        User user = new User();
        user.setAddressStr("湖北省");
        user.setUserName("张三");
        user.setId(1L);
        int res = userMapper.updateById(user);
        System.out.println(res);
    }

5.条件构造器Wrapper

5.1概述

在实际操作数据的时候会涉及到很多条件。所以MP为我们听过了一个比较强大的条件构造器Wrapper。使用它可以让我们非常方便的构造条件。
在这里插入图片描述
在AbstractWrapper中提供了很多用于构造Where条件的方法,AbstractWrapper的子类QueryWrapper则额外提供了用于针对Select语法的select方法,可以用来查询哪些列。AbstractWrapper的子类则额外提供了用于针对SET语法的方法,可以用来设置对哪些列进行更新。

5.2常用AbstractWrapper的方法

(1)eq:equals等于
(2)gt:greater than ,大于 >
(3)ge:greater than or equals,大于等于>=
(4)lt:less than,小于<
(5)le:less than or equals,小于等于
(6)between:相当于SQL中的BETWEEN
(7)like:模糊匹配。like(“name”,“黄”),相当于SQL中的name like ‘%黄%’
(8)likeRight:模糊匹配右半边。likeRight(“name”,“黄”),相当于SQL中的name like ‘黄%’
(9)likeLeft:模糊匹配左半边。likeLeft(“name”,“黄”),相当于SQL中的name like ‘%黄’
(10)notlike:notlike(“name”,“黄”),相当于SQL中的name not like ‘%黄%’
(11)isNull
(12)isNotNull
(13)and:SQL的连接符AND
(14)or:SQL连接符OR

        public void testWrapper1(){
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.gt("age", 12);
        List<User> users = userMapper.selectList(queryWrapper);
        System.out.println(users);
    }
    @Test
    public void testWrapper2(){
        QueryWrapper<User> queryWrapper = new QueryWrapper();
        queryWrapper.in("id", 1,2,3);
        queryWrapper.between("age",18,60);
        queryWrapper.like("address", "山");
        List<User> users = userMapper.selectList(queryWrapper);
        System.out.println(users);
    }

    @Test
    public void testWrapper3(){
        QueryWrapper<User> queryWrapper = new QueryWrapper();
        queryWrapper.in("id", 1,2,3);
        queryWrapper.gt("age", 18);
        queryWrapper.orderByDesc("age");
        List<User> users = userMapper.selectList(queryWrapper);
        System.out.println(users);
    }

5.3QueryWrapper常用方法

QueryWrapper的select可以设置要查询的列
(1)select(String…sqlSelect)方法的测试为要查询的列名

SELECT 
	id,user_name
FROM 
	user

MP写法如下:

   @Test
    public void testWrapper4(){
        QueryWrapper<User> queryWrapper = new QueryWrapper();
        queryWrapper.select("id","user_name");
        List<User> users = userMapper.selectList(queryWrapper);
        System.out.println(users);
    }

5.4常用UpdateWrapper的方法

5.5自定义SQL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值