springboot项目中mybatis-plus的基本增删改查

一,创建项目

1.准备数据库数据,创建表

# 创建数据库
create database if not exists student;
#建表
use student;
create table if not exists stu_message(
    id int auto_increment primary key comment 'id',
    name varchar(10) comment '姓名',
    gender varchar(1) comment '性别',
    age int check ( age>0 && age <=120 ) comment '年龄',
    id_delete int default 0
)comment '学生信息表';

insert into stu_message (id, name, gender, age)
values (1,'张三','男',26),(2,'李四','男',20),('3','王梓涵','女',20),(4,'jerry','女',18);

2.创建maven项目并引入需要的坐标

   <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.0</version>
    </parent>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <mybatisPlus.version>3.5.4</mybatisPlus.version>
        <druid.version>1.2.1</druid.version>
        <mysql.version>8.0.32</mysql.version>
        <junit.version>5.9.3</junit.version>
        <springboot.version>3.1.0</springboot.version>
        <lombok.version>1.8.32</lombok.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>${springboot.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatisPlus.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>${springboot.version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.32</version>
        </dependency>
    </dependencies>

3.编写配置文件

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/student
    username: 账号
    password: 密码
server:
  port: 8080
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

4.创建启动类

启动类创建后,启动类所在的包以及子包都是可以被扫描到的

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

5.编写实体类,并创建接口继承BaseMapper

@Data
@Builder
@TableName("stu_message")
public class Student {
    @TableId(type = IdType.AUTO)
    private Integer id;
    @TableField("name")
    private String name;
    @TableField("gender")
    private String gender;
    @TableField("age")
    @OrderBy(asc = true,sort = 10)
    private Integer age;
    @TableLogic
    @TableField("id_delete")
    private Integer is_delete;
}

必须使用@Mapper注解
作用:标识该接口是 MyBatis 的映射器接口,以便 MyBatis-Plus 能够扫描到并自动实现接口的方法,无需手动编写 XML 文件或者实现类。

@Mapper
public interface StudentMapper extends BaseMapper<Student> {
}

6.编写测试类

这个测试类需要位于启动类所在包或子包里面,才可以正常注入对象。

@SpringBootTest
public class testMapper {
    @Autowired
    private StudentMapper studentMapper;
   }

二, 实体类使用注解讲解

@TableName

该注解用于指定实体类对应的数据库表名。当实体类名与数据库表名不一致,或者实体类名不是数据库表名的驼峰写法时,您需要使用这个注解来明确指定表名。

@TableId

该注解用于标记实体类中的主键字段。如果你的主键字段名为 id,你可以省略这个注解。

@TableId(value = "id",type = IdType.AUTO)

value作用:指定数据库表的主键字段名。如果不设置,MyBatis-Plus 将使用实体类中的字段名作为数据库表的主键字段名。
type:指定主键生成策略
IdType 枚举类型定义

IdType.AUTO:使用数据库自增 ID 作为主键。使用这个需要先将数据库表字段设置成主键,自增。
IdType.NONE:无特定生成策略,如果全局配置中有 IdType 相关的配置,则会跟随全局配置。默认是这个
IdType.INPUT:在插入数据前,由用户自行设置主键值
IdType.ASSIGN_ID:自动分配 ID,适用于 Long、Integer、String 类型的主键。默认使用雪花算法通过 IdentifierGenerator 的 nextId 实现。@since 3.3.0
IdType.ASSIGN_UUID:自动分配 UUID,适用于 String 类型的主键。默认实现为 IdentifierGenerator 的 nextUUID 方法。

@TableField

该注解用于标记实体类中的非主键字段,它告诉 MyBatis-Plus 如何映射实体类字段到数据库表字段。如果你的实体类字段名遵循驼峰命名规则,并且与数据库表字段名一致,你可以省略这个注解。

@TableLogic

该注解用于标记实体类中的字段作为逻辑删除字段。逻辑删除是一种数据管理策略,它不是真正地从数据库中删除记录,而是在记录中标记该记录为已删除状态。通过使用@TableLogic注解,MyBatis-Plus 可以在查询、更新和删除操作中自动处理逻辑删除字段的值
逻辑删除:在数据库中标记该记录为已删除状态
物理删除:真正地从数据库中删除记录

@OrderBy

该注解用于指定实体类中的字段在执行查询操作时的默认排序方式。通过在实体类字段上使用@OrderBy注解,可以确保在执行查询时,如果没有显式指定排序条件,MyBatis-Plus 将按照注解中定义的排序规则返回结果。

@OrderBy(asc = true,sort = 10)

@OrderBy注解的asc属性用于指定排序是否为升序,如果设置为true,则表示升序排序;如果设置为false,则表示降序排序。sort属性用于指定排序规则的优先级,数字越小,优先级越高,即越先被应用

三,功能测试

查询所有

@Test
    public void findAll(){
        List<Student> students = studentMapper.selectList(null);
        System.out.println(students);
    }

在这里插入图片描述不使用@TableLogic,sql语句条件会有变化
在这里插入图片描述

修改

将id=3的学生的年龄修改成18岁

@Test
    public void update(){
//        跟据id获取学生
        Student student = studentMapper.selectById(3);
//        设置修改内容
        student.setAge(20);
//        调用方法实现修改
        int update = studentMapper.updateById(student);
        System.out.println(update);
    }

添加

@Test
    public void add(){
        Student student = Student.builder()
                .name("王子涵")
                .age(21)
                .gender("女")
                .build();
        int insert = studentMapper.insert(student);
        System.out.println(insert);
    }

删除

   @Test
    public void delete(){
        int i = studentMapper.deleteById(4);
        System.out.println(i);
    }

批量删除

   @Test
    public void deleteList(){
        int i = studentMapper.deleteBatchIds(Arrays.asList(1, 2, 3));
        System.out.println(i);
    }

在这里插入图片描述

条件构造器

使用步骤

  1. 使用条件构造器
  2. 设置条件
  3. 调用方法执行
查询

查询所有年龄大于20岁,并且性别为女的学生。

 @Test
    public void find(){
//        创建条件构造器
        QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
//        设置条件
        queryWrapper.eq("gender","女");
        queryWrapper.gt("age",20);
//        调用方法
        List<Student> students = studentMapper.selectList(queryWrapper);
        System.out.println(students);
    }
修改

将张三的年龄修改为22

    @Test
    public void updateByName(){
//        创建条件构造器
        UpdateWrapper<Student> updateWrapper = new UpdateWrapper<>();
//       设置修改内容
        updateWrapper.set("age",22);
//        设置条件
        updateWrapper.eq("name", "张三");
//        调用方法执行
        int update = studentMapper.update(updateWrapper);
        System.out.println(update);
    }

在这里插入图片描述

删除

逻辑删除张三的信息

@Test
    public void delete(){
        QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("name","张三");
        int delete = studentMapper.delete(queryWrapper);
        System.out.println(delete);
    }

在这里插入图片描述物理删除,不使用@TableLogic

在这里插入图片描述

  • 16
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值