SQL ステートメントを使用せずに Springboot+Mybatis-plus を実装して複数のテーブルを追加する方法
Springboot Mybatis-plus で複数のテーブルを追加するために SQL ステートメントを使用しないでください
私が遭遇した問題の準備作業は、テスト環境で思考をシミュレートすることによって分解されます。パラメーターを使用して BrandDTO オブジェクト シミュレーションを作成します。バックグラウンドのパラメータ
遭遇した問題
Mybatis-plus で複数テーブルの操作を実行するのが非常に難しいことは誰もが知っています。参加すると、対応するマッパーのみを設定できます。柔軟性により、当事者 A が必要とする機能をより柔軟に変更できます。
しかし、柔軟な変更を必要としないごく普通の小規模なプロジェクトを実行する場合、 SQL ステートメントを書きたくないのですが、Mybatis を直接使用して、複数のテーブル (1 つのマスターと複数のコピー) データを追加する関数を使用したいのですが、どうすればよいですか?
データベースを見ると、次のことができます。製品テーブルがあることはわかっていますが、製品、製品画像、製品パラメータ、および 製品タイプはすべて 1 対多です。または多対 1 のリレーションシップですが、フロントエンドでフォームを直接送信できるようにしたいです 複数のテーブルでデータの追加を完了できます。複数テーブルの操作は避けられません
@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; }このクラスでは、次のように疑問に思うでしょう。ブランド エンティティ オブジェクトを直接カプセル化しないのはなぜですか?
以前にこのクラスを使用してテーブル結合クエリを実行し、各エンティティ クラスのパラメータを個別に配置したことがあり (重複する名前はありません)、このクラスには表示したいのでBrandクラスの属性をそのまま追加し、Brandに対応するtpyeは多(型)対一(Brand)のはずなのでここでは1つだけカプセル化しましたが、Brandにはone-toがあるのでImg と Parameter との多数の関係をリスト にカプセル化しました。このようにして、中間クラスに似たものが得られました。
(まず、インターフェイスは対応する BaseMapper
それで、いくつかの実験を繰り返した結果、次のテスト メソッドが得られました:@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); }思考の内訳: 次に、メソッド本体の各部分を分解して表現します。パラメーターを含む BrandDTO オブジェクトを作成します最初に、さまざまなパラメーターをカプセル化する 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<>(); //此操作能成功是因为我在对应的对象中生成了除了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);この部分は主にパラメータのカプセル化であり、これはフロントエンドの作業です。バックグラウンド作業をしましょうサーバーはパラメータを持つ BrandDTO オブジェクトを受け取ります バックグラウンドにパラメータを渡すシミュレーションを行います 各テーブルの対応するパラメータを取り出します
//取出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();上記の操作の後、ブランドに報告します テーブルに情報の行が追加され、主キーが返されます。 したがって、他のテーブルは対応する製品の ID を知っており、この ID を使用してテーブル内の外部キー ID を定義できます。
(このテスト クラスでは、マッパーを挿入したことに注意してください)使用する必要がある各エンティティ クラスのインターフェイスなので、挿入メソッドを呼び出すことができます)
//向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); }ループ Add を使用して、オブジェクト内のデータを各テーブルに 1 つずつ追加できます。 、コンソールを使用して、追加した製品に対応する主キー ID を取得する必要があります:
System.out.println(id);その後、実行した結果、ここで得られたデータは 3 で、製品をクエリするメソッドを呼び出しますby ID:
ここで Apifox を使用しています:
以上がSQL ステートメントを使用せずに Springboot+Mybatis-plus を実装して複数のテーブルを追加する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

Dreamweaver Mac版
ビジュアル Web 開発ツール
