1:首先创建数据库
2:导入需要的依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3:创建实体类
package com.dongmu.mybatisplus.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 {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT)
private Date create_time;
@TableField(fill = FieldFill.UPDATE)
private Date update_time;
}
4:创建mapper文件:
package com.dongmu.mybatisplus.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dongmu.mybatisplus.pojo.User;
public interface UserMapper extends BaseMapper<User> {
}
5:创建处理器类
package com.dongmu.mybatisplus.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class MymetaObjectHandler implements MetaObjectHandler {
/*插入时候的填充策略*/
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("create_time",new Date(),metaObject);
// this.setFieldValByName("update_time",new Date(),metaObject);
}
/*更新时候的填充策略*/
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("update_time",new Date(),metaObject);
}
}
在启动类上加上注解扫描包
package com.dongmu;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.dongmu.mybatisplus.mapper")
public class MybatisPlusApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisPlusApplication.class, args);
}
}
使用测试类进行测试
package com.dongmu;
import com.dongmu.mybatisplus.mapper.UserMapper;
import com.dongmu.mybatisplus.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 {
@Autowired
private UserMapper userMapper;
@Test
public void testSelect() {
System.out.println(("----- selectAll method test ------"));
List<User> userList = userMapper.selectList(null);
// Assert.assertEquals(5, userList.size());
userList.forEach(System.out::println);
}
@Test
public void testInsert() {
System.out.println(("----- Insert method test ------"));
User user = new User();
user.setName("冬木");
user.setAge(3);
user.setEmail("2645990605@qq.com");
int insert = userMapper.insert(user);
System.out.println("插入数据后受影响的行数:"+insert);
}
@Test
public void testUpdate() {
System.out.println(("----- Update method test ------"));
User user = new User();
user.setId(7L);
user.setName("冬木");
user.setAge(20);
user.setEmail("2645990605@qq.com");
int i = userMapper.updateById(user);
System.out.println("插入数据后受影响的行数:"+i);
}
@Test
void contextLoads() {
}
}
总结:其实就是创建一个处理器类实现MetaObjectHandler接口,实现里面的两个方法,然后就是要在实体类上需要的字段上面加上@TableField注解,为这个注解的属性fill赋值:见名知意。
public enum FieldFill {
DEFAULT,
INSERT,
UPDATE,
INSERT_UPDATE;
private FieldFill() {
}
}
一些其他的方法
/*按照多个字段进行条件查询*/
@Test
public void selectByFields(){
Map<String,Object> map = new HashMap<>();
map.put("name","北海2");
map.put("age",21);
List<User> users = userMapper.selectByMap(map);
users.forEach(System.out::println);
}
==> Preparing: SELECT id,name,age,email,version,create_time,update_time FROM user WHERE name = ? AND age = ?
==> Parameters: 北海2(String), 21(Integer)
<== Columns: id, name, age, email, version, create_time, update_time
<== Row: 7, 北海2, 21, 2645990605@qq.com, 4, 2022-02-21 18:11:17.0, 2022-02-21 20:30:41.0
<== Total: 1