概述
先說一下在springboot中,我們要使用mybatis-plus做自動填充的步驟
- 實體類中公共字段,添加
@TableField
註解
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("bbs_module")
public class Module implements Serializable {
private static final long serialVersionUID = 1L;
//版塊id
@TableId(value = "id", type = IdType.ID_WORKER_STR)
private String id;
private String title;
private String intro;
private Integer topicNum;
private Integer sort;
//邏輯刪除 1(true)已刪除, 0(false)未刪除
private Boolean isDeleted;
//創建時間
@TableField(fill = FieldFill.INSERT)
private Date gmtCreate;
//更新時間
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date gmtModified;
}
- 配置自動填充的組件
MyMetaObjectHandler
,並在類上加@component
註解進行注入。
@component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("gmtCreate",new Date(),metaObject);
this.setFieldValByName("gmtModified",new Date(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("gmtModified",new Date(),metaObject);
}
}
對!這就完成了,因爲springboot底層幫我們做好了自動配置,我們只需要根據需求去添加組件即可。
但是最近這個SSM項目中,沒有自動配置,遇見了很多坑,就像這個,接下來說說這個應該怎樣配置。
ssm中的自動填充配置步驟
首先肯定也是一樣,要在實體類中的公共字段上添加@TableField
註解,也要把組件MyMetaObjectHandler
給出,但是這裏不要
加@component
,因爲ssm不像springboot會幫我們自動裝配。
所有的組件我們不僅應該自己注入,而且要自己進行裝配。(@component是注入的過程,而裝配的過程我們應該自己做)
在我們的xml配置中,給MybatisSqlSessionFactoryBean
進行屬性配置,
這是MybatisSqlSessionFactoryBean
的源碼,常用屬性已經圈出。
我的錯誤
第一次我只使用了@component
進行注入
第二次我採用xml方式配置,但是沒有在MybatisSqlSessionFactoryBean
中進行屬性配置如下圖
我總結我的錯誤就是:只考慮到了注入該組件,並沒有考慮到組裝
該組件。
如果理解有誤請大佬指點,,,,,