Heim  >  Artikel  >  Java  >  Automatisches Ausfüllen öffentlicher Felder in Mybatis Plus

Automatisches Ausfüllen öffentlicher Felder in Mybatis Plus

Y2J
Y2JOriginal
2017-05-10 09:20:072606Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen zur Funktion zum automatischen Ausfüllen öffentlicher Felder von SpringBoot Mybatis Plus vorgestellt

Anwendungsszenarien

Normalerweise gibt es beim Erstellen einer Objekttabelle zwei Felder: letzte Änderungszeit und letzte Änderungsperson. Bei diesen Feldern, die die meisten Tabellen haben, müssen Sie dies jedes Mal berücksichtigen, wenn Sie etwas hinzufügen oder ändern Es ist sehr schwierig zu wissen, ob mehrere Felder übergeben wurden. mybatisPlus hat eine tolle Lösung. Das ist die Funktion des automatischen Füllens öffentlicher Felder. Im Allgemeinen kann diese Funktion für Felder verwendet werden, die die folgenden Bedingungen erfüllen:

Dieses Feld ist in den meisten Tabellen zu finden.

Der Wert dieses Feldes ist fest, oder der Feldwert kann dynamisch im Hintergrund abgerufen werden.

Die beiden häufig verwendeten Felder sind last_update_time und last_update_name.

2. MybatisPlus konfigurieren

Guide-Paket: Das Einzige, was zu beachten ist, ist, dass mybatisPlus nur in Version 2.0.6 unterstützt wird AktualisierenÖffentliche Datenfelder werden automatisch ausgefüllt. Bisher konnte sie nur beim Hinzufügen neuer Daten verwendet werden.

Wenn Sie MybatisPlus zuvor konfiguriert haben, müssen Sie nur die folgenden Schritte hinzufügen:

IMetaObjectHandlerAbstract-Klasse erben und insertFill() neu implementieren Es gibt zwei Methoden: Feldeinstellungen, die beim Hinzufügen von Daten ausgefüllt werden müssen, und Feldeinstellungen, die ausgefüllt werden müssen, wenn updateFill() Daten aktualisiert:

package io.z77z.util;
import java.util.Date;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.shiro.SecurityUtils;
import org.springframework.stereotype.Component;
import com.baomidou.mybatisplus.mapper.MetaObjectHandler;
import io.z77z.entity.SysUser;
/** mybatisplus自定义填充公共字段 ,即没有传的字段自动填充*/
@Component
public class MyMetaObjectHandler extends MetaObjectHandler {
  //新增填充
  @Override
  public void insertFill(MetaObject metaObject) {
    Object lastUpdateNameId = metaObject.getValue("lastUpdateNameId");
    Object lastUpdateTime = metaObject.getValue("lastUpdateTime");
    //获取当前登录用户
    SysUser user = (SysUser)SecurityUtils.getSubject().getPrincipal();
    if (null == lastUpdateNameId) {
      metaObject.setValue("lastUpdateNameId", user.getId());
    }
    if (null == lastUpdateTime) {
      metaObject.setValue("lastUpdateTime", new Date());
    }
  }
  //更新填充
  @Override
  public void updateFill(MetaObject metaObject) {
    insertFill(metaObject);
  }
}

Hinweis: Die Parameter der Methode getValue() sind Variable (CamelCase-Benennung).

In der Konfigurationsdatei von mybatisplus generiert das öffentliche Feld die Bean der Klasse:

// MP 全局配置,更多内容进入类看注释
GlobalConfiguration globalConfig = new GlobalConfiguration();
//配置公共字段自动填写
globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());
, die ausgefüllt werden soll Die gerade geschriebenen Einstellungen für das öffentliche Feld werden auf das globale MP-Konfigurationsobjekt festgelegt.

Ausgefüllte Felder müssen die Validierung ignorieren. Fügen Sie die folgende Anmerkung zum entsprechenden

Attribut der Tabellenobjekt-Pojo-Klasse hinzu:

/**
 * 最后修改人Id
 */
@TableField(value="last_update_id",validate=FieldStrategy.NOT_EMPTY)
private String lastUpdateNameId;
/**
 * 最后修改时间
 */
@TableField(value="last_update_time",validate=FieldStrategy.NOT_EMPTY)
private Date lastUpdateTime;
Grund: wegen der Aktualisierung und Einfügung Wenn Methoden aufgerufen werden, wird überprüft, ob das von Ihnen übergebene Attribut leer ist, um zu bestimmen, ob dieses Attribut aktualisiert und eingefügt werden soll. Dies steht im Widerspruch zum automatischen Ausfüllen öffentlicher Felder. Daher ist diese Anmerkung erforderlich, um festzustellen, dass dieses Attribut keiner Überprüfung bedarf. Andernfalls versagt die Füllung beim Einsetzen.

3. Testklassen schreiben

//公共字段自动填充
//1.在mybatisplus的配置文件中公共字段生成类的bean
//2.实现IMetaObjectHandler类
//3.忽略对应字段的为空检测,在pojo类的属性上添加@TableField(value="last_update_name_id",validate=FieldStrategy.IGNORED)
@Test
public void publicTest(){
  SysUser user = new SysUser();
  user.setEmail("1093615728@qq.com");
  user.setNickname("z77z");
  user.setPswd("123123");
  user.setStatus("1");
  sysUserService.insert(user);
  sysUserService.selectById(user.getId());
  SysUser user1 = new SysUser();
  user1.setPswd("123");
  user1.setId(user.getId());
  sysUserService.updateById(user1);
  sysUserService.selectById(user.getId());
}

4. Testprotokoll

23.04.2017-19:35:26 [main] DEBUG io.z77z.dao.SysUserMapper.insert- ==> Vorbereitung: INSERT INTO sys_user ( id, Nickname, email, pswd, `status` ,last_update_name_id, last_update_time ) VALUES ( ?, ?, ?, ?, ?,?, ? )

2017/04/23-19:35:26 [main] DEBUG io.z77z.dao.SysUserMapper.insert- = => Parameter: 6634923de4a14b6ca3bac5fdf31563a8(String), z77z(String), 1093615728@qq.com(String), 123123(String), 1(String), 123(String), 23.04.2017 19:35:26. 58( Zeitstempel)
2017/04/23-19:35:26 [main] DEBUG io.z77z.dao.SysUserMapper.insert- 0d653c75c2aa89dfda767f8d50bac1bc Vorbereiten: SELECT id,nickname,email,pswd,last_login_time AS lastLoginTime,`status`,last_update_name_id AS lastUpdateNameId,create_name_id AS createNameId,last_update_time ASUpdateTime , create_time AS createTime FROM sys_user WHERE id=?
2017/04/23-19:35:26 [main] DEBUG io.z77z.dao.SysUserMapper.selectById- ==> Parameter: 6634923de4a14b6ca3bac5fdf31563a8(String)
23.04.2017-19:35:26 [Haupt] DEBUG io.z77z.dao.SysUserMapper.selectById- 4cf3a5d804dce2f6c68f748734165a4b Vorbereitung: UPDATE sys_user SET pswd=?, last_update_name_id=?
2017/04/23:35:26 [ Haupt] debugg io.z77z.dao.sysusmapper.updatebyId- == & gt; 2017 /04/23-19:35:26 [main] DEBUG io.z77z.dao.SysUserMapper.updateById- 8f64d731e1c77941dc9324732abb2d33 Parameter: 6634923de4a14b6ca3bac5fdf31563a8(String)
23.04.2017- 19:35: 26 [main] DEBUG io.z77z.dao.SysUserMapper.selectById- <== Gesamt: 1


5. Zusammenfassung

Ursprünglich war geplant, diese Methode zur Verarbeitung des Erstellers und der Erstellungszeit zu verwenden. Schließlich wurde festgestellt, dass diese beiden Felder beim Aktualisieren der Daten ebenfalls als leer ignoriert werden, d Ersteller und Erstellungszeit werden zusammen aktualisiert. Andernfalls wird es auf „leer“ aktualisiert. Daher denke ich, dass die Funktion zum automatischen Ausfüllen öffentlicher Felder von mybatisPlus gut ist, aber sie ist nicht perfekt, wenn sie für echte Bedürfnisse verwendet wird.

[Verwandte Empfehlungen]

1. Kostenlose Java-Video-Tutorials

2. Umfassende Analyse von Java-Annotationen

3.

Alibaba Java-Entwicklungshandbuch

Das obige ist der detaillierte Inhalt vonAutomatisches Ausfüllen öffentlicher Felder in Mybatis Plus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn