MybatisPlus学习02——主键生成策略

    科技2025-07-24  6

    # 日志配置 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

    主键生成策略

    @TableId(type = IdType.AUTO)

    package com.song.pojo; import com.baomidou.mybatisplus.annotation.*; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; @Data @AllArgsConstructor @NoArgsConstructor public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; private String email; }

    源码分析

    public enum IdType { AUTO(0),//数据库的自增 注意在使用时 将数据库中的id字段设置为自增 NONE(1),//未设置主键 INPUT(2),//手动输入 ID_WORKER(3),//默认的全局唯一id UUID(4),//全局唯一id 主键类型为String ID_WORKER_STR(5);//字符串表示 }

    自动填充

    创建时间、修改时间!这些个操作一遍都是自动化完成的,我们不希望手动更新!

    // 字段添加填充内容 @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime;

    编写处理器来处理这个注解 :在这里我们编写了MyMetaObjectHandler类实现 MetaObjectHandler接口

    package com.song.handle; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; //加载到spring ioc 容器中 @Component //生成日志 @Slf4j public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { log.info("start insert fill ...."); this.setFieldValByName("createTime",new Date(),metaObject); this.setFieldValByName("updateTime",new Date(),metaObject); } @Override public void updateFill(MetaObject metaObject) { log.info("start update fill ...."); this.setFieldValByName("updateTime",new Date(),metaObject); } }

    分页查询和乐观锁

    //注解 乐观锁 @Version private int version;

    MybatisPlusConfig配置类

    package com.song.config; import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; //扫描mapper接口 @MapperScan("com.song.mapper") @EnableTransactionManagement @Configuration // 配置类 public class MybatisPlusConfig { // 注册乐观锁插件 @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); } //分页插件 @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } }

    测试

    //乐观锁操作(乐观锁:不管有没有问题 我先都不加锁 出了问题再去解决) @Test public void testVersion(){ User user = userMapper.selectById(1L); user.setName("a11"); user.setEmail("a11@qq.com"); userMapper.updateById(user); } //分页操作 @Test public void testPage(){ Page<User> page = new Page(1,3);//起始为1,当页有3条数据 userMapper.selectPage(page,null); page.getRecords().forEach(System.out::println); System.out.println(page.getTotal()); }

    CRUD相关操作

    package com.song; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.song.mapper.UserMapper; import com.song.pojo.User; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @SpringBootTest class MybatisPlusApplicationTests { @Autowired private UserMapper userMapper ; @Test void contextLoads() { //UserMapper中的 selectList() 方法的参数为 MP 内置的条件封装器 Wrapper,所以不填写就是无任何条件 List<User> userList = userMapper.selectList(null); userList.forEach(System.out::println); } //测试添加操作 @Test public void testInsert(){ User user = new User(); user.setName("bb"); user.setAge(20); user.setEmail("bb@qq.com"); int insert = userMapper.insert(user); System.out.println(insert); } //测试更新操作 @Test public void testUpdate(){ //帮我们实现了动态sql拼接 User user = new User(); user.setId(5L); user.setAge(16); userMapper.updateById(user); } //查询操作 //通过Id单个操作 @Test public void testSelectById(){ User user = userMapper.selectById(1L); System.out.println(user); } //通过selectBatchIds查询多个 @Test public void testSelectBatchIds(){ List<User> userList = userMapper.selectBatchIds(Arrays.asList(1, 2)); userList.forEach(System.out::println); } //通过map进行查询 @Test public void testSelectMap(){ Map<String,Object> map = new HashMap(); map.put("name","a11"); List<User> userList = userMapper.selectByMap(map); userList.forEach(System.out::println); } }
    Processed: 0.017, SQL: 8