MybatisPlus-快速入门

介绍

官网介绍:简介 | MyBatis-Plus

作用:提高单表CRUD操作的效率

快速开始

实现下列功能:

  1. 新增用户功能
  2. 根据id查询用户
  3. 根据id批量查询用户
  4. 根据id更新用户
  5. 根据id删除用户

引入MybatisPlus的起步依赖

MyBatisPlus官方提供了starter,其中集成了Mybatis和MybatisPlus的所有功能,并且实现了自动装配效果。

因此我们可以用MybatisPlus的starter代替Mybatis的starter,也就是说,引入了下面这个依赖后就可以同时使用Mybatis和MybatisPlus:

XML 复制代码
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

定义Mapper

自定义的Mapper继承MybatisPlus提供的BaseMapper接口:

java 复制代码
public interface UserMapper extends BaseMapper<User> {

}

这个Mapper里什么都不用写,User是自定义的实体类,对应user表

演示(基于单元测试)

java 复制代码
@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 testQueryByIds() {
        List<User> users = userMapper.selectBatchIds(List.of(1L, 2L, 3L, 4L));
        users.forEach(System.out::println);
    }

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

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

新增用户功能:userMapper.insert(user);

根据id查询用户:userMapper.selectById(5L);

根据id批量查询用户:userMapper.selectBatchIds(List.of(1L, 2L, 3L, 4L));

根据id更新用户:userMapper.updateById(user);

根据id删除用户:userMapper.deleteById(5L);

解释

mp如何找到数据库中对应的表以及表内字段的?------3个约定

1.类名驼峰转下划线作为表名

例:类名User->表名user;类名UserInfo->表名user_info

2.名为id的字段作为主键

3.变量名驼峰转下划线作为表的字段名

例:类内变量名username->表内字段名username;类内变量名createTime->表内字段名create_time

常用注解

如果实体类和对应的表不满足3个约定,则需要用到注解来进行配置

MybatisPlus中比较常用的几个注解如下:

  • @TableName:用来指定表名
  • @Tableld:用来指定表中的主键字段信息
  • @TableField:用来指定表中的普通字段信息

@TableName

当实体类的类名和表名不满足约定时,在实体类上添加**@TableName("表名")**

@TableId

当实体类中主键对应的变量名不为id时,在该变量名上添加**@TableId(value = "id")**

@TableId还有3种type属性:

IdType枚举:

  • AUTO:数据库自增长
  • INPUT:通过set方法自行输入
  • ASSIGN_ID(默认):分配 ID,接口ldentifierGenerator的方法nextld来生成id,默认实现类为DefaultldentifierGenerator雪花算法

@TableField

使用@TableField的常见场景:

  • 成员变量名与数据库字段名不一致:@TableField("数据库字段名")
  • 成员变量名以is开头,且是布尔值:@TableField("数据库字段名")
  • 成员变量名与数据库关键字冲突(转义):@TableField("` 数据库字段名**`**")
  • 成员变量不是数据库字段:@TableField(exist = false)

常用配置

官网:配置 | MyBatis-Plus

大部分并不需要我们去配置,走默认就行,如果需要配置,可以查看官网或者通过idea的提示进行配置

相关推荐
Freak嵌入式3 分钟前
MicroPython+Pico 接收空闲中断和发送空闲中断全实战
java·开发语言·stm32·单片机·嵌入式硬件
重生之小比特4 分钟前
【初阶C++】string
开发语言·c++
计算机毕设定制辅导-无忧学长16 分钟前
《基于SpringBoot的图书管理系统设计与实现》
java·spring boot·后端
小蒜学长17 分钟前
借助于大模型工具Cursor的中药材交易系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
Arvin62718 分钟前
SonarQube 扫描 Maven 项目编译错误
java·maven·sonar
小玮看世界21 分钟前
[Python]动态规划三步走:从爬楼梯到打家劫舍,再到最大子数组和
开发语言·python·动态规划
lhldsg25 分钟前
宠物同城领养平台开发实战:从需求分析到上线部署指南
java·前端·小程序·需求分析·宠物
AI视觉网奇26 分钟前
3d子部件高亮选中
开发语言·javascript·3d
风萧萧199928 分钟前
JAVA :JSONObject转换为XML
xml·java·python
阿图灵29 分钟前
LangGraph 实战 03:Workflows 与 Agents——六种工作流模式与智能体实战(附 6 个可运行示例)
java·前端·javascript·工作流·ai agent·智能体·langgraph