Rumah > pangkalan data > tutorial mysql > Bagaimanakah MybatisPlus mengendalikan jenis json Mysql

Bagaimanakah MybatisPlus mengendalikan jenis json Mysql

王林
Lepaskan: 2023-05-27 17:07:28
ke hadapan
5072 orang telah melayarinya

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)
Salin selepas log masuk

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)
Salin selepas log masuk

b: Bila xml digunakan Apabila menggunakan fail xml:

<result property="advance" column="advance" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
Salin selepas log masuk
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;
    }
    Salin selepas log masuk
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);
}
Salin selepas log masuk
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<🎜 JSON parsing><🎜

    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()));
    Salin selepas log masuk
  • 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);
Salin selepas log masuk

3

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

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan