1.主键生成策略
配置主键自增:
①实体类字段加上(@TableId(type=IdType.AUTO))
②数据库字段一定要自增
其余的源码解释:
public enum IdType{ AUTO(0),//自增 NONE(1),//未设置主键 INPUT(2),//手动输入 ID_WORK(3),//默认全局唯一id UUID(4),//全局唯一id uuid ID_WORK_STR(5);//字符串表示法 }
2.插入操作
public void testInsert(){ User user=new User(); user.setName("zhangsan"); user.setAge(12); user.setEmail("123@abc.com"); int insert = userMapper.insert(user);//自动生成id System.out.println(user); }
3.更新操作
public void testUpdate(){ //通过条件自动拼接sql UPDATE user SET age=?, email=? WHERE id=? User user=new User(); user.setId((long)1); user.setEmail("1234@abc.com"); //参数是一个对象 int update = userMapper.updateById(user); System.out.println(update); }
更新null值,无法通过实体更新,只能使用warrpper的Set实现
如想把上例中的email改为空值。
LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.set(User::getEmail,""); updateWrapper.eq(User::Id,1L);
userService.update(updateWrapper); //或者userMapper.update(null,updateWrapper);
4.自动填充
创建时间,修改时间,这种操作一般都是自动填充。
阿里开发手册:所有数据库表gmt_create,gmt_modified几乎所有表都要配置上,而且需要自动化。
方式一:数据库级别(给字段赋初值)
方式二:代码级别
public enum FieldFill{ DEFAULT, INSERT, UPDATE, INSERT_UPDATE; }
①实体类字段属性上增加注解
//自段添加填充 @TableField(fill= FieldFill.INSERT) private Date createTime; @TableField(fill=FieldFill.INSERT_UPDATE) private Date updateTime;
②编写处理器来处理这个注解
新建处理类,继承接口MetaObjectHandler,重写填充方法
package com.example.demo.handler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; @Slf4j @Component//一定不要忘记把处理器加到IOC容器中 public class MyMetaObjectHandler implements MetaObjectHandler { //插入时的填充策略 @Override public void insertFill(MetaObject metaObject) { log.info("start insert fill ..."); //setFieldValByName(String fieldName,Object fieldValue,MetaObject metaObject)填充字段名,字段填充值,要给哪个值处理 this.setFieldValByName("createTime",new Date(),metaObject); this.setFieldValByName("updateTime",new Date(),metaObject); } //更新的填充策略 @Override public void updateFill(MetaObject metaObject) { log.info("start update fill ..."); this.setFieldValByName("updateTime",new Date(),metaObject); } }
测试插入
@Test public void testInsert(){ User user=new User(); user.setName("zhangsan"); user.setAge(12); user.setEmail("123@abc.com"); int insert = userMapper.insert(user);//自动生成id System.out.println(user); }
所有博客均为自己学习的笔记。如有错误敬请理解。