2021SpringBoot統合MyBatisの概要


はじめに:
データベースをまだ持っていない場合は、最初にデータベースをインストールする必要があります。それがローカル、仮想マシン、またはサーバーであるかどうかにかかわらず、データベースをベースとして持つ必要があります。Linuxでmysqlデータベースをインストールする方法の詳細なチュートリアルを提供します。私のガールフレンドはそれを読みます: mysqlデータベースはLinux環境
インストールされ、SpringBootプロジェクトはデフォルトでここに確立されています。SpringBootをすばやくビルドする方法がわからない場合プロジェクトについては、次の記事を参照してください: Jsp + SpringBootプロジェクトをすばやくビルドし ます。

1.統合プロセス

SpringBootは主に次のステップでMyBatisを統合します:関連する依存関係のインポート、application.propertiesファイルの構成、サービスインターフェースとその実装クラスの作成、daoインターフェースの作成、daoインターフェースのメソッドコンテンツに従ってマッパーファイルの作成、そしてこれに従って各ステップを実行しますプロセス詳細を提供します。

1.関連する依存関係をインポートします

必要性がここにインポートすることを依存関係は、MyBatisの依存パッケージは、MySQLデータベースドライバパッケージ、およびデータソース接続プールの依存パッケージが含まれ、次の通り:
バージョン紹介:
SpringBoot:2.4.4
MyBatisのスプリング・ブート・スターター:2.1.2
MySQLを-コネクター-java:5.1.38
druid:1.1.19

	<!--引入mybatis的依赖-->
	<dependency>
	   <groupId>org.mybatis.spring.boot</groupId>
	   <artifactId>mybatis-spring-boot-starter</artifactId>
	   <version>2.1.2</version>
	</dependency>
	
	<!--引入连接mysql的驱动-->
	<dependency>
	   <groupId>mysql</groupId>
	   <artifactId>mysql-connector-java</artifactId>
	   <version>5.1.38</version>
	</dependency>
	
	<!--引入数据源连接池依赖-->
	<dependency>
	   <groupId>com.alibaba</groupId>
	   <artifactId>druid</artifactId>
	   <version>1.1.19</version>
	</dependency>

2.構成ファイルapplication.properties

ここで構成する必要のあるパラメーターは、データベースとmybatisです。詳細は次のとおりです。他のデータベースの構成パラメーターを指定する必要はないことに注意してください。SpringBootにはデフォルトの構成があります。

# 数据库相关配置
#连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#驱动类
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#数据库地址
spring.datasource.url=jdbc:mysql://192.168.150.130:3306/shiro?characterEncoding=UTF-8&useSSL=false
#数据库用户名与密码
spring.datasource.username=root
spring.datasource.password=super

# mybatis 别名配置,配置该参数mapper中才认识自定义类型
mybatis.type-aliases-package=com.example.demo5.entry
# 包扫描,配置了该参数MyBatis才能找到我们写mapper文件
mybatis.mapper-locations=classpath:com/example/demo5/mapper/*.xml

3.サービスインターフェイスとその実装クラスを作成し、daoインターフェイスを作成します

これについては何も言うことはありません。つまり、通常のインターフェイスが作成され、クラスが実装されてから、daoインターフェイスが呼び出されます。コードは次のとおりです。

  1. サービスインターフェース

    public interface ShiroUserService {
          
          
        void insertUser(ShiroUser shiroUser);
        ShiroUser queryUser(String username);
    }
    
  2. サービスインターフェイス実装クラス

    @Service
    @Transactional
    public class ShiroUserServiceImpl implements ShiroUserService {
          
          
    
       @Resource
       private ShiroUserDao shiroUserDao;
    
       @Override
       public void insertUser(ShiroUser shiroUser) {
          
          
           //使用MD5+盐+hash散列进行对密码加密
           String salt = SaltUttil.getSalt(10);
           Md5Hash md5Hash = new Md5Hash(shiroUser.getPassword(),salt ,2048);
           shiroUser.setPassword(md5Hash.toString());
           shiroUser.setSalt(salt);
           shiroUserDao.insertUser(shiroUser);
       }
    
       @Override
       public ShiroUser queryUser(String username) {
          
          
           ShiroUser shiroUser = shiroUserDao.queryUser(username);
           return shiroUser;
       }
    }
    
  3. daoインターフェースの作成

    public interface ShiroUserDao {
          
          
        void insertUser(ShiroUser shiroUser);
        ShiroUser queryUser(String username);
    }
    

    ここでマッパーアノテーションを使用することも、マッパースキャンアノテーションをスタートアップクラスに追加することもできます。これらのアノテーションは両方とも、daoファイルとマッパーファイルを一緒にマップできます。マッパースキャンアノテーションをスタートアップクラスに追加することをお勧めします。スキャンする必要のあるパッケージパスを渡すには、次のようにします。

    @MapperScan(value = "com.example.demo5.dao")
    @SpringBootApplication
    public class Demo5Application {
          
          
        public static void main(String[] args) {
          
          
            SpringApplication.run(Demo5Application.class, args);
        }
    }
    

4.daoに基づいてマッパーファイルを作成します

まず、mapper.xmlファイルを保存するためにリソースフォルダーの下にフォルダーを作成する必要があります。フォルダーのパスは、appliction.propertiesで構成したパスです。実際、最初に作成してから構成する必要があります。これは次のように記述されています。ここで一緒に書き込むを構成します

  1. マッパーフォルダ
    作成する必要はありません。パスはdaoまたは誰とでも一致している必要はありません。マルチレベルのファイルディレクトリを作成するにはスラッシュを使用する必要があることに注意してください。ドットは使用しないでください。ドットは単一を作成します。レベルのディレクトリ構造。このため、私はそれを踏んだ。ピットを通過した後、私は深く感銘を受けた。
    ここに画像の説明を挿入

  2. mapper.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.demo5.dao.ShiroUserDao">
    
        <sql id="shiro_user_fields">
          oid,username,password,salt
        </sql>
    
        <insert id="insertUser" parameterType="ShiroUser" useGeneratedKeys="true" keyProperty="oid">
            insert into shiro_user values (#{
          
          oid},#{
          
          username},#{
          
          password},#{
          
          salt})
        </insert>
    
        <select id="queryUser" parameterType="java.lang.String" resultType="ShiroUser">
            select
            <include refid="shiro_user_fields"/>
            from shiro_user where 1=1
            <if test="username != null and username != ''">
              and username = #{
          
          username}
            </if>
        </select>
    </mapper>
    

    これもテンプレートとして使用できる標準のマッパーファイルです。特定のマッパーファイルの各文の意味を1つずつ説明していません。この記事はプロセスを要約することを目的としています。

5.統合を完了します

実際、SpringBoot + MyBatisの統合はこれで完了です。エンティティクラスを作成し、コントローラインターフェイスを作成する非メインプロセスは記述されていません。最初は複雑なことではありませんが、これが唯一の統合方法ではありませんが、この統合方法はより高速であり、高速ルートは、多くのxml構成を節約するSpringBootによって提供されるMybatisランチャーの使用にあります。しかし、どんなに単純なことでも、さまざまな問題が発生する可能性があります。以下に、統合プロセス中に発生する可能性のあるさまざまな問題をリストし、回答を示し、自分で要約を作成し、それが読者の通過にも役立つことを願っています。

2.問題の要約

このプロセスでは、必然的に多くの問題が発生します。このアーキテクチャに長い間触れてきた人にとっては、このアーキテクチャに不慣れな人にとっては、さまざまなbdが必要になることが一目でわかります。ここに1つずつリストされているいくつかの一般的な問題があります。

1. daoでマッパーアノテーションを使用しますか?

上記の統合プロセスでは、daoにアノテーションはありませんが、実際には、各daoファイルにMapperアノテーションを追加して、daoをmapper.xmlファイルに関連付け、daoの実装クラスを自動的に生成できます。スプリングコンテナに注入します。ただし、MapperScanアノテーションをスタートアップクラスに追加すると、アノテーションと同じ効果があります。

2.サーバーのID検証なしのSSL接続は推奨されません

ここに画像の説明を挿入
これは、データベースが配置されているサーバーのセキュリティを検証できないことが原因です。Springに値をチェックさせず、データベースパス構成にuseSSL = falseを追加することができます。

spring.datasource.url=jdbc:mysql://192.168.150.130:3306/shiro?characterEncoding=UTF-8&useSSL=false

これは解決されました。

3.BindingExceptionバインディング例外

これは、IDEAがデフォルトでxmlファイルをコンパイルしないためです。プロジェクトのコンパイル時にxmlファイルを一緒にコンパイルするように指示するには、pomファイルのビルドレベルで次のコンテンツを追加する必要があります。

		<resources>
            <resource>
                <directory>src/main/Java</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.* </include>
                </includes>
            </resource>
        </resources>

4.データベース接続エラーが報告された場合

このエラーは作成者によって発生しましたが、復元されていません。データベースの構成パラメーターはすべて正常です。データベースも正常です。ただし、接続できません。この時点で、データベースの他の接続パラメータが追加されており、正常です。ただし、参考までに復元されていません。

spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5

5.主キーの問題が報告された場合

エラーが報告されるか、これら2つのパラメーターがマッパーファイルの挿入ステートメントで構成されていない場合は、自動生成された主キーを使用し、2番目はデータベースの主キーの名前です。両方が構成されている場合は、データベースはサポート付きで構成されています主キーがインクリメントされます。

useGeneratedKeys="true" keyProperty="oid"

ここに画像の説明を挿入

6.文字化けしたデータストレージの問題

次のように、application.propertiesでデータベースアドレスを構成するときにcharacherEncoding = UTF-8を追加します。

spring.datasource.url=jdbc:mysql://192.168.150.130:3306/shiro?characterEncoding=UTF-8&useSSL=false

また、データベースがUTF-8で作成されているかどうかを確認してください。
ここに画像の説明を挿入
これらすべてが正常な場合、フロントエンドとバックエンドの相互作用で文字化けが発生する可能性があります。jsp、htmlなどのエンコードかどうかなど、フロントエンドファイルのエンコードが正常かどうかに注意してください。間違っている。

7. Autowiredアノテーションを使用してdaoを挿入すると、IDEAは使用可能なBeanが見つからないことを要求します

上記の統合プロセスでautowiredが使用されている場合、この問題は次のように促されます。IDEAは、
ここに画像の説明を挿入
注入できるBeanがないことを要求しますが、daoインターフェイスの実装クラスを提供していないため、IDEAがそうするのはなぜですか。 、IDEAは当然それを検出できませんが、無視できます。Mybatisが実装クラスを実装してSpringコンテナに挿入するため、実行時に問題が発生しないため、コンパイルと実行時に影響はありませんが、このプロンプトを見ると、Resourceに置き換えることができ、問題はありません。

8.実行中のプログラムはtypeExceptionを表示し続けます

これのほとんどはmapper.xmlの問題が原因です。マッパーファイルを注意深くチェックして、パラメーターのタイプ、数、#の使用などに問題がないかどうかを確認してください。
上記は、統合プロセス中に発生する可能性のある問題の一部です。当然、次回問題をすばやく特定するために分類されます。それが通り過ぎるのに役立つ場合は、はるかに優れています。

3.まとめ

この記事では、SpringBootとMyBatisを統合するプロセスと、発生する可能性のある問題を整理します。統合プロセスでは、主要な記述を選択しますが、一部は記述されていません。問題は一般的な問題です。実際、SpringBoot統合がどのようなものであっても、これらの手順はすべてです。最初の手順は依存関係をインポートすることであり、2番目の手順は構成ファイルを変更することです。次に、コーディングを開始します。これが主なプロセスであり、整理の目的は、自分で繰り返し間違いを犯すことであり、またあなたが通り過ぎるのを助けることを望んでいます。

おすすめ

転載: blog.csdn.net/m0_46897923/article/details/115245892