Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah MybatisPlus mengendalikan jenis json Mysql

Bagaimanakah MybatisPlus mengendalikan jenis json Mysql

王林
王林ke hadapan
2023-05-27 17:07:284923semak imbas

MybatisPlus mengendalikan jenis json Mysql

1 Tentukan medan JSON dalam jadual pangkalan data; 2. dalam JSON Tambah @TableField(typeHandler = JacksonTypeHandler.class) pada atribut pemetaan medan

1. Terdapat atribut dalam kelas entiti yang merupakan objek lain, atau mysql digunakan apabila menyimpan dalam format json pangkalan data, anda boleh menggunakan anotasi @TableField(typeHandler = JacksonTypeHandler.class) mybatis plus
@TableField(typeHandler = JacksonTypeHandler.class)

supaya objek boleh ditukar secara automatik kepada format json apabila menyimpan

2 .Jadi bagaimana untuk memetakan apabila mengeluarkannya? Terdapat dua situasi:

a: Apabila xml tidak digunakan:

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

b: Bila xml digunakan Apabila menggunakan fail xml:

<result property="advance" column="advance" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
MyBatis Plus - Cara menggunakan autoResultMap untuk membina ResultMap dalam xml

MyBatis Plus mempunyai kecacatan besar, iaitu ResultMap yang digunakan apabila memasukkan dan memilih adalah berbeza, penyelesaiannya ialah menambah anotasi @TableName(autoResultMap = true) ke kelas entiti. Walau bagaimanapun, autoResultMap ini tidak boleh digunakan pada kaedah tersuai, dan hanya berkuat kuasa pada kaedah terbina dalam MyBatis Plus.

Tunjukkan masalah dengan autoResultMap

Orang kelas entiti

Kelas entiti ini mempunyai pengendali taip tersuai: IntegerListTypeHandler, StringListTypeHandler>

Kaedah tersuai tidak boleh mendapatkan beberapa medan

  • Oleh kerana orgId dan hobi dalam Orang memerlukan typeHandler tersuai, dan kaedah tersuai menggunakan resultType= Person, bukan ResultMap yang dijana, begitu juga null

    @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;
    }
Peningkatan

Set @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);
}
Nama Peraturannya ialah: mybatis-plus_{nama kelas entiti}

Pemahaman peribadi

  • MyBatis Plus sendiri bukanlah ORM dinamik, tetapi hanya Apabila mybatis dimulakan, pernyataan SQL biasa dan tetapan Peta hasil disediakan untuk mybatis dan tidak akan mengubah tingkah laku MyBatis itu sendiri

Soalan Lazim

  • @TableField(typeHandler = IntegerListTypeHandler.class) tidak berkuat kuasa: kaedah tersuai tidak dikonfigurasikan dengan resultType

  • MyBatis-Plus - JacksonTypeHandler VS FastjsonTypeHandler

JacksonTypeHandler

Sokongan

    Sokong penghuraian JSON MySQL
  • Kaedah tradisional ialah melakukan pemprosesan pemetaan typeHandler melalui XML SQL resultMap, tetapi Ini akan menjejaskan fungsi MP, jadi JacksonTypeHandler serasi dengan fungsi MP dan menyokong penghuraian JSON MySQL.
  • FastjsonTypeHandler

Menyokong penghuraian MVC JSON

    Tidak menyokong penghuraian JSON MySQL

    boleh disokong melalui XML, tetapi ciri MP akan hilang.
    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()));
  • Nota:

Apabila menghuraikan MVC JSON, anda tidak perlu menambah @TableName (value = “t_test”, autoResultMap = true) [bahagian yang diserlahkan] , tetapi Apabila MySQL JSON menghuraikan pertanyaan, jika ia tidak ditambahkan, hasilnya adalah batal

MySQL JSON Apabila menghuraikan pertanyaan, hanya format JSON yang disokong: {"name":"Tom","age ":12}, tidak disokong :{"name":"Tom","age":12} dan "{"name":"Tom","age":12}"

MybatisPlus membaca dan menulis medan json Mysql

Prasyarat

Pastikan versi mysql ialah 5.7+

1 Cipta jadual mysql baharu dan tambah medan json

2. kelas pojo

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

3

Atas ialah kandungan terperinci Bagaimanakah MybatisPlus mengendalikan jenis json Mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam