MyBatis-Plus篇-(二)通用CRUD(HelloWorld)
发布日期:2021-05-14 16:24:32 浏览次数:23 分类:精选文章

本文共 3979 字,大约阅读时间需要 13 分钟。

Mybatis Plus(MP)通用CRUD操作指南


1. 基于Mybatis_PLUS(MP)的CRUD实现

我的目标是帮助开发者熟悉基于Mybatis Plus快速构建通用CRUD操作的实现方法。以下将从插入、更新、查询和删除四个方面详细说明。


2. 插入操作

2.1 单插入操作

@Test
public void testCommonInsert() {
Employee employee = new Employee("ursula", "ursula@qq.com", 1, 22);
Integer result = employeeMapper.insert(employee);
System.out.println("插入结果:" + result);
}

注意事项:

  • 使用@TableId注解指定主键字段和主键策略。如果属性名与数据库列名一致,可以省略注解。

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
  • 使用@TableName注解进行表名映射。如果类名和表名不一致,可以手动指定。

    @TableName(value = "tbl_employee")
    public class Employee {
    // ...其他字段
    }
  • 全局策略配置

    • 全局主键策略配置可避免每个类都需要添加注解。
    • 表前缀策略设置可以统一管理表名。
  • 验证字段是否为空。对于自动生成的主键,不会插入空值字段,而其他字段需手动处理。


2.2 插入所有字段

使用insertAllColumn方法确保所有字段都被插入,无论是否为空。

@Test
public void testCommonInsert() {
Employee employee = new Employee("ursula", "ursula@qq.com", 1, 22, 99.5);
Integer result = employeeMapper.insertAllColumn(employee);
System.out.println("插入结果:" + result);
}

注意事项:

  • insertAllColumn方法会强制将所有字段插入,包括空值字段。

3. 更新操作

3.1 更新单条记录

@Test
public void testCommonUpdate() {
Employee employee = new Employee(6, "cvzhanshi", "cvzhanshi@163.com", 1, 22);
Integer result = employeeMapper.updateById(employee);
System.out.println("更新结果:" + result);
}

注意事项:

  • updateById方法会根据实体类中非空属性插入更新语句。

    UPDATE tbl_employee 
    SET age = 22,
    last_name = 'cvzhanshi'
    WHERE id = 6;
  • 如果需要更新所有字段,可以使用updateAllColumnById方法。


3.2 更新所有字段

@Test
public void testCommonUpdate() {
Employee employee = new Employee(6, "cvzhanshi", "cvzhanshi@163.com", 1, 22);
Integer result = employeeMapper.updateAllColumnById(employee);
System.out.println("更新结果:" + result);
}

注意事项:

  • updateAllColumnById方法会强制将所有字段更新,不管是否为空。

4. 查询操作

4.1 根据主键查询单条记录

@Test
public void testCommonSelect() {
Employee employee = employeeMapper.selectById(6);
System.out.println("查询结果:" + employee);
}

4.2 根据实体封装条件查询

使用selectOne方法,通过实体中的非空属性构造查询条件。

@Test
public void testCommonSelect() {
Employee employee = new Employee();
employee.setId(6);
employee.setLastName("cvzhanshi");
employee.setGender(1);
Employee employee2 = employeeMapper.selectOne(employee);
System.out.println("查询结果:" + employee2);
}

注意事项:

  • selectOne方法返回的结果只能是0或1条记录。如果存在多个匹配结果,会抛出异常。

4.3 批量查询多个记录

@Test
public void testCommonSelect() {
List
idList = Arrays.asList(4, 5, 6);
List
employees = employeeMapper.selectBatchIds(idList);
System.out.println("查询结果:" + employees);
}

4.4 根据条件映射查询

使用selectByMap方法,通过传入的列名和值构造查询条件。

@Test
public void testCommonSelect() {
Map
columnMap = new HashMap<>();
columnMap.put("last_name", "ursula");
List
employees = employeeMapper.selectByMap(columnMap);
System.out.println("查询结果:" + employees);
}

注意事项:

  • columnMap的键必须是数据库表中的列名,而不是JavaBean的属性名。

4.5 分页查询

@Test
public void testCommonSelect() {
List
employees = employeeMapper.selectPage(new Page<>(3, 2), null);
System.out.println("查询结果 BracePage:" + employees);
}

注意事项:

  • Page对象的第一个参数为页码,第二参数为每页行数。

5. 删除操作

5.1 根据主键删除单条记录

@Test
public void testCommonDelete() {
Integer result = employeeMapper.deleteById(4);
System.out.println("删除结果:" + result);
}

5.2 根据条件映射进行删除

@Test
public void testCommonDelete() {
Map
columnMap = new HashMap<>();
columnMap.put("last_name", "ursula");
columnMap.put("email", "ursula@qq.com");
Integer result = employeeMapper.deleteByMap(columnMap);
System.out.println("删除结果:" + result);
}

5.3 批量删除多个记录

@Test
public void testCommonDelete() {
List
idList = Arrays.asList(3, 6);
Integer result = employeeMapper.deleteBatchIds(idList);
System.out.println("删除结果:" + result);
}

6. Mybatis Plus启动机制原理解析

在MP启动时,会自动分析Mapper接口中的方法并分析对应的SQL语句。

  • BaseMapper提供通用的CRUD方法,selectByIdupdateById等。

  • MapperProxy通过SqlSession执行CRUD操作。

  • MappedStatement保存每个方法对应的SQL定义,配置在Configuration中。


  • 7. 小结

    通过以上方法,可以像普通的ORM框架一样快速完成CRUD操作。MP内置的BaseMapper提供了17种通用方法,覆盖了单表CRUD需求,减少了手动编写繁琐的SQL语句和处理业务逻辑的开销。

    上一篇:MyBatis-Plus篇-(三)条件构造器 EntityWrapper & ActiveRecord(活动记录)
    下一篇:MyBatis-Plus篇-(一)简介&集成MP环境

    发表评论

    最新留言

    关注你微信了!
    [***.104.42.241]2025年04月19日 18时09分36秒