目录:
(1)更新操作
(2)自动填充处理
这里的设置跟上一篇的一样,使用上一篇中的项目:
(1)更新操作
测试类:
package com.kuang;
import com.kuang.mapper.UserMapper;
import com.kuang.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class MybatisPlusApplicationTests {
//测试,我们没有写任何CRUD,测试我们能不能使用
//继承了BaseMapper,所有的方法都来自父类,我们也可以编写自己的扩展方法
@Autowired
private UserMapper userMapper;
//更新测试
public void testUpdate(){
User user=new User();
//根据条件自动拼接动态sql
user.setId(6L);
user.setName("关注公众号:狂神说");
user.setAge(18);
//注意:updateById 但是参数是一个对象!通过主键id进行更新
int i=userMapper.updateById(user);
System.out.println(i);
}
}
运行之前数据库中的表:
运行更新测试:
运行之后数据库中的表:
(2)自动填充处理
添加字段处理注解:@TableField
package com.kuang.pojo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
//对应数据库中的主键(主键策略:uuid、自增id、雪花算法、redis、zookeeper)
@TableId(type = IdType.AUTO) //一旦手动输入id之后,就需要自己配置id了
private Long id;
private String name;
private Integer age;
private String email;
//字段添加填充内容
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
设置处理器来处理这个处理字段注解:
当进行插入了,插入时填充策略会自动帮你,通过反射去读取哪些有注解对应的值,会自动帮你把createTime添加一个new Date的值
MyMetaObjectHandler类:
package com.kuang.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 sun.rmi.runtime.Log;
import java.util.Date;
@Slf4j //注解添加日志
@Component //注解,加入spring容器创建对象
public class MyMetaObjectHandler implements MetaObjectHandler {
//插入时的填充策略
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill");
//设置字段的值
//setFieldValByName(String fieldName, Object fieldVal, 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);
}
}
测试类:
package com.kuang;
import com.kuang.mapper.UserMapper;
import com.kuang.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class MybatisPlusApplicationTests {
//测试,我们没有写任何CRUD,测试我们能不能使用
//继承了BaseMapper,所有的方法都来自父类,我们也可以编写自己的扩展方法
@Autowired
private UserMapper userMapper;
//查询测试
@Test
void contextLoads() {
//参数是一个Wapper,条件构造器,类似sql我们要编写的条件,这里我们先不用 null,没有条件,查询所有的用户
//查询全部用户
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
}
//插入测试
@Test
public void testInsert(){
User user=new User();
user.setId(6L);
user.setName("狂神说Java2");
user.setAge(3)
int result=userMapper.insert(user);//这里我们没有设置id,帮助我们自动的生成id
System.out.println(result);//受影响的行数
System.out.println(user);//发现,id会自动回填
}
//更新测试
@Test
public void testUpdate(){
User user=new User();
//根据条件自动拼接动态sql
//注意:updateById 但是参数是一个对象! 通过主键id进行更新
int i=userMapper.updateById(user);
System.out.println(i);
}
}
测试插入:
测试更新:数据库update_time的时间发生了改变