Rumah  >  Artikel  >  Java  >  Bagaimana untuk melaksanakan Springboot+Mybatis-plus tanpa menggunakan pernyataan SQL untuk menambah berbilang jadual

Bagaimana untuk melaksanakan Springboot+Mybatis-plus tanpa menggunakan pernyataan SQL untuk menambah berbilang jadual

WBOY
WBOYke hadapan
2023-06-02 11:07:21935semak imbas

Jangan gunakan pernyataan SQL untuk menambah berbilang jadual dalam Springboot+Mybatis-plus

Kerja penyediaan untuk masalah yang saya hadapi dipecahkan dengan mensimulasikan pemikiran dalam persekitaran ujian: Cipta objek BrandDTO dengan parameter Simulasi menghantar parameter ke latar belakang

Masalah yang saya hadapi

Kita semua tahu bahawa adalah amat sukar untuk melaksanakan operasi berbilang jadual dalam Mybatis-plus, jika anda tidak menggunakan Mybatis-plus Untuk alatan seperti -join, anda hanya boleh mengkonfigurasi fail Mapper.xml yang sepadan, mengkonfigurasi ResultMap yang busuk dan panjang, dan kemudian menulis pernyataan SQL yang sepadan Walaupun kaedah ini kelihatan menyusahkan, ia mempunyai kecekapan yang tinggi membolehkan kami mengubah suai fungsi Parti A dengan lebih fleksibel.
Tetapi jika saya akan melakukan projek kecil yang sangat biasa, yang tidak memerlukan sebarang perubahan yang fleksibel, dan saya tidak mahu menulis pernyataan SQL, saya mahu terus menggunakan fungsi Mybatis-plus boleh digunakan untuk menambah data pada berbilang jadual (satu tuan dan berbilang hamba), jadi apa yang perlu saya lakukan

Melihat pangkalan data, kita boleh tahu bahawa kita mempunyai jadual produk, tetapi Produk Untuk imej produk , parameter produk dan jenis produk semuanya adalah satu-dengan-banyak atau banyak-dengan-satu, tetapi saya mahu bahagian hadapan kami untuk terus menyerahkan Borang boleh melengkapkan penambahan data dalam berbilang jadual Operasi berbilang jadual tidak dapat dielakkan

Bagaimana untuk melaksanakan Springboot+Mybatis-plus tanpa menggunakan pernyataan SQL untuk menambah berbilang jadual

Kerja penyediaan

Kerana saya telah menggunakan ini. operasi sebelum Mybatis-plus-join operasi pertanyaan berbilang jadual, jadi saya telah menghasilkan kelas entiti DTO

@Data
public class BrandDTO {

    private Integer id;
    //类型表
    private String type;

    //商品表
    private String brandName;
    private String companyName;
    private String description;
    //图片链接表
    private List<Img> imgUrlList;
    //参数表
    private List<Parameter> parameterList;

}

Dalam kelas ini anda akan tertanya-tanya: Mengapa saya tidak merangkum objek entiti Jenama secara langsung?
Oleh kerana saya telah menggunakan kelas ini sebelum ini untuk melaksanakan pertanyaan jadual serta meletakkan parameter bagi setiap kelas entiti secara berasingan (tiada nama pendua hhhh), dan kelas ini perlu dipaparkan, jadi saya menambah atribut kelas Jenama seperti yang sedia ada. . Jenis yang sepadan dengan Jenama hendaklah banyak (jenis) kepada satu (Jenama), jadi saya hanya merangkumkan satu di sini, tetapi memandangkan Jenama mempunyai hubungan satu-dengan-banyak dengan Img dan Parameter, saya merangkumkannya ke dalam senarai

Disimulasikan dalam persekitaran ujian

Kita mungkin juga memikirkannya, dengan kelas sedemikian, kita hanya perlu meletakkan parameter Ke tambahkannya pada setiap jadual secara berasingan, kita perlu membayangkan bahawa kita mendapat data merangkum objek BrandDTO, dan kemudian membukanya dan menggunakan kaedah antara muka pemeta masing-masing untuk memasukkan ke dalam jadual
(Mula-mula antara muka mesti mewarisi BaseMapper yang sepadan

>, anda boleh melakukan operasi pantas Sudah tentu, jika anda mempunyai kaedah penambahan yang sepadan dalam antara muka, ia juga boleh dilakukan, tetapi kerana kami menggunakan mybatis-plus, mengapa kami perlu kembali dan menulis penambahan. kaedah diri kita sendiri?)

Jadi, Selepas beberapa percubaan berulang, saya mendapat kaedah ujian berikut:

 @Test
    public void addBrand(){
        Brand brand = new Brand();
        Type type = new Type();
        Img img = new Img();
        Parameter parameter = new Parameter();

        BrandDTO brandDTO = new BrandDTO();
        brandDTO.setBrandName("测试商品3");
        brandDTO.setCompanyName("厂家3");
        brandDTO.setDescription("这是第二个个测试");

        brandDTO.setType("第Ⅱ型");

        List<Img> imgs =new ArrayList<>();
        imgs.add(new Img("w/daw/daw/daww"));
        imgs.add(new Img("xxwdAWd/dawd/wx"));
        brandDTO.setImgUrlList(imgs);


        List<Parameter> parameters = new ArrayList<>();
        parameters.add(new Parameter("110","270*860*270",30,450));
        parameters.add(new Parameter("120","170*4350*720",990,5530));
        brandDTO.setParameterList(parameters);


        List<Img> imgUrlList = brandDTO.getImgUrlList();
        List<Parameter> parameterList = brandDTO.getParameterList();


        brand.setBrandName(brandDTO.getBrandName());
        brand.setCompanyName(brandDTO.getCompanyName());
        brand.setDescription(brandDTO.getDescription());
        brandMapper.insert(brand);

        Integer id = brand.getId();

        type.setBType(brandDTO.getType());
        type.setBId(id);
        typeMapper.insert(type);

        for (Parameter parameterl : parameterList) {
            parameter.setBModel(parameterl.getBModel());
            parameter.setBOutput(parameterl.getBOutput());
            parameter.setBSize(parameterl.getBSize());
            parameter.setBId(id);
            parameterMapper.insert(parameter);
        }

        for (Img imgl : imgUrlList) {
            img.setImgUrl(imgl.getImgUrl());
            img.setBrandId(id);
            imgMapper.insert(img);
        }

        System.out.println(id);

    }

Hancurkan pemikiran:

Seterusnya, saya akan mengurai dan menyatakan setiap sebahagian daripada badan kaedah

Buat Cipta objek BrandDTO dengan parameter

Mula-mula kami mensimulasikan objek BrandDTO yang merangkum pelbagai parameter:

        Type type = new Type();
        Img img = new Img();
        Parameter parameter = new Parameter();

        BrandDTO brandDTO = new BrandDTO();
        brandDTO.setBrandName("测试商品3");
        brandDTO.setCompanyName("厂家3");
        brandDTO.setDescription("这是第二个个测试");

        brandDTO.setType("第Ⅱ型");

        List<Img> imgs =new ArrayList<>();
        //此操作能成功是因为我在对应的对象中生成了除了id属性和外键属性的有参构造
        imgs.add(new Img("w/daw/daw/daww"));
        imgs.add(new Img("xxwdAWd/dawd/wx"));
        brandDTO.setImgUrlList(imgs);


        List<Parameter> parameters = new ArrayList<>();
        //此操作能成功是因为我在对应的对象中生成了除了id属性和外键属性的有参构造
        parameters.add(new Parameter("110","270*860*270",30,450));
        parameters.add(new Parameter("120","170*4350*720",990,5530));
        brandDTO.setParameterList(parameters);

Bahagian ini terutamanya mengenai merangkum parameter dan ialah kerja hujung hadapan. Marilah kami Pelayan latar belakang menerima objek BrandDTO dengan parameter

mensimulasikan parameter yang dihantar ke latar belakang

mengeluarkan parameter yang sepadan dalam setiap jadual

rreee

Selepas operasi di atas, kami Satu baris maklumat ditambahkan pada jadual Jenama, dan kunci utama dikembalikan.

Jadi jadual kami yang lain mengetahui id produk yang sepadan dan boleh menggunakan id ini untuk tentukan id kunci asing dalam jadual:

(Sila ambil perhatian bahawa dalam kelas ujian ini saya menyuntik antara muka Mapper bagi setiap kelas entiti yang perlu saya gunakan, jadi saya boleh memanggil kaedah sisipan)

		//取出ImgUrlList和ParameterList()
		List<Img> imgUrlList = brandDTO.getImgUrlList();
        List<Parameter> parameterList = brandDTO.getParameterList();

		//单独封装brand对象
        brand.setBrandName(brandDTO.getBrandName());
        brand.setCompanyName(brandDTO.getCompanyName());
        brand.setDescription(brandDTO.getDescription());
        //调用对应Mapper接口的insert方法(或者你自己写的添加方法)
        brandMapper.insert(brand);
        //使用主键返回(要确保mybatis中设置了主键自增并且在各个实体类中声明了主键属性)
        Integer id = brand.getId();

Adopt Dengan menambah dalam gelung, kita boleh menambah data dalam objek pada setiap jadual satu demi satu Seterusnya, kita perlu menggunakan konsol untuk mendapatkan id kunci utama yang sepadan dengan produk yang kita menambah:

		//向Type表中添加数据并指定外键(BrandID)的id
		type.setBType(brandDTO.getType());
        type.setBId(id);
        typeMapper.insert(type);
        //向Paramater表中添加数据并指定外键(BrandID)的id
        for (Parameter parameterl : parameterList) {
            parameter.setBModel(parameterl.getBModel());
            parameter.setBOutput(parameterl.getBOutput());
            parameter.setBSize(parameterl.getBSize());
            parameter.setBId(id);
            parameterMapper.insert(parameter);
        }
        //向Img表中添加数据并指定外键(BrandID)的id
        for (Img imgl : imgUrlList) {
            img.setImgUrl(imgl.getImgUrl());
            img.setBrandId(id);
            imgMapper.insert(img);
        }

Selepas itu, kami menjalankan, dan saya mendapatkannya di sini Datanya ialah 3, dan kemudian kami memanggil kaedah menyoal produk dengan ID:

Saya menggunakan Apifox di sini:

Bagaimana untuk melaksanakan Springboot+Mybatis-plus tanpa menggunakan pernyataan SQL untuk menambah berbilang jadual

Ia boleh dilihat bahawa maklumat kami telah dimasukkan Jadual Bahagian nilai pulangan adalah batal kerana pertanyaan berbilang jadual yang saya tulis mempunyai beberapa pepijat kecil, tetapi masih terdapat data dalam pangkalan data. Ia boleh dilihat bahawa ujian ini berjaya. Seterusnya, hanya CV kod ke perkhidmatan yang sepadan anda boleh menguji sama ada ia boleh dilaksanakan dengan mensimulasikan objek Json yang dilalui pada lapisan pengawal

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan Springboot+Mybatis-plus tanpa menggunakan pernyataan SQL untuk menambah berbilang jadual. 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