質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

Q&A

解決済

1回答

8068閲覧

Spring + MyBatis でDatasourceの使用について

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

0グッド

0クリップ

投稿2019/05/13 04:53

Spring BootでO/RマッパーにMyBatisを用いてWebAPIを作成する為に現在勉強中です。

教材ではController→Domain(Service)→Repository→Mapper→RDBの流れでデータへアクセスするのですが、
RDBに接続する為に使っているDataSourceがどこで紐づいているのかよくわかりません。

具体的なソースコードでいうと、
(repositoryの実装クラス、O/Rマッパークラス、datasource関連のクラスを記載しています)

  • datasource(設定値はapplication.ymlに記載)

java

1@Configuration 2@EnableConfigurationProperties(DataSourceConfigurationProperties.class) 3public class DataSourceConfiguration { 4 5 private final DataSourceConfigurationProperties properties; 6 7 public DataSourceConfiguration(DataSourceConfigurationProperties properties) { 8 this.properties = properties; 9 } 10 11 @Bean 12 public DataSource dataSource() { 13 BasicDataSource dataSource = new BasicDataSource(); 14 15 //JDBCドライバ指定 16 dataSource.setDriverClassName(this.properties.getDriverClassName()); 17 18 //接続情報 19 dataSource.setUrl(this.properties.getUrl()); 20 dataSource.setUsername(this.properties.getUsername()); 21 dataSource.setPassword(this.properties.getPassword()); 22 23 //コネクション数設定 24 dataSource.setInitialSize(this.properties.getInitialSize()); 25 dataSource.setMaxIdle(this.properties.getMaxIdle()); 26 dataSource.setMinIdle(this.properties.getMinIdle()); 27 28 return dataSource; 29 } 30} 31 32@ConfigurationProperties(prefix = "dbcp2.jdbc") 33public class DataSourceConfigurationProperties { 34 35 private String url; 36 37 private String driverClassName; 38 39 private String username; 40 41 private String password; 42 43 private int initialSize; 44 45 private int maxIdle; 46 47 private int minIdle; 48 49 public String getUrl() { 50 return url; 51 } 52 53 public void setUrl(String url) { 54 this.url = url; 55 } 56 57 public String getDriverClassName() { 58 return driverClassName; 59 } 60 61 public void setDriverClassName(String driverClassName) { 62 this.driverClassName = driverClassName; 63 } 64 65 public String getUsername() { 66 return username; 67 } 68 69 public void setUsername(String username) { 70 this.username = username; 71 } 72 73 public String getPassword() { 74 return password; 75 } 76 77 public void setPassword(String password) { 78 this.password = password; 79 } 80 81 public int getInitialSize() { 82 return initialSize; 83 } 84 85 public void setInitialSize(int initialSize) { 86 this.initialSize = initialSize; 87 } 88 89 public int getMaxIdle() { 90 return maxIdle; 91 } 92 93 public void setMaxIdle(int maxIdle) { 94 this.maxIdle = maxIdle; 95 } 96 97 public int getMinIdle() { 98 return minIdle; 99 } 100 101 public void setMinIdle(int minIdle) { 102 this.minIdle = minIdle; 103 } 104}
  • repository

java

1@Repository 2public class EmployeeRepositoryImpl implements EmployeeRepository { 3 4 private static final Logger logger = LoggerFactory.getLogger(EmployeeRepositoryImpl.class); 5 6 private final SqlSessionTemplate sqlSessionTemplate; 7 8 public EmployeeRepositoryImpl(SqlSessionTemplate sqlSessionTemplate) { 9 this.sqlSessionTemplate = sqlSessionTemplate; 10 } 11 12 @Override 13 public List<Employee> findList(EmployeeSelector selector) { 14 return this.sqlSessionTemplate.getMapper(EmployeeMapper.class).find(selector); 15 } 16}
  • mapper

java

1public interface EmployeeMapper { 2 3 List<Employee> find(EmployeeSelector selector); 4 5}
  • mapper.xml

xml

1<?xml version="1.0" encoding="UTF-8" ?> 2<!DOCTYPE mapper PUBLIC 3 "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5<mapper namespace="jp.co.sample.springhandson.api.repository.mybatis.EmployeeMapper"> 6 7 <resultMap id="Employee" type="jp.co.sample.springhandson.api.domain.Employee"> 8 <id property="id" column="ID"/> 9 <result property="name" column="NAME"/> 10 <result property="jobCategory" column="JOB_CATEGORY" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/> 11 <result property="createdOn" column="CREATED_ON"/> 12 <result property="updatedOn" column="UPDATED_ON"/> 13 <result property="deletedOn" column="DELETED_ON"/> 14 <result property="deleted" column="DELETED"/> 15 </resultMap> 16 17 <select id="find" resultMap="Employee"> 18 SELECT 19 ID, NAME, JOB_CATEGORY, CREATED_ON, UPDATED_ON, DELETED_ON, DELETED 20 FROM 21 EMPLOYEE 22 <where> 23 DELETED = false 24 <if test="ids != null"> 25 AND ID IN 26 <foreach item="id" index="index" collection="ids" open="(" separator="," close=")">#{id}</foreach> 27 </if> 28 <if test="name != null"> 29 AND NAME LIKE '%' || #{name} || '%' 30 </if> 31 <if test="jobCategories != null"> 32 AND JOB_CATEGORY in 33 <foreach item="enum" index="index" collection="jobCategories" open="(" separator="," close=")">#{enum.ordinal}</foreach> 34 </if> 35 </where> 36 ORDER BY ID ASC 37 </select> 38</mapper>
  • application.yml

YAML

1#------------------------------------------------------ 2# JDBC接続設定(DataSourceConfigurationPropertiesで読み込む) 3#------------------------------------------------------ 4dbcp2.jdbc: 5 driver-class-name: org.apache.derby.jdbc.ClientDriver 6 url: jdbc:derby://localhost:1527/spring-handson;create=true 7 username: foo 8 password: bar 9 initial-size: 1 10 max-idle: 3 11 min-idle: 1 12 13#------------------------------------------------------ 14# MyBatis設定 15#------------------------------------------------------ 16mybatis: 17 mapper-locations: classpath:jp/co/sample/springhandson/api/repository/mybatis/*.xml

このようなコーディングの場合、
DataSourceConfigurationクラスとO/Rマッパー(MyBatis)はどうやって結びついてるのでしょうか?

※このソースコードはきちんと動作してローカルのderbyから値を取って来れます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

@Configuration
@EnableConfigurationProperties(DataSourceConfigurationProperties.class)
DataSourceConfiguration

で設定を書かれているのdataSource()メソッドにて、SpringBootが扱うデータソースの設定を記載していますよね。

java

1@Bean 2public DataSource dataSource() { 3 4}

の部分でデータソースを返しています。

ここで取得できるDataSourceはSpringのDB接続コンポーネントで扱われ、特別に接続設定を上書きしなければMyBatis-Springプラグイン経由で、MyBatisはSpringのデータソースを自動的に引き継ぎます。

http://www.mybatis.org/spring/ja/index.html

投稿2019/05/13 16:21

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/15 02:10

す、すごすぎる。。。 知らなければ全く読めないですね。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問