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

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

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

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

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

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

我所遇到的問題

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

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

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

#準(zhǔn)備工作

因?yàn)榇瞬僮髦拔乙呀?jīng)使用了mybatis -plus-join的多表查詢操作,所以我已經(jīng)產(chǎn)生了一個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;

}

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

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

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

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

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

    }

思維分解一下:

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

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

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

        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<>();
        //此操作能成功是因?yàn)槲以趯?yīng)的對象中生成了除了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)槲以趯?yīng)的對象中生成了除了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);

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

模擬對後臺傳遞參數(shù)

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

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

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

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

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

(請注意,在這個測試類別中我把所需要用的各個實(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);
        }

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

System.out.println(id);

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

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

可以看出來我們的資訊已經(jīng)插入了表格.傳回值部分為null是因?yàn)槲覍懙亩啾聿樵冇幸恍┬ug,但是在資料庫仍然是有資料的,由此可見,這個測試是成功了,接下來只要將程式碼CV到對應(yīng)的service,在controller層模擬傳入一個Json物件就可以檢驗(yàn)是否可行!

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

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(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整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

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

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

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

SQL和MySQL的關(guān)係是:SQL是用於管理和操作數(shù)據(jù)庫的語言,而MySQL是支持SQL的數(shù)據(jù)庫管理系統(tǒng)。 1.SQL允許進(jìn)行數(shù)據(jù)的CRUD操作和高級查詢。 2.MySQL提供索引、事務(wù)和鎖機(jī)制來提升性能和安全性。 3.優(yōu)化MySQL性能需關(guān)注查詢優(yōu)化、數(shù)據(jù)庫設(shè)計和監(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ù)庫和表:使用CREATEDATABASE和CREATETABLE命令。 2.插入和查詢數(shù)據(jù):通過INSERTINTO和SELECT語句操作數(shù)據(jù)。 3.優(yōu)化查詢:使用索引和EXPLAIN語句提升性能。

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

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

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

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

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

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

SQL入門:基本概念和技能 SQL入門:基本概念和技能 Apr 22, 2025 am 12:01 AM

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

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

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

See all articles