【MybatisPlus】快速入门

发布时间:2024年01月16日

在application.yaml中修改jdbc参数:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mp
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root

引入依赖:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

MybatisPlus提供了一个BaseMapper接口,其中已经实现了单表的CRUD:

在这里插入图片描述

我们自定义的Mapper只要实现了这个BaseMapper,就无需自己实现单表CRUD了。

泛型中的 User 就是与数据库对应的 Java 类(PO)。

MybatisPlus根据PO实体的信息来推断出表的信息,从而生成SQL的。默认情况下:

  • MybatisPlus会把PO实体的类名驼峰转下划线作为表名
  • MybatisPlus会把PO实体的所有变量名驼峰转下划线作为表的字段名,并根据变量类型推断字段类型
  • MybatisPlus会把名为id的字段作为主键
public interface UserMapper extends BaseMapper<User> {
}

编写测试类:

@SpringBootTest
class UserMapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    void testInsert() {
        User user = new User();
        user.setId(5L);
        user.setUsername("Lucy");
        user.setPassword("123");
        user.setPhone("18688990011");
        user.setBalance(200);
        user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");
        user.setCreateTime(LocalDateTime.now());
        user.setUpdateTime(LocalDateTime.now());
        userMapper.insert(user);
    }

    @Test
    void testSelectById() {
        User user = userMapper.selectById(5L);
        System.out.println("user = " + user);
    }

    @Test
    void testSelectByIds() {
        List<User> users = userMapper.selectBatchIds(List.of(1L, 2L, 3L, 4L, 5L));
        users.forEach(System.out::println);
    }

    @Test
    void testUpdateById() {
        User user = new User();
        user.setId(5L);
        user.setBalance(20000);
        userMapper.updateById(user);
    }

    @Test
    void testDelete() {
        userMapper.deleteById(5L);
    }
}

上面说到 MybatisPlus 会自动把PO实体的类名驼峰转下划线作为表名。但是如果我们在数据库字段本身就使用了驼峰命名,那么就需要关闭自动转换配置。

mybatis-plus:
  configuration:
    map-underscore-to-camel-case: false

在这里插入图片描述
常用注解:

以下是Mybatisx自动生成的model。包含常用注解:@TableName,@TableId, @TableField。

/**
 * 用户表
 * @TableName user
 */
@TableName(value ="user")
@Data
public class User implements Serializable {
    /**
     * 
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 用户昵称
     */
    private String username;

    /**
     * 账号
     */
    private String userAccount;

    /**
     * 用户头像
     */
    private String avatarUrl;

    /**
     * 性别
     */
    private Integer gender;

    /**
     * 密码
     */
    private String userPassword;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 状态 0-正常
     */
    private Integer userStatus;

    /**
     * 电话
     */
    private String phone;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;

    /**
     * 是否删除
     */
    @TableLogic
    private Integer isDelete;

    /**
     * 用户角色 0 - 普通用户 1 - 管理员
     */
    private Integer userRole;

    /**
     * 用户编号
     */
    private String userCode;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}

@Tablename:

  • 描述:表名注解,标识实体类对应的表
  • 使用位置:实体类

TableName注解除了指定表名以外,还可以指定很多其它属性:

在这里插入图片描述

@TableId:

  • 描述:主键注解,标识实体类中的主键字段
  • 使用位置:实体类的主键字段

TableId注解支持两个属性:

在这里插入图片描述

IdType支持的类型有:

在这里插入图片描述

@TableField:

描述:普通字段注解

一般情况下我们并不需要给字段添加@TableField注解,一些特殊情况除外:

  • 成员变量名与数据库字段名不一致
  • 成员变量是以isXXX命名,按照JavaBean的规范,MybatisPlus识别字段时会把is去除,这就导致与数据库不符。
  • 成员变量名与数据库一致,但是与数据库的关键字冲突。使用@TableField注解给字段名添加转义字符:``

支持的其它属性如下:

在这里插入图片描述

其他相关配置:MybatisPlus配置

比如逻辑删除:

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: isDelete # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
文章来源:https://blog.csdn.net/XiugongHao/article/details/135615123
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。