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)

引入依赖

<!--已包含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已经配置了,所以不需要再写了。

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

包扫描配置、实体类

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

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

实现mapper接口

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

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

测试

@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 分页查询记录

基本使用

  • 日志配置

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

Insert

@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

@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 【不推荐】

    private transient String remark;
    

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

  2. static 【不推荐】

    private static String remark;
    
  3. @TableField(exist = false) 【推荐】

    @TableField(exist = false)
    private static String remark;
    

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

热门相关:我寄人间   唐枭   我有一张沾沾卡   凤逆天下:腹黑魔君妖娆后   隐身侍卫