1.Insert
@Test
public void testInsert(){
User user = new User();
user.setName("黄凯宇");
user.setAge(18);
user.setEmail("1024955508@qq.com");
int rs = userMapper.insert(user);
System.out.println(user);
System.out.println("结果=》"+rs);
}
我们实例化对象时并没有设置主键id,但是输出对象时id已经存在
数据库插入的id的默认值为:全局的唯—id
主键生成策略
public enum IdType {
AUTO,
INPUT,
ID_WORKER,
UUID,
NONE;
**
}
AUTO: 我们需要配置主键自增
- 在实体类字段上配置
@TableId(type = IdType.AUTO)
INPUT :手动输入id 需要自己写id
? 不设置id为空
2.update
@Test
public void testUpdate(){
User user=new User();
user.setId(1L);
user.setName("alibaba");
int rs = userMapper.updateById(user);
System.out.println(user);
System.out.println("结果=》"+rs);
}
3.自动填充
创建时间、更改时间! 这些操作一般都是自动化完成,我们不希望手动更新
阿里巴巴开发手册︰几乎所有的表都要配置 gmt_create、gmt_modified !而且需要自动化
方式一:数据库级别(工作中一般不允许修改数据库)
1、在表中增加字段:create_time,update_time
2、我们需要在实体类中同步字段名!
private Date createTime;
private Date updateTime;
3.测试并查看结果
方式二:代码级别
1、删除数据库的默认值CURRENT_TIMESTAMP !
2、实体类字段属性上需要增加注解@TableField
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
3、编写处理器来处理这个注解即可!
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("==start insert ······==");
this.setFieldValByName("createTIme",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("==start update ······==");
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
插入时,createTIme和updateTime一同更新
更新时,只有updateTime更新
4.乐观锁&悲观锁
乐观锁:顾名思义十分乐观,他总是认为不会出现问题,无论干什么都不上锁!如果出现了问题,再次更新值测试
悲观锁:顾名思义十分悲观,他总是认为出现问题,无论干什么都会上锁!再去操作!
乐观锁实现方式:
-
取出记录时,获取当前version -
更新时,带上这个version -
执行更新时,set version = newVersion where version = oldVersion -
如果version不对,就更新失败
update user set name = "wsk",version = version+1
where id = 1 and version = 1
update user set name = "wsk",version = version+1
where id = 1 and version = 1
测试一下Mybatis-Plus乐观锁插件
1、给数据库中增加version字段
2、实体类加对应的字段
@Version
private Integer version;
3、注册组件
@MapperScan("com.huang.mapper")
@EnableTransactionManagement
@Configuration
public class MyBatisPlusConfig {
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
}
4、测试
public void testOpimisticLocker(){
User user = userMapper.selectById(1L);
user.setAge(18);
user.setEmail("1024955508@qq.com");
userMapper.updateById(user);
}
|