Heim  >  Artikel  >  Datenbank  >  Wie geht MybatisPlus mit dem JSON-Typ von MySQL um?

Wie geht MybatisPlus mit dem JSON-Typ von MySQL um?

王林
王林nach vorne
2023-05-27 17:07:284923Durchsuche

MybatisPlus verarbeitet den JSON-Typ von MySQL

1. Definieren Sie JSON-Felder in der Datenbanktabelle;

2. Fügen Sie @TableName(autoResultMap) hinzu = true), fügen Sie @TableField(typeHandler = JacksonTypeHandler.class) zum JSON-Feldzuordnungsattribut hinzu; ; Das JSON-Format von MySQL wird beim Speichern in der Datenbank verwendet. Zu diesem Zeitpunkt können Sie eine Annotation von mybatis plus @TableField(typeHandler = JacksonTypeHandler.class)

@TableField(typeHandler = JacksonTypeHandler.class)
verwenden Wird beim Speichern automatisch gespeichert.

#2 verwendet:# 🎜🎜#

@Data
@TableName(value = "person",autoResultMap = true)

b: Bei Verwendung einer XML-Datei:

<result property="advance" column="advance" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>

MyBatis Plus – So verwenden Sie die von autoResultMap erstellte ResultMap in xml# 🎜🎜#MyBatis Plus hat einen großen Fehler, das heißt, die beim Einfügen und Auswählen verwendete ResultMap ist unterschiedlich. Die Lösung besteht darin, der Entitätsklasse die Annotation @TableName (autoResultMap = true) hinzuzufügen . Diese autoResultMap kann jedoch nicht für benutzerdefinierte Methoden verwendet werden und wirkt sich nur auf integrierte MyBatis Plus-Methoden aus.

Probleme mit autoResultMap anzeigen

Entitätsklasse Person

In dieser Entitätsklasse gibt es einen benutzerdefinierten Typhandler: IntegerListTypeHandler , StringListTypeHandler

@TableName(autoResultMap = true)
public class Person {
    private Integer id;
    private String name;
    private Integer age;
    @TableField(typeHandler = IntegerListTypeHandler.class)
    private List<Integer> orgIds;
    @TableField(typeHandler = StringListTypeHandler.class)
    private List<String> hobbies;
}
rReee#🎜🎜 ## 🎜🎜 ## 🎜🎜#Die benutzerdefinierte Methode kann einige Felder nicht erhalten Hobbys benötigen einen benutzerdefinierten TypeHandler. Die benutzerdefinierte Methode verwendet resultType=Person anstelle der generierten ResultMap, sodass sie alle null sind. Setze @ResultMap("mybatis-plus_Person")

@Mapper
public interface PersonMapper extends BaseMapper<Person> {
    /**
     * 自定义的根据Id获取Person的方法,与MyBatis-Plus中的selectById相同的功能(但是不能使用autoResultMap生成的ResultMap).
     */
    @Select("SELECT * FROM person WHERE id=#{id}")
    Person selectOneById(int id);
}

Die Benennungsregel lautet: mybatis-plus_{Entitätsklassenname}

#🎜🎜 #PERSÖNLICHES VERSTÄNDNIS

MyBatis Plus selbst ist kein dynamisches ORM, sondern stellt nur häufig verwendete SQL-Anweisungen und resultMap-Einstellungen für mybatis bereit, wenn mybatis initialisiert wird. # 🎜🎜#
  • FAQ

@TableField(typeHandler = IntegerListTypeHandler.class) Keine Effektiv: Die benutzerdefinierte Methode ist nicht konfiguriert mit resultType

MyBatis-Plus - JacksonTypeHandler VS FastjsonTypeHandlerJacksonTypeHandler

Unterstützt MVC JSON-Analyse#🎜 🎜#

  • Unterstützt die MySQL-JSON-Analyse

Die traditionelle Methode erfolgt über die resultMap von XML SQL Führen Sie eine Typ-Handler-Zuordnungsverarbeitung durch, dies wird jedoch der Fall sein Auswirkungen auf die Funktion von MP, sodass JacksonTypeHandler mit der Funktion von MP kompatibel sein und die Anforderungen zur Unterstützung der MySQL-JSON-Analyse erfüllen kann.

    FastjsonTypeHandler
Unterstützt MVC JSON-Analyse

#🎜 🎜 ## 🎜🎜#Unterstützt kein MySQL-JSON-Parsing

Kann über XML unterstützt werden, aber die MP-Funktion geht verloren.
    Person person = new Person();
    person.setAge(1);
    person.setName("tim");
    person.setOrgIds(Lists.newArrayList(1,2,3));
    person.setHobbies(Lists.newArrayList("basketball", "pingpong"));
    personMapper.insert(person);
    # 可以得到正确的字段值
    Person personInDb = personMapper.selectById(person.getId());
    # orgIds和hobbies都为null
    personInDb = personMapper.selectOneById(person.getId());
    Preconditions.checkArgument(personInDb.getHobbies().equals(person.getHobbies()));
    Preconditions.checkArgument(personInDb.getName().equals(person.getName()));
    Preconditions.checkArgument(personInDb.getAge().equals(person.getAge()));
    Preconditions.checkArgument(personInDb.getOrgIds().equals(person.getOrgIds()));
  • Hinweis:

  • MVC JSON-Parsing, Sie müssen @TableName nicht hinzufügen (Wert = „t_test“, autoResultMap = true ) [Hervorgehobener Teil], aber wenn MySQL JSON die Abfrage analysiert und nicht hinzugefügt wird, ist das Ergebnis null

    MySQL JSON Beim Parsen der Abfrage wird nur das JSON-Format unterstützt: {"name" :„Tom“, „Alter“:12}, nicht unterstützt: {“Name“: „Tom“, „Alter“: 12} und „{“Name“: „Tom“, „Alter“: 12}“#🎜 🎜#
  • MybatisPlus liest und schreibt das JSON-Feld von MySQL

Vorbedingungen

Stellen Sie sicher, dass die MySQL-Version 5.7+ ist1 . Erstellen Sie eine neue MySQL-Tabelle und fügen Sie ein JSON-Feld hinzu 🎜#

/**
 * 设置了ResultMap为`mybatis-plus_Person`后就可以拿到正确的值.
 */
@ResultMap("mybatis-plus_Person")
@Select("SELECT * FROM person WHERE id=#{id}")
Person selectOneById(int id);

Das obige ist der detaillierte Inhalt vonWie geht MybatisPlus mit dem JSON-Typ von MySQL um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen