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.快速入门,主键策略以及自动填充的主要内容,如果未能解决你的问题,请参考以下文章