


Bagaimana untuk melaksanakan Springboot+Mybatis-plus tanpa menggunakan pernyataan SQL untuk menambah berbilang jadual
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
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< , dengan cara ini kita mendapat sesuatu yang serupa dengan kelas perantaraan
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
@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);
}
Salin selepas log masuk
Hancurkan pemikiran:Seterusnya, saya akan mengurai dan menyatakan setiap sebahagian daripada badan kaedahBuat Cipta objek BrandDTO dengan parameter Mula-mula kami mensimulasikan objek BrandDTO yang merangkum pelbagai parameter: @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); }
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);
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();
//向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:
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

HQL dan SQL dibandingkan dalam rangka kerja Hibernate: HQL (1. Sintaks berorientasikan objek, 2. Pertanyaan bebas pangkalan data, 3. Keselamatan jenis), manakala SQL mengendalikan pangkalan data secara langsung (1. Piawaian bebas pangkalan data, 2. Boleh laku kompleks pertanyaan dan manipulasi data).

"Penggunaan Operasi Bahagian dalam OracleSQL" Dalam OracleSQL, operasi bahagi ialah salah satu operasi matematik yang biasa. Semasa pertanyaan dan pemprosesan data, operasi pembahagian boleh membantu kami mengira nisbah antara medan atau memperoleh hubungan logik antara nilai tertentu. Artikel ini akan memperkenalkan penggunaan operasi pembahagian dalam OracleSQL dan memberikan contoh kod khusus. 1. Dua cara operasi bahagi dalam OracleSQL Dalam OracleSQL, operasi bahagi boleh dilakukan dalam dua cara berbeza.

Apakah Identity dalam SQL? Contoh kod khusus diperlukan Dalam SQL, Identity ialah jenis data khas yang digunakan untuk menjana nombor penambahan automatik. Ia sering digunakan untuk mengenal pasti setiap baris data dalam jadual. Lajur Identiti sering digunakan bersama dengan lajur kunci utama untuk memastikan setiap rekod mempunyai pengecam unik. Artikel ini akan memperincikan cara menggunakan Identiti dan beberapa contoh kod praktikal. Cara asas untuk menggunakan Identity ialah menggunakan Identit semasa membuat jadual.

Oracle dan DB2 ialah dua sistem pengurusan pangkalan data hubungan yang biasa digunakan, setiap satunya mempunyai sintaks dan ciri SQL tersendiri. Artikel ini akan membandingkan dan membezakan antara sintaks SQL Oracle dan DB2, dan memberikan contoh kod khusus. Sambungan pangkalan data Dalam Oracle, gunakan pernyataan berikut untuk menyambung ke pangkalan data: CONNECTusername/password@database Dalam DB2, pernyataan untuk menyambung ke pangkalan data adalah seperti berikut: CONNECTTOdataba

Tafsiran teg SQL dinamik MyBatis: Penjelasan terperinci tentang penggunaan teg Set MyBatis ialah rangka kerja lapisan kegigihan yang sangat baik Ia menyediakan banyak teg SQL dinamik dan boleh membina pernyataan operasi pangkalan data secara fleksibel. Antaranya, tag Set ialah tag yang digunakan untuk menjana klausa SET dalam kenyataan UPDATE, yang sangat biasa digunakan dalam operasi kemas kini. Artikel ini akan menerangkan secara terperinci penggunaan teg Set dalam MyBatis dan menunjukkan kefungsiannya melalui contoh kod tertentu. Apakah itu Set tag Set tag digunakan dalam MyBati

SpringBoot dan SpringMVC adalah kedua-dua rangka kerja yang biasa digunakan dalam pembangunan Java, tetapi terdapat beberapa perbezaan yang jelas antara mereka. Artikel ini akan meneroka ciri dan penggunaan kedua-dua rangka kerja ini dan membandingkan perbezaannya. Mula-mula, mari belajar tentang SpringBoot. SpringBoot telah dibangunkan oleh pasukan Pivotal untuk memudahkan penciptaan dan penggunaan aplikasi berdasarkan rangka kerja Spring. Ia menyediakan cara yang pantas dan ringan untuk membina bersendirian, boleh dilaksanakan

Penyelesaian: 1. Semak sama ada pengguna log masuk mempunyai kebenaran yang mencukupi untuk mengakses atau mengendalikan pangkalan data, dan pastikan pengguna mempunyai kebenaran yang betul 2. Semak sama ada akaun perkhidmatan SQL Server mempunyai kebenaran untuk mengakses fail yang ditentukan atau folder, dan pastikan akaun Mempunyai kebenaran yang mencukupi untuk membaca dan menulis fail atau folder 3. Semak sama ada fail pangkalan data yang ditentukan telah dibuka atau dikunci oleh proses lain, cuba tutup atau lepaskan fail, dan jalankan semula pertanyaan 4 . Cuba sebagai pentadbir Jalankan Studio Pengurusan seperti dsb.

Bagaimana untuk menggunakan pernyataan SQL untuk pengagregatan data dan statistik dalam MySQL? Pengumpulan data dan statistik merupakan langkah yang sangat penting semasa melakukan analisis dan statistik data. Sebagai sistem pengurusan pangkalan data perhubungan yang berkuasa, MySQL menyediakan pelbagai fungsi pengagregatan dan statistik, yang boleh melaksanakan pengagregatan data dan operasi statistik dengan mudah. Artikel ini akan memperkenalkan kaedah menggunakan pernyataan SQL untuk melaksanakan pengagregatan data dan statistik dalam MySQL, dan menyediakan contoh kod khusus. 1. Gunakan fungsi COUNT untuk mengira Fungsi COUNT adalah yang paling biasa digunakan
