SpringBootの基本的な追加、削除、変更、クエリをJavaで実装する方法

WBOY
リリース: 2023-05-20 10:07:41
転載
1429 人が閲覧しました

SpringBootの基本的な追加、削除、変更、クエリをJavaで実装する方法

上図に示すように、アイデアには構築する必要があるさらに 7 つの重要なモジュールがあります。

(1) コントローラー パッケージ: SpringMVC について何かを経験または知っている友人は、コントローラーが制御層であることを知っているはずです。コントローラーは、ブラウザーの情報を受信し、関連する情報の送信に応答する場所に相当します。具体的には、コンピューター ネットワーク関連の知識も兼ね備えています。ブラウザでの使い方を理解する 情報を受け取り、その情報にどう応答するか コントローラ制御層で関連するデータ操作を実装します(ここで、大学院生時代の兄に特別な感謝を表したいと思います)長い間 Web プログラミングについて教えてくれて、それは私に大きな利益をもたらしました。皆さんが適切な時間を使えることを願っています。詳細情報と関連ビデオを確認して学習してください);
(2) エンティティ パッケージ: エンティティ クラスここに格納されているのは、単に Java でクラスの作成を学習するのと全く同じで、違いはありません;
(3) マッパーパッケージ:SpringMVC DAO 層(DAO 層(データ アクセス オブジェクト)の永続化層と呼ばれます) )). ここではデータベースを直接操作することができ、通常は 5 番目のパッケージ マッピング パッケージと組み合わせて使用​​されます;
(4) サービス パッケージ: SpringMVC ビジネス ロジック層で呼び出されるため、ここに格納されているクラスはすべて関連する処理に関連していますビジネス ロジック;
(5) マッピング パッケージ: リソースの下にクラスパスとして配置され、mybatis ファイルが保存されます。現在の SpringBoot は非常に統合されており、多くの構成があるため、ファイルをまとめることができ、mybatis 基盤をあまり持っていない友人でも使用できます。それを学ぶことができます。マッパー パッケージとマッピング パッケージが一緒に使用される理由は、これらがマッピング関係を形成し、データベース ファイルにアクセスするために組み合わせて使用​​されるためです;
(6) application.yml: グローバルなデフォルト設定ファイルとして、これはプロジェクト全体に適用され、多くの構成情報を統合するために、この構成ファイルは間違いなく不可欠です (ここでの構成ファイルの記述には yaml 言語を使用するのが最適です。記述が比較的単純で明確であるためです);
(7) application-dev.yml : これは特定の環境用の構成ファイルとみなされ、実際のプロジェクトと組み合わせる必要があります。プロジェクト自体が開発環境だけでなく、テストや本番といった一連の環境であるためです。開発を行う場合は、開発環境を使用して application-dev.yml を構成し、テストを行う場合は、テスト環境を使用して application-test.yml を構成し、運用を行う場合は、運用環境を使用して application-dev.yml を構成します。プロ.yml.現時点では開発環境についてのみ説明しているため、構成ファイル application-dev.yml を 1 つだけ使用します。特定の環境構成情報は、使用時に application.yml のデフォルト構成をオーバーライドするため、デフォルト構成のステートメントと環境構成のステートメント間の競合を心配する必要はありません。

(1) プログラムの入り口

すべての Java プログラムにはプログラムの入り口があり、SpringBoot の初期化時に DemoApplication 自体がすでに存在しているため、ここで多くの設定を行う必要はありません。

SpringBootの基本的な追加、削除、変更、クエリをJavaで実装する方法

package com.example.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
ログイン後にコピー

#@SpringBootApplication アノテーション: これは、これが springboot プロジェクトのスタートアップ項目クラスであることを示すために使用されます。目的は、自動構成を有効にすることです (実際には、 Configuration 構成クラスから継承されます。深く理解するには、全員が SpringBoot の原理を分析する必要があります)
●@MapperScan ("com.example.demo.mapper") は、マッパー ファイルをスキャンし、関連するデータベース ファイルに効果的にアクセスします。 URL マッピング (このアノテーションは非常に便利です!)

(2) データベース ファイルの作成

SpringBootの基本的な追加、削除、変更、クエリをJavaで実装する方法

SpringBootの基本的な追加、削除、変更、クエリをJavaで実装する方法

##●対応する SQL の作成

CREATE TABLE `water` (
  `id` int NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `salary` double(10,2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_unicode_ci;
ログイン後にコピー

(3) User エンティティ クラスの作成

package com.example.demo.entity;

/**
 * @description:    实体类
 * @author: Fish_Vast
 * @Date: 2021/8/25
 * @version: 1.0
 */
public class User {
    private String name;
    private Integer id;
    private Double salary;

    public User() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Double getSalary() {
        return salary;
    }

    public void setSalary(Double salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", salary=" + salary +
                '}';
    }
}
ログイン後にコピー
SpringBootの基本的な追加、削除、変更、クエリをJavaで実装する方法#誰もがよく知っているクラスです。 3 つのプライベート プロパティ、null パラメーター コンストラクター、対応する get メソッドと set メソッド、およびオーバーライドされた toString() メソッドを作成します。ここで注意すべき点は、プロパティを宣言するときは、宣言にラッパー クラスを使用するのが最善であるということです。

#Java の mybatis に関連する読み取りと入力において、なぜ基本的なデータ型ではなくパッケージ化クラスを使用しようとするのでしょうか?

① MySQL ではフィールドに値が割り当てられていない場合、デフォルト値は null ですが、データベースから確認しても null です。対応する Java コードでフィールドが int 型の場合、null は対応できませんint は基本を表すため、int 型に変換します。データ型は基本的な数値のみです。
②エンティティ クラスの属性には、値を割り当てることも、割り当てないこともできます。値を割り当てない場合、デフォルト値が設定されます。たとえば、int のデフォルト値は 0 です。ただし、値を積極的に 0 に設定することと、デフォルトで 0 に設定することは、2 つの異なる概念です。たとえば、クラスのスコア: 0 は、特定の学生のスコアが 0 であることを意味し、null は、学生が試験でスコアを持っていないことを意味します。これらは 2 つの異なる概念です。

(4)建立UserMapper接口

SpringBootの基本的な追加、削除、変更、クエリをJavaで実装する方法

package com.example.demo.mapper;

import com.example.demo.entity.User;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserMapper {
    //1.通过id查询用户信息
    User getUser(int id);
    //2.通过id删除用户信息
    int delete(int id);
    //3.更改用户信息
    int update(User user);
    //4.插入用户信息
    int save(User user);
    //5.查询所有用户信息
    List<User> selectAll();
}
ログイン後にコピー

●@Repository,注解它本身的作用便是标注数据访问组件,作为DAO对象,它将 DAO 导入 IoC 容器,并使未经检查的异常有资格转换为 Spring DataAccessException。通过这个注解能够报出更多发现不了的错误,更有利于对项目的维护和开发。其实@Repository不在接口上进行注明,我们的程序照样可以运行,因为在我们使用@MapperScan的时候,我们已经将我们的接口交给框架中的代理类,所以即便是我们不写,程序不会报错,只是我们在Service层写明接口的时候,IDEA会给出红色的波浪线。可以这样理解,标注@Repository是为了告诉编译器我将接口注入到了IoC容器了,你不要报错啦~
●相应地,写出增删查改和查询全部信息的五个方法。

(5)配置UserMapper.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
    <resultMap id="BaseResultMap" type="com.example.demo.entity.User">
        <result column="id" jdbcType="INTEGER" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="salary" jdbcType="DOUBLE" property="salary" />
    </resultMap>
    <!--查询用户信息-->
    <select id="getUser" resultType="com.example.demo.entity.User">
        select * from water where id = #{id}
    </select>
    <!--删除用户信息-->
    <delete id="delete" parameterType="int">
        delete from water where id=#{id}
    </delete>
    <!--返回所有用户信息-->
    <select id="selectAll"  resultType="com.example.demo.entity.User">
        select * from water
    </select>

    <!--增加用户信息-->
    <insert id="save" parameterType="com.example.demo.entity.User" >
        insert into water
        <trim prefix="(" suffix=")" suffixOverrides="," >
            <if test="id != null" >
                id,
            </if>
            <if test="name != null" >
                name,
            </if>
            <if test="salary != null" >
                salary,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides="," >
            <if test="id != null" >
                #{id,jdbcType=INTEGER},
            </if>
            <if test="name != null" >
                #{name,jdbcType=VARCHAR},
            </if>
            <if test="salary != null" >
                #{salary,jdbcType=DOUBLE},
            </if>
        </trim>
    </insert>

    <!--根据id更改用户信息-->
    <update id="update" parameterType="com.example.demo.entity.User">
        update water
        <set >
            <if test="name != null" >
                name = #{name,jdbcType=VARCHAR},
            </if>
            <if test="salary != null" >
                salary = #{salary,jdbcType=DOUBLE},
            </if>
        </set>
        where id = #{id,jdbcType=INTEGER}
    </update>
</mapper>
ログイン後にコピー

●mapper namespace用于绑定mapper接口的,当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应要执行的SQL语句(通过mapper方法名进行绑定);
●resultMap 定义了一个id为BaseResultMap的标识,type代表使用哪种类作为我们所要映射的类;