github地址https://github.com/heng1234/mybatis_plus
需求: 要求insert或者update填充當前時間
主要是工具類和實體字段屬性加入註解
@TableField(fill = FieldFill.UPDATE)//修改時填充
@TableField(fill = FieldFill.INSERT)//插入時填充
代碼
實體:
package com.hlvy.mybatis_plus.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* User
*
* @author heng
* @date 2019/4/11
**/
@Data
/**@auth
* @TableName 指定數據庫表名
* extends Model<User> AR模式
* @EqualsAndHashCode(callSuper = false) 去除AR模式繼承沒調用父類方法警告警告
*/
@TableName("User")
@EqualsAndHashCode(callSuper = false)
public class User extends Model<User> {
/**
* @TableId 指定主鍵列名及主鍵策略方式
*/
@TableId(value = "id",type = IdType.NONE)
private Long id;
/**
* 姓名
*@TableField 指定數據庫列名
*/
@TableField(condition = SqlCondition.LIKE,value = "name")
private String name;
/**
* 年齡
*/
@TableField(condition = "%s<#{%s}")
private Integer age;
/**
* 郵箱
*/
@TableField("email")
private String email;
/**
* 直屬上級id
*/
private Long managerId;
/**
* 創建時間
*/
@TableField(fill = FieldFill.INSERT)//插入時填充
private Date createdTime;
/**
* 修改時間
*/
@TableField(fill = FieldFill.UPDATE)//修改時填充
private Date updateTime;
/**
* 版本
*/
private Integer version;
/**
* 0、未刪除 1、已刪除
*/
@TableLogic//邏輯刪除標識
@TableField(select = false)//查詢的時候不顯示
private Integer deleted;
/** 備註 非數據庫字段需要排除
* 方法一加入transient 不讓該變量序列化 不推薦
* 方法二加入static 但是lombok不會生成get set方法需要自己手動添加 不推薦
* 方法三 @TableField(exist = false) 默認是true 改爲false表示不是數據庫字段 推薦
* */
@TableField(exist = false)
private /*static*/ /*transient*/ String remark;
}
工具類:
package com.hlvy.mybatis_plus.comporent;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.Date;
/**
* MetaObjectHandler
* 自動填充工具類
* @author heng
* @date 2019/9/14
**/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
private static final Logger LOGGER= LoggerFactory.getLogger(MyMetaObjectHandler.class);
@Override
public void insertFill(MetaObject metaObject) {
//是否存在set方法
boolean bol = metaObject.hasSetter("createdTime");
//拿到createdTime的值
Object createdTime = getFieldValByName("createdTime", metaObject);
//插入時填充創建時間 fieldName是屬性名
LOGGER.info("insert 自動填充 "+ LocalDateTime.now());
// setInsertFieldValByName("createTime", LocalDateTime.now(),metaObject);
if(bol){//有set方法
if (createdTime == null) {//值爲null填充
setFieldValByName("createdTime", new Date(), metaObject);
}
}
}
@Override
public void updateFill(MetaObject metaObject) {
//是否存在set方法
boolean bol = metaObject.hasSetter("updateTime");
//拿到updateTime的值
Object updateTime = getFieldValByName("updateTime", metaObject);
//修改時填充當前時間 fieldName是屬性名
LOGGER.info("update 自動填充 "+ LocalDateTime.now());
//setUpdateFieldValByName("updateTime", LocalDateTime.now(),metaObject);
if (bol){//有set方法
if (updateTime == null) {//值爲null填充
setFieldValByName("updateTime", new Date(), metaObject);
}
}
}
}
測試類
package com.hlvy.mybatis_plus.userTest;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hlvy.mybatis_plus.entity.User;
import com.hlvy.mybatis_plus.mapper.UserMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
/**
* UserTestNew
* mp進階 自動填充
* @author heng
* @date 2019/4/11
**/
@RunWith(SpringRunner.class)
@SpringBootTest
public class FillUserTestNew {
@Autowired
private UserMapper userMapper;
/**
* 插入一行user 自動填充
* sql INSERT INTO User ( id, name, age, email, created_time ) VALUES ( 1172866953920393218, '恆果果', 19, '[email protected]', '2019-09-14 13:37:27.29' )
*/
@Test
public void insertUser() {
System.out.println(("----- insertUser method test ------"));
User user = new User();
user.setName("恆果果");
user.setAge(19);
user.setEmail("[email protected]");
int row = userMapper.insert(user);
System.out.println("插入成功"+row+"行");
}
/**
* 修改 自動填充
* 執行sql UPDATE User SET age=17, update_time='2019-09-14 13:26:30.305' WHERE id=5 AND deleted=0
*/
@Test
public void updateOne() {
User user = new User();
user.setId(5L);
user.setAge(17);
System.out.println(userMapper.updateById(user));
}
}
pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hlvy</groupId>
<artifactId>mybatis_plus</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mybatis_plus</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--引入 MyBatis-Plus 之後請不要再次引入 MyBatis 以及 MyBatis-Spring,以避免因版本差異導致的問題-->
<!-- <dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>-->
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.2</version>
</dependency>
<!--mybatis-plus-generator-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.1.2</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--freemarker-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.yml 文件
server:
port: 9091
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mytest?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
#MyBaits 別名包掃描路徑,通過該屬性可以給包中的類註冊別名,註冊後在 Mapper 對應的 XML 文件中可以直接使用類名,而不用使用全限定的類名(即 XML 中調用的時候不用包含包名)。
type-aliases-package: com.hlvy.mybatis_plus.entity
#該配置請和 typeAliasesPackage 一起使用,如果配置了該屬性,則僅僅會掃描路徑下以該類作爲父類的域對象
type-aliases-super-type: java.lang.Object
#MyBatis Mapper 所對應的 XML 文件位置,如果您在 Mapper 中有自定義方法(XML 中有自定義實現),需要進行該配置,告訴 Mapper 所對應的 XML 文件位置。
mapper-locations: classpath*:mybatis/*.xml
#MyBatis 配置文件位置,如果您有單獨的 MyBatis 配置,請將其路徑配置到 configLocation 中。
#config-location: classpath:mybatis-config.xml
#啓動時是否檢查 MyBatis XML 文件的存在,默認不檢查
check-config-location: false
global-config:
db-config: #配置邏輯刪除
logic-delete-value: 1 # 邏輯已刪除值(默認爲 1)
logic-not-delete-value: 0 # 邏輯未刪除值(默認爲 0)
#id-type: none #全局策略
#field-strategy: ignored #所有字段加入crud語句中 一般不這麼設置 默認not_null
#table-prefix: t_ #表的前綴
#table-underline: true #表名是否使用下劃線
#configuration:#不能與config-location同時出現
#map-underscore-to-camel-case: true
#設置日誌 級別
logging:
level:
root: warn
com.hlvy.mybatis_plus: trace
pattern:
console: '%P%m%n'
啓動類
package com.hlvy.mybatis_plus;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.hlvy.mybatis_plus.mapper")
public class MybatisPlusApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisPlusApplication.class, args);
}
}
userMapper
package com.hlvy.mybatis_plus.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hlvy.mybatis_plus.entity.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* UserMapper
*
* @author heng
**/
public interface UserMapper extends BaseMapper<User> {
/* @Select("select * from user ${ew.customSqlSegment}")*/
List<User> selectAll(@Param(Constants.WRAPPER) Wrapper<User> wrapper);
IPage<User> selectUserPage(Page<User> page,@Param(Constants.WRAPPER) Wrapper<User> wrapper);
}