Mybatis-Plus~CURD
1.实体类中设置属性
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@TableId(type = IdType.ASSIGN_ID)//必须数据库也是递增
private Long id;
//如果列名属性不同
@TableField(value = "u_name")
private String name;
private Integer age;
private String email;
@TableLogic
private Integer deleted;
}
测试:在Tests类中
/**
* 查询数据
*/
@Test
public void selectId(){
//根据id查询信息
User user=userMapper.selectById(1);
System.out.println(user);
}
/**
* 新增信息
*/
@Test
public void testInsert(){
//雪花算法针对的分布式id生成策略
User user = new User(null, "旺旺", 18, "121@qq.com", 0);
int row = userMapper.insert(user);
System.out.println(row);
}
/**
* 逻辑删除
*/
@Test
public void testDelete(){
int i = userMapper.deleteById(4);
System.out.println(i);
}
/**
* 修改数据
*/
@Test
public void testUpdate(){
User user = new User(4L, "小蛮鹅", 18, "121@qq.com", 0);
userMapper.updateById(user);
System.out.println();
}
注意:
/**
* 逻辑删除:只对自动注入的sql起效
* 插入: 不作限制
* 查找: 追加where条件过滤掉已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
* 更新: 追加where条件防止更新到已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
* 删除: 转变为 更
*/
2.修改/新增时:时间自动填充
//在实体类相应的属性字段上添加一下注解
@TableField(fill = FieldFill.INSERT) //只有在填充的时候该字段才会自动填充
private Data createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Data updateTime;
3.创建一个自动装配类
@Configuration //表示该类为配置类
public class MybatisPlusConfig implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
/**
* 为那个字段自动填充
*/
this.strictInsertFill(metaObject, "createTime", Date.class,new Date()); // 起始版本 3.3.0(推荐使用)
this.strictInsertFill(metaObject, "updateTime", Date.class,new Date()); // 起始版本 3.3.0(推荐使用)
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "updateTime", Date.class,new Date()); // 起始版本 3.3.0(推荐使用)
}
}
4.测试
/**
* 新增数据
*/
@Test
public void testInsert(){
//雪花算法针对的分布式id生成策略
User user = new User(null, "旺旺", 18, "121@qq.com", 0);
int row = userMapper.insert(user);
System.out.println(row);
}
/**
* 修改数据
*/
@Test
public void testUpdate(){
User user = new User(5L, "仔仔", 19, "121@qq.com", 0);
userMapper.updateById(user);
System.out.println();
}
/**
* 条件查询
*/
@Test
public void testSelectByCondication(){
//warpper:条件的包装类
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.between("age",12,18);
wrapper.or();
wrapper.like("u_name","徐");//模糊查询
wrapper.orderByDesc("age");//通过年龄降序排序
wrapper.select("count(*)");//统计数据条数
wrapper.groupBy("u_name");//通过名字分组
List<User> users=userMapper.selectList(wrapper);
System.out.println(users);
}
/**
* 分页查询,而且必须配置分页插件
*/
@Test
public void testSelectByPage(){
/**
* page:但钱页码 每页显示的条数
*/
Page<User> page = new Page<>(3, 4);
Page<User> page1 = userMapper.selectPage(page, null);
System.out.println("当前的总页码:"+page1.getPages());
System.out.println("总条数:"+page1.getTotal());
System.out.println("当前页的记录:"+page1.getRecords());
}