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

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

王林
Freigeben: 2023-05-27 17:07:28
nach vorne
4959 Leute haben es durchsucht

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)
Nach dem Login kopieren
verwenden Wird beim Speichern automatisch gespeichert.

#2 verwendet:# 🎜🎜#

@Data
@TableName(value = "person",autoResultMap = true)
Nach dem Login kopieren

b: Bei Verwendung einer XML-Datei:

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

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

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

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!

Verwandte Etiketten:
Quelle:yisu.com
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