MyBatis-Plus 笔记:Service 和注解部分

1. 通用 Service

MyBatis-Plus 提供了通用的 Service 接口 IService 和其实现类 ServiceImpl,封装了常见的业务层逻辑,简化开发。

1.1 创建 Service 接口和实现类
  • 接口定义

    public interface UserService extends IService<User> {
    }
  • 实现类

    @Service
    public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    }
1.2 常用方法
  • 查询记录数

    @Test
    public void testCount() {
        long count = userService.count();
        System.out.println("记录数:" + count);
    }
  • 批量插入

    @Test
    public void testSaveBatch() {
        List<User> users = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            User user = new User();
            user.setName("user" + i);
            user.setAge(20 + i);
            users.add(user);
        }
        userService.saveBatch(users);
    }
2. 常用注解

MyBatis-Plus 提供了一系列注解,用于简化开发。

2.1 @TableName
  • 作用:标识实体类对应的数据库表名。

  • 示例

    @TableName("t_user")
    public class User {
        private Long id;
        private String name;
        private Integer age;
        private String email;
    }
  • 全局配置表前缀

    mybatis-plus:
      global-config:
        db-config:
          table-prefix: t_
2.2 @TableId
  • 作用:标识主键字段。

  • 示例

    public class User {
        @TableId(type = IdType.AUTO)
        private Long id;
        private String name;
    }
  • 主键策略

    • IdType.ASSIGN_ID:默认,基于雪花算法生成 ID。

    • IdType.AUTO:数据库自增 ID。

2.3 @TableField
  • 作用:标识非主键字段,解决字段名不一致问题。

  • 示例

    public class User {
        @TableField("username")
        private String name;
    }
2.4 @TableLogic
  • 作用:实现逻辑删除。

  • 步骤

    1. 数据库添加字段 is_deleted,默认值为 0。

    2. 实体类添加注解:

      java

      @TableLogic
      private Integer isDeleted;
    3. 测试删除时,实际执行的是更新操作:

      sql

      UPDATE t_user SET is_deleted=1 WHERE id=? AND is_deleted=0
3. 条件构造器

MyBatis-Plus 提供了 QueryWrapper 和 LambdaQueryWrapper 用于构建查询条件。

3.1 QueryWrapper
  • 示例

    @Test
    public void testQueryWrapper() {
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.like("name", "a")
               .between("age", 10, 24)
               .isNotNull("email");
        List<User> users = userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }
3.2 LambdaQueryWrapper
  • 示例

    @Test
    public void testLambdaQueryWrapper() {
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(User::getName, "a")
               .ge(User::getAge, 10)
               .le(User::getAge, 24);
        List<User> users = userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }
4. 乐观锁

通过 @Version 注解实现乐观锁。

4.1 实现步骤
  1. 数据库添加 version 字段。

  2. 实体类添加注解:

    @Version
    private Integer version;
  3. 配置乐观锁插件:

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
5. 多数据源

适用于多库、读写分离等场景。

5.1 配置
spring:
  datasource:
    dynamic:
      primary: master
      datasource:
        master:
          url: jdbc:mysql://localhost:3306/mybatis_plus
          username: root
          password: 123456
        slave_1:
          url: jdbc:mysql://localhost:3306/mybatis_plus_1
          username: root
          password: 123456
5.2 使用
  • Service 类注解

    @DS("master")
    @Service
    public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    }
    
    @DS("slave_1")
    @Service
    public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {
    }
总结
  • Service:通过 IService 和 ServiceImpl 快速实现通用 CRUD。

  • 注解@TableName@TableId@TableField@TableLogic 简化实体类与表的映射。

  • 条件构造器QueryWrapper 和 LambdaQueryWrapper 灵活构建查询条件。

  • 乐观锁:通过 @Version 实现并发控制。

  • 多数据源:通过 @DS 注解轻松切换数据源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值