6.MyBatis-Plus其他

一、自定義id生成器

註解類型

IdType中類型 描述
AUTO(0) 數據庫自增 依賴數據庫
NONE(1) 表示該類型未指定主鍵類型 (如果沒有主鍵策略)默認根據雪花算法生成
INPUT(2) 用戶輸入ID(該類型可以通過自己註冊填充插件進行填充)
ASSIGN_ID(3) 支持自動轉換爲String類型,但數值類型不支持自動轉換,需精準匹配,例如返回Long,實體主鍵就不支持定義爲Integer
ASSIGN_UUID(4) 默認不含中劃線的UUID生成

實體類註解

@TableId(type = IdType.ASSIGN_ID)
private Long id;

測試

userMapper.insert(new User().setName("小明").setAge(23).setEmail("[email protected]").setVersion(1));
/*
Preparing: INSERT INTO user ( ID, NAME, AGE, EMAIL, VERSION, CREATE_TIME ) VALUES ( ?, ?, ?, ?, ?, ? )
Parameters: 1213659384740179970(Long), 小明(String), 23(Integer), [email protected](String), 1(Integer), 2020-01-05 11:12:00.682(Timestamp)
 */

二、自動填充功能

  • 需求:新增時createTime插入當前時間,修改時updateTime插入當前時間。

配置類

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}

實體類註解

@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;

測試

userMapper.insert(new User().setName("小明").setAge(23).setEmail("[email protected]").setVersion(1));
/*
Preparing: INSERT INTO user ( ID, NAME, AGE, EMAIL, VERSION, CREATE_TIME ) VALUES ( ?, ?, ?, ?, ?, ? )
Parameters: 1213659384740179970(Long), 小明(String), 23(Integer), [email protected](String), 1(Integer), 2020-01-05 11:12:00.682(Timestamp)
 */

三、字段類型處理器

1.添加對應依賴

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.10.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.10.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.10.1</version>
</dependency>

2.實體類註解

// OtherInfo類略...
@TableField(typeHandler = JacksonTypeHandler.class)
private OtherInfo otherInfo;

3.測試

@Test
public void testType() {
    userMapper.insert(new User()
            .setName("小明")
            .setAge(23)
            .setEmail("[email protected]")
            .setVersion(1)
            .setOtherInfo(new OtherInfo().setPhone(13556688888L).setAddress("山東")));
    /*
    Preparing: INSERT INTO user ( ID, NAME, AGE, EMAIL, VERSION, CREATE_TIME, OTHER_INFO ) VALUES ( ?, ?, ?, ?, ?, ?, ? )
    Parameters: 1213672699721781250(Long), 小明(String), 23(Integer), [email protected](String), 1(Integer), 2020-01-05 12:04:55.221(Timestamp), {"phone":13556688888,"address":"山東"}(String)
     */
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章