国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
在Springboot Mybatis-plus不使用SQL語(yǔ)句進(jìn)行多表添加操作
我所遇到的問(wèn)題
#準(zhǔn)備工作
在測(cè)試環(huán)境下模擬
思維分解一下:
創(chuàng)建出一個(gè)帶有參數(shù)的BrandDTO物件
模擬對(duì)後臺(tái)傳遞參數(shù)
首頁(yè) Java java教程 Springboot+Mybatis-plus不使用SQL語(yǔ)句進(jìn)行多表新增怎麼實(shí)現(xiàn)

Springboot+Mybatis-plus不使用SQL語(yǔ)句進(jìn)行多表新增怎麼實(shí)現(xiàn)

Jun 02, 2023 am 11:07 AM
sql springboot mybatis-plus

在Springboot Mybatis-plus不使用SQL語(yǔ)句進(jìn)行多表添加操作

我所遇到的問(wèn)題準(zhǔn)備工作在測(cè)試環(huán)境下模擬思維分解一下:創(chuàng)建出一個(gè)帶有參數(shù)的BrandDTO對(duì)像模擬對(duì)後臺(tái)傳遞參數(shù)

我所遇到的問(wèn)題

我們都知道,在我們使用Mybatis-plus中進(jìn)行多表操作是極其困難的,如果你不使用Mybatis-plus- join這一類的工具,你只能去配置對(duì)應(yīng)的Mapper.xml檔,配置又臭又長(zhǎng)的ResultMap,然後再去寫(xiě)對(duì)應(yīng)的sql語(yǔ)句,這種方法雖然看上去很麻煩,但具有很高的靈活性,可以讓我們更靈活的修改甲方需要的功能.
但是如果我將要做一個(gè)很普通的小專案,不需要什麼靈活的變動(dòng),並且我不想去寫(xiě)SQL語(yǔ)句,想直接用Mybatis -plus的功能來(lái)實(shí)現(xiàn)多表(一主多副)資料的添加,那我該怎麼做呢?

觀看資料庫(kù)可以知道,我們有商品表,然而商品對(duì)於商品圖片,商品參數(shù)商品類型都是一對(duì)多或多對(duì)一的關(guān)係,但是我想要我們的前端可以直接提交一個(gè)表單就能完成多個(gè)表中資料的新增,多表操作是必然的了

Springboot+Mybatis-plus不使用SQL語(yǔ)句進(jìn)行多表新增怎麼實(shí)現(xiàn)

#準(zhǔn)備工作

因?yàn)榇瞬僮髦拔乙呀?jīng)使用了mybatis -plus-join的多表查詢操作,所以我已經(jīng)產(chǎn)生了一個(gè)DTO的實(shí)體類別

@Data
public class BrandDTO {

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

    //商品表
    private String brandName;
    private String companyName;
    private String description;
    //圖片鏈接表
    private List<Img> imgUrlList;
    //參數(shù)表
    private List<Parameter> parameterList;

}

在這個(gè)類別中你會(huì)疑惑: 為什麼我不直接封裝一個(gè)Brand實(shí)體物件進(jìn)來(lái)呢?
因?yàn)槲抑笆褂昧诉@個(gè)類別來(lái)進(jìn)行連表查詢,把各個(gè)實(shí)體類別的參數(shù)分開(kāi)放進(jìn)來(lái)(竟然沒(méi)有重名的hhhh),並且這個(gè)類別需要做展示,所以我把Brand類別的屬性原原本本加入進(jìn)來(lái),而tpye對(duì)應(yīng)Brand應(yīng)該是多(type)對(duì)一(Brand),所以在這裡我也只封裝了一個(gè),但由於Brand對(duì)於Img和Parameter是一對(duì)多的關(guān)係,所以我把他們封裝成為了一個(gè)list<對(duì)象>,就這樣我們得到了一個(gè)類似於中間類別的東西

在測(cè)試環(huán)境下模擬

#我們不妨想一下,有了這樣的一個(gè)類別,我們只需要把參數(shù)分開(kāi)新增到各個(gè)表中,我們需要想像我們得到一個(gè)封裝有資料的BrandDTO的物件,然後拆解開(kāi)來(lái)使用各自的mapper介面的方法來(lái)進(jìn)行插入表格行為
(首先介面要繼承對(duì)應(yīng)的BaseMapper<> ;,才可以進(jìn)行快速操作,當(dāng)然如果你在接口有對(duì)應(yīng)的添加方法也可以,但是既然我們用了mybatis-plus,為什麼還要拐回去自己寫(xiě)添加方法?)

於是,經(jīng)過(guò)幾次反覆實(shí)驗(yàn),我得到瞭如下測(cè)試方法:

 @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("測(cè)試商品3");
        brandDTO.setCompanyName("廠家3");
        brandDTO.setDescription("這是第二個(gè)個(gè)測(cè)試");

        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);

    }

思維分解一下:

接下來(lái)我會(huì)對(duì)方法體的各個(gè)部分進(jìn)行分解表達(dá)

創(chuàng)建出一個(gè)帶有參數(shù)的BrandDTO物件

首先我們模擬了一個(gè)封裝有各個(gè)參數(shù)的BrandDTO物件:

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

        BrandDTO brandDTO = new BrandDTO();
        brandDTO.setBrandName("測(cè)試商品3");
        brandDTO.setCompanyName("廠家3");
        brandDTO.setDescription("這是第二個(gè)個(gè)測(cè)試");

        brandDTO.setType("第Ⅱ型");

        List<Img> imgs =new ArrayList<>();
        //此操作能成功是因?yàn)槲以趯?duì)應(yīng)的對(duì)象中生成了除了id屬性和外鍵屬性的有參構(gòu)造
        imgs.add(new Img("w/daw/daw/daww"));
        imgs.add(new Img("xxwdAWd/dawd/wx"));
        brandDTO.setImgUrlList(imgs);


        List<Parameter> parameters = new ArrayList<>();
        //此操作能成功是因?yàn)槲以趯?duì)應(yīng)的對(duì)象中生成了除了id屬性和外鍵屬性的有參構(gòu)造
        parameters.add(new Parameter("110","270*860*270",30,450));
        parameters.add(new Parameter("120","170*4350*720",990,5530));
        brandDTO.setParameterList(parameters);

這一部分主要是對(duì)參數(shù)的封裝,是前端的工作,讓我們後臺(tái)伺服器收到一個(gè)帶有參數(shù)的BrandDTO物件

模擬對(duì)後臺(tái)傳遞參數(shù)

取出各個(gè)表中所對(duì)應(yīng)的各個(gè)參數(shù)

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

		//單獨(dú)封裝brand對(duì)象
        brand.setBrandName(brandDTO.getBrandName());
        brand.setCompanyName(brandDTO.getCompanyName());
        brand.setDescription(brandDTO.getDescription());
        //調(diào)用對(duì)應(yīng)Mapper接口的insert方法(或者你自己寫(xiě)的添加方法)
        brandMapper.insert(brand);
        //使用主鍵返回(要確保mybatis中設(shè)置了主鍵自增并且在各個(gè)實(shí)體類中聲明了主鍵屬性)
        Integer id = brand.getId();

經(jīng)過(guò)以上操作我們向Brand表中加入了一行資訊,並且將主鍵回傳了過(guò)來(lái).

於是我們的其他表知曉了對(duì)應(yīng)的商品的id,就可以利用此id來(lái)進(jìn)行表中外鍵id的定義:

(請(qǐng)注意,在這個(gè)測(cè)試類別中我把所需要用的各個(gè)實(shí)體類別的Mapper介面都注入了,所以我才能呼叫insert方法)

		//向Type表中添加數(shù)據(jù)并指定外鍵(BrandID)的id
		type.setBType(brandDTO.getType());
        type.setBId(id);
        typeMapper.insert(type);
        //向Paramater表中添加數(shù)據(jù)并指定外鍵(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表中添加數(shù)據(jù)并指定外鍵(BrandID)的id
        for (Img imgl : imgUrlList) {
            img.setImgUrl(imgl.getImgUrl());
            img.setBrandId(id);
            imgMapper.insert(img);
        }

採(cǎi)用循環(huán)添加,我們可以將物件中的資料逐一添加到各個(gè)表中,接下來(lái)我們需要透過(guò)控制臺(tái)來(lái)得到我們添加商品對(duì)應(yīng)的主鍵id:

System.out.println(id);

在這之後我們運(yùn)行,我這裡得到的資料是3,然後我們?nèi)ズ艚型高^(guò)id查詢商品的方法:
我這裡用的是Apifox:

Springboot+Mybatis-plus不使用SQL語(yǔ)句進(jìn)行多表新增怎麼實(shí)現(xiàn)

可以看出來(lái)我們的資訊已經(jīng)插入了表格.傳回值部分為null是因?yàn)槲覍?xiě)的多表查詢有一些小bug,但是在資料庫(kù)仍然是有資料的,由此可見(jiàn),這個(gè)測(cè)試是成功了,接下來(lái)只要將程式碼CV到對(duì)應(yīng)的service,在controller層模擬傳入一個(gè)Json物件就可以檢驗(yàn)是否可行!

以上是Springboot+Mybatis-plus不使用SQL語(yǔ)句進(jìn)行多表新增怎麼實(shí)現(xiàn)的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話題

Laravel 教程
1600
29
PHP教程
1502
276
SQL的目的:與MySQL數(shù)據(jù)庫(kù)進(jìn)行交互 SQL的目的:與MySQL數(shù)據(jù)庫(kù)進(jìn)行交互 Apr 18, 2025 am 12:12 AM

SQL用於與MySQL數(shù)據(jù)庫(kù)交互,實(shí)現(xiàn)數(shù)據(jù)的增、刪、改、查及數(shù)據(jù)庫(kù)設(shè)計(jì)。 1)SQL通過(guò)SELECT、INSERT、UPDATE、DELETE語(yǔ)句進(jìn)行數(shù)據(jù)操作;2)使用CREATE、ALTER、DROP語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)和管理;3)複雜查詢和數(shù)據(jù)分析通過(guò)SQL實(shí)現(xiàn),提升業(yè)務(wù)決策效率。

SQL:語(yǔ)言,MySQL:數(shù)據(jù)庫(kù)管理系統(tǒng) SQL:語(yǔ)言,MySQL:數(shù)據(jù)庫(kù)管理系統(tǒng) Apr 21, 2025 am 12:05 AM

SQL和MySQL的關(guān)係是:SQL是用於管理和操作數(shù)據(jù)庫(kù)的語(yǔ)言,而MySQL是支持SQL的數(shù)據(jù)庫(kù)管理系統(tǒng)。 1.SQL允許進(jìn)行數(shù)據(jù)的CRUD操作和高級(jí)查詢。 2.MySQL提供索引、事務(wù)和鎖機(jī)制來(lái)提升性能和安全性。 3.優(yōu)化MySQL性能需關(guān)注查詢優(yōu)化、數(shù)據(jù)庫(kù)設(shè)計(jì)和監(jiān)控維護(hù)。

MySQL:SQL的實(shí)際應(yīng)用 MySQL:SQL的實(shí)際應(yīng)用 May 08, 2025 am 12:12 AM

MySQL受歡迎的原因是其性能卓越且易於使用和維護(hù)。 1.創(chuàng)建數(shù)據(jù)庫(kù)和表:使用CREATEDATABASE和CREATETABLE命令。 2.插入和查詢數(shù)據(jù):通過(guò)INSERTINTO和SELECT語(yǔ)句操作數(shù)據(jù)。 3.優(yōu)化查詢:使用索引和EXPLAIN語(yǔ)句提升性能。

SQL與MySQL:澄清兩者之間的關(guān)係 SQL與MySQL:澄清兩者之間的關(guān)係 Apr 24, 2025 am 12:02 AM

SQL是一種用於管理關(guān)係數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言,而MySQL是一個(gè)使用SQL的數(shù)據(jù)庫(kù)管理系統(tǒng)。 SQL定義了與數(shù)據(jù)庫(kù)交互的方式,包括CRUD操作,而MySQL實(shí)現(xiàn)了SQL標(biāo)準(zhǔn)並提供了額外的功能,如存儲(chǔ)過(guò)程和觸發(fā)器。

比較SQL和MySQL:語(yǔ)法和功能 比較SQL和MySQL:語(yǔ)法和功能 May 07, 2025 am 12:11 AM

SQL和MySQL的區(qū)別與聯(lián)繫如下:1.SQL是標(biāo)準(zhǔn)語(yǔ)言,用於管理關(guān)係數(shù)據(jù)庫(kù),MySQL是基於SQL的數(shù)據(jù)庫(kù)管理系統(tǒng)。 2.SQL提供基本CRUD操作,MySQL在此基礎(chǔ)上增加了存儲(chǔ)過(guò)程、觸發(fā)器等功能。 3.SQL語(yǔ)法標(biāo)準(zhǔn)化,MySQL在某些地方有改進(jìn),如LIMIT用於限制返回行數(shù)。 4.使用示例中,SQL和MySQL的查詢語(yǔ)法略有不同,MySQL的JOIN和GROUPBY更直觀。 5.常見(jiàn)錯(cuò)誤包括語(yǔ)法錯(cuò)誤和性能問(wèn)題,MySQL的EXPLAIN命令可用於調(diào)試和優(yōu)化查詢。

SQL在行動(dòng)中:現(xiàn)實(shí)世界中的示例和用例 SQL在行動(dòng)中:現(xiàn)實(shí)世界中的示例和用例 Apr 18, 2025 am 12:13 AM

SQL在實(shí)際應(yīng)用中主要用於數(shù)據(jù)查詢與分析、數(shù)據(jù)整合與報(bào)告、數(shù)據(jù)清洗與預(yù)處理、高級(jí)用法與優(yōu)化以及處理複雜查詢和避免常見(jiàn)錯(cuò)誤。 1)數(shù)據(jù)查詢與分析可用於找出銷售量最高的產(chǎn)品;2)數(shù)據(jù)整合與報(bào)告通過(guò)JOIN操作生成客戶購(gòu)買報(bào)告;3)數(shù)據(jù)清洗與預(yù)處理可刪除異常年齡記錄;4)高級(jí)用法與優(yōu)化包括使用窗口函數(shù)和創(chuàng)建索引;5)處理複雜查詢可使用CTE和JOIN,避免常見(jiàn)錯(cuò)誤如SQL注入。

SQL入門(mén):基本概念和技能 SQL入門(mén):基本概念和技能 Apr 22, 2025 am 12:01 AM

SQL是一種用於管理和操作關(guān)係數(shù)據(jù)庫(kù)的語(yǔ)言。 1.創(chuàng)建表:使用CREATETABLE語(yǔ)句,如CREATETABLEusers(idINTPRIMARYKEY,nameVARCHAR(100),emailVARCHAR(100));2.插入、更新、刪除數(shù)據(jù):使用INSERTINTO、UPDATE、DELETE語(yǔ)句,如INSERTINTOusers(id,name,email)VALUES(1,'JohnDoe','john@example.com');3.查詢數(shù)據(jù):使用SELECT語(yǔ)句,如SELEC

sql敲代碼從哪一步開(kāi)始敲 sql代碼編寫(xiě)起點(diǎn)指南 sql敲代碼從哪一步開(kāi)始敲 sql代碼編寫(xiě)起點(diǎn)指南 Jun 04, 2025 pm 07:27 PM

寫(xiě)SQL代碼的起點(diǎn)是明確需求。 1)理解你要解決的問(wèn)題,確定所需數(shù)據(jù)和表的關(guān)係。 2)從簡(jiǎn)單的SELECT語(yǔ)句開(kāi)始設(shè)計(jì)查詢,逐步增加複雜性。 3)使用可視化工具理解表結(jié)構(gòu),並在復(fù)雜查詢時(shí)考慮使用JOIN。 4)測(cè)試查詢並使用EXPLAIN命令優(yōu)化性能,避免常見(jiàn)陷阱如NULL值處理和索引使用不當(dāng)。

See all articles