verwenden Wird beim Speichern automatisch gespeichert.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)
#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 PersonIn 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#🎜 🎜#
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:
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!