Heim > Java > javaLernprogramm > Hauptteil

Automatisches Ausfüllen öffentlicher Felder in Mybatis Plus

Y2J
Freigeben: 2017-05-10 09:20:07
Original
2608 Leute haben es durchsucht

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);
  }
}
Nach dem Login kopieren

Hinweis: Die Parameter der Methode getValue() sind <🎜 in der Pojo-Klasse >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());
Nach dem Login kopieren
, 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;
Nach dem Login kopieren
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());
}
Nach dem Login kopieren

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- <== Updates: 1
2017/04/23-19: 35: 26 [main] DEBUG io.z77z.dao.SysUserMapper.selectById- ==> 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- <==  Gesamt: 1
23.04.2017-19:35:26 [Haupt] DEBUG io.z77z.dao.SysUserMapper.updateById- ==> 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- <== Updates: 1
2017/04/23-19:35:26 [main] DEBUG io .z77z.Dao.SysuserMapper.SelectByid- == & gt; Vorbereitung: select ID, nickName, Email, PSWD, Last_login_time as lastlogintime, `status`, Last_update_na Me_id as lastUpdatenameid, Create_name_id As Createnameid, Last_update_time as 4 id=? 🎜>23.04.2017-19:35:26 [main] DEBUG io.z77z.dao.SysUserMapper.selectById- ==> 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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage