Spring Boot学习随笔- 集成MyBatis-Plus,第一个MP程序(环境搭建、@TableName、@TableId、@TableField示例)

学习视频:【编程不良人】Mybatis-Plus整合SpringBoot实战教程,提高的你开发效率,后端人员必备!

引言

MyBatis-Plus是一个基于MyBatis的增强工具,旨在简化开发,提高效率。它扩展了MyBatis的功能,提供了许多实用的特性,包括强大的CRUD操作、条件构造器、分页插件、代码生成器等。MyBatis-Plus的目标是简化开发,提供更便捷的操作数据库的方式。

MyBatis-Plus的主要特性包括:

  1. CRUD操作的增强功能:MyBatis-Plus提供了丰富的CRUD操作方法,包括批量插入、批量更新、链式查询等,简化了数据操作的流程。
  2. 条件构造器:MyBatis-Plus内置了条件构造器,可以通过简单的方法链式调用来构建复杂的查询条件,避免手写SQL语句,提高了开发效率。
  3. 分页插件:MyBatis-Plus提供了强大的分页插件,支持多种数据库的分页查询,开发者可以轻松实现分页查询功能。
  4. 代码生成器:MyBatis-Plus内置了代码生成器,可以根据数据库表自动生成Entity、Mapper、Service、Controller等代码,减少了重复的CRUD代码编写工作。
  5. 乐观锁插件:MyBatis-Plus提供了乐观锁的支持,可以通过注解的方式实现乐观锁功能,确保数据的一致性。

SpringBoot集成MyBatis-Plus

第一个MyBatisPlus程序

创建项目,提前引入支持的依赖(热部署、mysql、lombok、Web)

引入依赖

xml 复制代码
<!--已包含mybatis依赖-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.3.2</version>
</dependency>
<!-- 引入阿里巴巴连接池-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.19</version>
</dependency>

配置文件

mapper文件映射和实体别名,mybatisplus已经配置了,所以不需要再写了。

yaml 复制代码
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ems?characterEncoding=UTF-8
    username: root
    password: root

包扫描配置、实体类

java 复制代码
@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    private Long managerId;
    private LocalDateTime createTime;
}
java 复制代码
@SpringBootApplication
@MapperScan("com.mp.dao")
public class MyBatisPlusLessionApplication {

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

实现mapper接口

  • 使用**mybatisplus** 的增强接口 BaseMapper

    java 复制代码
    // BaseMapper的泛型一定要写,否则返回不了数据
    public interface UserMapper extends BaseMapper<User> {
    
    }

测试

java 复制代码
@SpringBootTest
class MyBatisPlusLessionApplicationTests {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void select() {
        **List<User> list = userMapper.selectList(null);// null指的是没有查询条件**
        list.forEach(System.out::println);
    }
}

返回数据成功

以下是BaseMapper中常用的方法:

方法名 描述
insert 插入一条记录
insertBatch 批量插入记录
deleteById 根据ID删除记录
deleteByMap 根据Map条件删除记录
delete 根据条件删除记录
updateById 根据ID更新记录
update 根据条件更新记录
selectById 根据ID查询记录
selectBatchIds 根据ID列表批量查询记录
selectByMap 根据Map条件查询一条记录
selectOne 查询满足条件的一条记录
selectCount 查询满足条件的记录数
selectList 查询满足条件的记录列表
selectMaps 查询满足条件的记录,返回Map列表
selectObjs 查询满足条件的记录,返回Object列表
selectPage 分页查询记录

基本使用

  • 日志配置

    yaml 复制代码
    logging:
      level:
        root: warn # 根日志
        com.mp.dao: trace # 指定包级别
      pattern:
        console: '%p%m%n' # 格式

Insert

java 复制代码
@Test
public void insert() {
    User user = new User();
    user.setName("刘东");
    user.setAge(21);
    user.setEmail("xiaohei@qq.com");
    user.setManagerId(1L);
    user.setCreateTime(LocalDateTime.now());
    int rows = userMapper.insert(user);
    System.out.println("影响记录数:"+rows);
}

运行结果,成功插入数据

注意:我们在set中并没有插入id,但是运行结果成功插入了一串id值,因为这是mybatis-plus基于雪花算法实现的自增id。

常用注解 @TableName、 @TableId、@TableFieId

java 复制代码
@Data
@TableName("mp_user")
public class User {
    @TableId
    private Long userId;
    @TableField("name")
    private String realName;
    private Integer age;
    private String email;
    private Long managerId;
    private LocalDateTime createTime;
}

**@TableName**用于指定实体类对应的数据库表名,如果不指定,就以类名作为映射关系

@TableId 注解来指定主键

@TableFieId 用于标识实体类中的字段与数据库表中的列的映射关系。

排除非表字段的三种方式

  1. transient 【不推荐】

    java 复制代码
    private transient String remark;

    不推荐在MyBatis Plus中使用Java语言中的**transient关键字来排除非表字段的原因是, transient关键字主要用于Java对象的序列化过程,用于标记不需要序列化的字段。但是,对于数据库操作而言, transient**关键字并不会影响字段的持久化行为,因为它只是在Java对象的序列化和反序列化过程中起作用。

  2. static 【不推荐】

    java 复制代码
    private static String remark;
  3. @TableField(exist = false) 【推荐】

    java 复制代码
    @TableField(exist = false)
    private static String remark;

    在进行数据库操作时,MyBatis-Plus会自动排除带有**@TableField(exist = false)**注解的非表字段,不会将它们包含在生成的SQL语句中。

相关推荐
~kiss~6 小时前
A Survey of On-Policy Distillation for LLMs 学习(一)
学习
小杨小杨、努力变强!8 小时前
python学习笔记
笔记·学习
Star(up up up)14 小时前
Redis Windows 安装教程:使用Windows 的 Redis 压缩包
redis·笔记·学习·程序人生·云原生·学习方法·改行学it
乌暮16 小时前
Spring AOP 与 Spring 事务:用大白话彻底理解原理与实践
java·数据库·spring boot·后端·sql·学习·spring
小荷才露尖尖角,早有蜻蜓立上头19 小时前
SpringBoot+QQ邮箱发送邮件
spring boot
蒸蒸yyyyzwd21 小时前
从邓明学习的后端笔记
笔记·学习
机器学习之心21 小时前
基于变量相关图与残差学习的 GCN 多变量回归方法——混凝土 28 天抗压强度预测
学习·回归·gcn
头发还在的女程序员21 小时前
Java在线租房系统源码解析:Spring Boot+Vue 3+UniApp房源管理与预约看房方案
java·vue.js·spring boot·租房小程序·租房系统·租房软件
FYKJ_201021 小时前
springboot同人周边订单管理系统48955-计算机毕业设计、课程设计
java·javascript·vue.js·spring boot·django·php·课程设计
Rabitebla1 天前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash