mybatis-plus的添加与修改
mybaits-plus帮我们简化了CRUD,这次来说一下添加与修改的操作由于我们所有的 SQL 是不可见的,我们希望知道他是怎么执行的,所以我们必须要看日志。在properties中添加日志功能:mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl配置日志完毕之后,后面的学习就需要注意这个自
mybaits-plus帮我们简化了CRUD,这次来说一下添加与修改的操作
由于我们所有的 SQL 是不可见的,我们希望知道他是怎么执行的,所以我们必须要看日志。
在properties中添加日志功能:
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
配置日志完毕之后,后面的学习就需要注意这个自动生成的SQL
插入操作
@Test
public void testInsert(){
User user = new User();
user.setName("java2");
user.setAge(31);
user.setEmail("13434423@qq.com");
int result = userMapper.insert(user);// 帮我们自动生成 id
System.out.println(result); // 受影响的行数
System.out.println(user); // 发现,id会自动回填
}
数据库插入的 id 默认值为:全局的唯一 id
主键生成策略
分布式系统唯一 id 生成
这里主键是通过一个雪花算法进行完成的。
主键自增
我们需要配置主键自增
- 实体类上
@TableId(type= IdType.AUTO)
- 数据库字段一定要是自增的!
- 再次插入即可!
补充:主键自增是一种形式,还可以有其他的形式
- NONE(1) 未设置主键
- INPUT(2) 手动输入主键
- ID_WORKER(3) 默认的全局唯一 id
- UUID(4) 全局唯一 id uuid
- ID_WORKER_STR(5) 字符串表示法
更新操作
// 测试更新
@Test
public void testUpdate(){
User user = new User();
// 通过条件自动拼接动态 sql
user.setId(3L);
user.setName("ABCD");
user.setAge(18);
// 注意:updateById 但是参数是一个 对象!!!
int i = userMapper.updateById(user);
System.out.println(i);
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210219161620154.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzI2MTQz,size_16,color_FFFFFF,t_70#pic_center)
}
所有的 SQL 都是自动帮我们动态匹配的
自动填充
我们在数据库表中经常会有这样的情况,数据添加与修改的时候需要被记录,每一次操作都需要有时间,所有我们利用自动填充来完成对时间的修改
创建时间,修改时间!这些个操作都要自动完成,不希望手动
这里我们直接用代码级别
给数据库表中添加 create_time
、update_time
两个字段
实体类上字段属性需要加上注解TableField(fill = FieldFill.INSERT)
@TableField(fill = FieldFill.INSERT) // 时间特有的注解
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
编写处理器来处理这个时间特有的注解即可
在工程建立 handler
包,创建一个 MyMetaObjectHandler
类
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
// 插入时的填充策略
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill.......");
// setFieldValByName(String fieldName, Object fieldVal, MetaObject meatObject)
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
// 更新时的填充策略
@Override
public void updateFill(MetaObject metaObject) {
log.info("start insert fill.......");
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
最后重新测试插入操作,重新测试更新操作,观察时间是否有所变化
更多推荐
所有评论(0)