1.快速入门,主键策略以及自动填充

Posted 一拳超人的逆袭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.快速入门,主键策略以及自动填充相关的知识,希望对你有一定的参考价值。

1.快速入门

1.1导入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
<!-- 数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
<!-- mybatis-plus是自己开发的,非官方,不要同时导入mybatis和mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1.tmp</version>
        </dependency>

1.2数据库的建立

1.3在主函数上使用注释扫描包

@MapperScan("com.wu.mapper")//扫描mapper文件夹
@SpringBootApplication
public class MybatisPlusApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisPlusApplication.class, args);
    }

}

1.4编写pojo类和接口注释

User

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @TableId(type= IdType.AUTO)//主键自增,数据库也需要自增

    private Long id;
    private String name;
    private Integer age;
    private String email;
    //这两个字段的更新也可以在代码中实现 需要注解
    //@TableField(fill= FieldFill.INSERT)
    private Date createTime;//驼峰命名
    //@TableField(fill= FieldFill.INSERT_UPDATE)
    private Date updateTime;
}

usermapper

//在对应的Mapper上面实现基本的接口BaseMapper
@Repository//代表持久层 或者@Mapper也行
public interface UserMapper extends BaseMapper<User> {
    //所有的CRUD操作就已经编写完成了
}

测试类(查增改)

@SpringBootTest
class MybatisPlusApplicationTests {
@Autowired
private UserMapper userMapper;//继承了baseMapper所有的方法都来自于父类,也可以自己扩展
    @Test
    void contextLoads() {
        //参数是一个wrapper,条件构造器,这里我们先用null
        val users = userMapper.selectList(null);//查询所有的用户
        users.forEach(System.out::println);
    }
    //测试插入
    @Test
    void testInsert() {
        User user=new User();
        user.setAge(4);
        user.setEmail("7777@qq.com");
        user.setName("吴某");
        int insert = userMapper.insert(user);//没有设置id,他帮我们自动生成了id
        System.out.println(insert);//1
        System.out.println(user.getId());//1408045409112195073(Long)
        //这里使用的是雪花算法生成id
        //SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:
        // 使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,
        // 且ID 引入了时间戳,基本上保持自增的。
    }
    //测试更新
    @Test
    void testUpdate(){
        User user=new User();
        user.setId(3L);
        user.setAge(2);
        user.setEmail("7777@qq.com");
        user.setName("吴某");
        userMapper.updateById(user);
    }

}

2.主键策略(在pojo类上增加@TableId注解)

对应数据库中的主键(uuid,自增,雪花算法,redis,zookeeper)

AUTO(0),数据库id自增

NONE(1),未设置主键

INPUT(2),手动输入

ASSIGN_ID(3),

ASSIGN_UUID(4), 

ID_WORKER(3),默认的全局id 不加注解就是他(雪花算法)

ID_WORKER_STR(3), id_worker的字符串表示法

UUID(4);全局唯一id

3.自动填充(数据库实现和代码实现)

3.1 数据库实现

3.2代码实现

3.2.1 在数据库中去除默认值

3.2.2 在pojo的相应字段加上注解

//这两个字段的更新也可以在代码中实现 需要注解
    @TableField(fill= FieldFill.INSERT)
    private Date createTime;//驼峰命名
    @TableField(fill= FieldFill.INSERT_UPDATE)
    private Date updateTime;

3.2.3 编写一个hander类具体实现

@Slf4j//日志的注解
@Component//记住把处理器加入到ioc容器中
public class MyMetaObjectHandler implements MetaObjectHandler {
    //插入时的填充策略
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("开始执行了");
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
    //更新时候的填充策略
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("开始处理了");
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}

 

以上是关于1.快速入门,主键策略以及自动填充的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis Plus 快速入门(2021.07.16)

MyBatis Plus 快速入门(2021.07.16)

MyBatis Plus 快速入门(2021.07.16)

MyBaitsPlus快速入门

MybatisPlus快速入门常用设置(表映射主键策略日志)基本使用

MyBatis-Plus