码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2021-06-25 16:49:17      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:inpu   artifact   数据库驱动   com   ssi   tar   nts   生成   完成   

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.快速入门,主键策略以及自动填充

标签:inpu   artifact   数据库驱动   com   ssi   tar   nts   生成   完成   

原文地址:https://www.cnblogs.com/wuyimin/p/14928728.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!