CRUD之C字决(添加)
- 在入门的基础上
- 样例
@SpringBootTest
class MybatisPlusFastStartApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void testInsert(){//自带id添加算法
User user = new User();
user.setAge(45).setName("KittyGuy").setEmail("*****@qq.com");
userMapper.insert(user);
System.out.println(Arrays.toString(userMapper.selectList(null).toArray()));
}
}
复制代码
要点
-
关于主键id,如果不主动添加,MP会默认使用雪花算法+UUID(不含中划线),添加id
-
pojo
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)//开启链式
public class User {
@TableId(type = IdType.AUTO)//ID_WORKER已过时,作者建议使用ASSIGN_ID。AUTO自增
private Long id;
private String name;
private Integer age;i
private String email;
}
复制代码
- 注解
@TableId(type = "")
,用在实体类的字段上,表明id生成策略,
CRUD之U字诀(更新)
- 样例
@SpringBootTest
class MybatisPlusFastStartApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void testQuery() { //参数是Wrapper
List<User> list = userMapper.selectList(null);
System.out.println(Arrays.toString(list.toArray()));
}
@Test
void testUpdate(){
User user = new User(5L,"me",777,"test@qq.com");
userMapper.updateById(user);
testQuery();
}
}
复制代码
字段自动填充
- 需求:在进行更新和插入操作时,顺带写入插入(creat_Time)和更新时间(update_Time)
先在数据库中创建两个字段(
creat_Time
)和(update_Time
)
- 代码
pojo
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)//开启链式
public class User {
// @TableId(type = IdType.AUTO)//ID_WORKER已过时,作者建议使用ASSIGN_ID。AUTO自增
private Long id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT_UPDATE)//插入和更新时填充字段
private Date updateTime;
@TableField(fill = FieldFill.INSERT)//插入时填充字段
private Date createTime;
}
复制代码
编写元对象字段填充控制器MetaObjectHandler
@Component//必须添加到IOC容器 //元对象字段填充控制器抽象类,实现公共字段自动写入
public class MyMetaObjectHandler implements MetaObjectHandler {
//插入时的填充策略
@Override
public void insertFill(MetaObject metaObject) {
/*
通用填充
参数:
fieldName – java bean property name
fieldVal – java bean property value
metaObject – meta object parameter
*/
this.setFieldValByName("createTime",new Date(),metaObject);
updateFill(metaObject);
}
//更新时的填充策略
@Override
public void updateFill(MetaObject metaObject) {
//ForMatter都不要了!!
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
复制代码
test
@SpringBootTest
class MybatisPlusFastStartApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void testQuery() { //参数是Wrapper
List<User> list = userMapper.selectList(null);
System.out.println(Arrays.toString(list.toArray()));
}
@Test
void testInsert(){//自带id添加算法
User user = new User();
user.setAge(45).setName("KittyGuy").setEmail("*****@qq.com");
userMapper.insert(user);
System.out.println(Arrays.toString(userMapper.selectList(null).toArray()));
}
@Test
void testUpdate(){
User user = new User();
user.setAge(77)
.setName("mmgg")
.setId(1383720015207952386L);
userMapper.updateById(user);
testQuery();
}
}
复制代码
bug收集
插入的时间都是00:00:00,是代码字段的数据类型和数据库中的不匹配,将数据库中的时间字段改成timestamp
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END