MyBatisPlus

本文详细介绍了MyBatisPlus框架中的常用注解,如@TableName用于指定表名、@TableId定义主键策略,以及雪花算法确保分布式主键生成的有序性和唯一性。此外,还涵盖了分页插件和乐观锁插件的使用方法,以及如何配置多数据源以支持不同的数据库连接。
摘要由CSDN通过智能技术生成

1. MyBatisPlus常用注解

@TableName

@TableName("t_user")
public class User {}

也可通过全局配置:

mybatis-plus:
  global-config:
    db-config:
      table-prefix: t_  # 配置MyBatis-Plus操作表的默认前缀

@TableId

    @TableId(value = "uid", type = IdType.AUTO) // 通过@TableId将其标识为主键
    private Long id;
    //@TableId注解的value属性,指定表中的主键字段;type属性用来定义主键策略

常用的主键策略:
在这里插入图片描述
也可全局配置主键策略

mybatis-plus:
  global-config:
    db-config:
      table-prefix: t_  # 配置MyBatis-Plus操作表的默认前缀
      id-type: auto # 配置MyBatis-Plus的主键策略

雪花算法:

雪花算法是分布式主键生成算法,它能够保证不同表的主键的不重复性,以及相同表的主键的有序性。
①核心思想:
长度共64bit(一个long型)。
1bit标识一个符号位,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0。
41bit时间截(毫秒级),存储的是时间截的差值(当前时间截 - 开始时间截),结果约等于69.73年。
10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID,可以部署在1024个节点)。
12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID)。
②优点:整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞,并且效率较高。

@TableField

    @TableField("user_name") // 使用@TableField("username")设置属性所对应的字段名
    private String name;

@TableLogic

    @TableLogic
    private Integer isDeleted;

@EnumValue

// 使用通用枚举时使用该注解
@Getter
public enum SexEnum {
    MALE(1, "男"),
    FEMALE(2, "女");
    @EnumValue // 表示将@EnumValue表示的字段作为值存入数据库
    private final Integer sex;
    private final String sexName;

    SexEnum(Integer sex, String sexName) {
        this.sex = sex;
        this.sexName = sexName;
    }
}

@Version

// 使用乐观锁插件时使用该注解
@Data
public class Product {
    private Long id;
    private String name;
    private Integer price;
    @Version // 表示乐观锁字段
    private Integer version;
}

@DS

使用多数据源配置时使用;可以注解在类上或方法上;需要引入依赖:

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.0</version>
        </dependency>
import com.baomidou.dynamic.datasource.annotation.DS;

@Service
@DS("master") // 指定访问的数据源,value值为yml中配置的数据源信息
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
#多数据源配置参考:
spring:
  # 配置数据源信息
  datasource:
    dynamic:
      # 设置默认的数据源或者数据源组,默认值即为master
      primary: master
      # 严格匹配数据源,默认false.true未匹配到指定数据源时抛异常,false使用默认数据源
      strict: false
      datasource:
        master:
          url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
          driver-class-name: com.mysql.cj.jdbc.Driver
          username: root
          password: 123456
        slave_1:
          url: jdbc:mysql://localhost:3306/mybatis_plus_1?characterEncoding=utf-8&useSSL=false
          driver-class-name: com.mysql.cj.jdbc.Driver
          username: root
          password: 123456

2. MyBatisPlus插件

2.1 分页插件

MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能

@Configuration
@MapperScan("com.atguigu.mybatisplus.mapper") //可以将主类中的注解移到此处
public class MyBatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {

        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

使用方法

    @Test
    public void testSelectPage() {
        Page<User> page = new Page<>(1, 2);
        userMapper.selectPage(page, null);
        System.out.println(page);
    }

xml自定义分页

@Repository
public interface UserMapper extends BaseMapper<User> {
    /**
     * @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位
     */
    Page<User> selectPageVo(@Param("page") Page<User> page, @Param("age") Integer age);
}
    <select id="selectPageVo" resultType="com.atguigu.mybatisplus.pojo.User">
        select * from t_user where age > #{age}
    </select>

2.2 乐观锁插件

乐观锁实现流程

数据库中添加version字段,取出记录时,获取当前version

SELECT id,`name`,price,`version` FROM product WHERE id=1

更新时,version + 1,如果where语句中的version版本不对,则更新失败

UPDATE product SET price=price+50, `version`=`version` + 1 WHERE id=1 AND `version`=1

Mybatis-Plus实现乐观锁

添加乐观锁插件配置

@Configuration
@MapperScan("com.atguigu.mybatisplus.mapper")
public class MyBatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {

        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //添加分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        //添加乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}
@Data
public class Product {
    private Long id;
    private String name;
    private Integer price;
    @Version // 表示乐观锁字段
    private Integer version;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值