Springboot+mybatisマルチデータソースの構成と使用
3037 ワード
以前の記事『Springboot統合mybatisのマルチデータソース構成と使用(XML版)』では、プロジェクト全体の構築の流れを比較的詳細に紹介していたので、この編では異なる部分の記述に重点を置き、同じ部分はXML版に移行してください.もちろんソースコードを見ると基本的に理解しやすいので、ソースコードは文末で与えられます.
注釈版には様々なxmlファイルがありません.dao層やmapper層からデータベースへのマッピングをどのように処理するかを聞くかもしれません.もちろん、簡単な注釈を加えるだけでできます.
プロファイル:
XML版のインタフェースに比べてxmlファイルで定義されるため、mapperインタフェースレイヤではいくつかの方法を定義するだけでよい.では、注釈版では、データベースへのマッピングを実現するためにメソッドに注釈を付ける必要があります.UserMapper 1(UserMapper 2類同)のインタフェース実装ファイルは以下の通りである.
なお、マッピング中は、データベースがUserNameのようなフィールド(データベースの構文フォーマットは一般的にuser_name)を認識することはできません.そのため、返されるuser_をエスケープする必要があります.nameフィールドはUserNameに変換され、プログラムが認識できるようになります.構文は次のとおりです.
結果が返されない場合は、マッピングは必要ありません.ソースリンク
注釈版には様々なxmlファイルがありません.dao層やmapper層からデータベースへのマッピングをどのように処理するかを聞くかもしれません.もちろん、簡単な注釈を加えるだけでできます.
プロファイル:
spring.datasource.primary.driverClassName = com.mysql.jdbc.Driver
spring.datasource.primary.url = jdbc:mysql://localhost:3306/mybatis1?useUnicode=true&characterEncoding=utf-8
spring.datasource.primary.username = root
spring.datasource.primary.password = root
spring.datasource.secondary.driverClassName = com.mysql.jdbc.Driver
spring.datasource.secondary.url = jdbc:mysql://localhost:3306/mybatis2?useUnicode=true&characterEncoding=utf-8
spring.datasource.secondary.username = root
spring.datasource.secondary.password = root
XML版のインタフェースに比べてxmlファイルで定義されるため、mapperインタフェースレイヤではいくつかの方法を定義するだけでよい.では、注釈版では、データベースへのマッピングを実現するためにメソッドに注釈を付ける必要があります.UserMapper 1(UserMapper 2類同)のインタフェース実装ファイルは以下の通りである.
package com.springboot.multi_resources_mybaits.mapper.map1;
import com.springboot.multi_resources_mybaits.entity.User;
import com.springboot.multi_resources_mybaits.enums.AuthorityEnum;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@Mapper
public interface UserMapper1 {
// Result , Sql , userName
@Select("SELECT * FROM user")
@Results({
@Result(property = "userName",column = "user_name"),
@Result(property = "authority",column = "authority",javaType = AuthorityEnum.class)
})
List findAll();
@Insert("INSERT INTO user(user_name,authority) VALUES(#{userName},#{authority})")
@Results({
@Result(property = "userName",column = "user_name"),
@Result(property = "authority",column = "authority",javaType = AuthorityEnum.class)
})
void addOne(User user);
@Select("SELECT * FROM user WHERE id=#{id}")
@Results({
@Result(column = "user_name",property = "userName"),
@Result(column = "authority",property = "authority",javaType = AuthorityEnum.class)
})
User findOne(Integer id);
@Update("UPDATE user SET user_name = #{userName},authority = #{authority} WHERE id = #{id}")
void updateOne(User user);
@Delete("DELETE FROM user WHERE id = #{id}")
void delOne(Integer id);
}
なお、マッピング中は、データベースがUserNameのようなフィールド(データベースの構文フォーマットは一般的にuser_name)を認識することはできません.そのため、返されるuser_をエスケープする必要があります.nameフィールドはUserNameに変換され、プログラムが認識できるようになります.構文は次のとおりです.
@Results({
@Result(column = "user_name",property = "userName"),
@Result(column = "authority",property = "authority",javaType = AuthorityEnum.class)
})
結果が返されない場合は、マッピングは必要ありません.ソースリンク