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から値を取って来れます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/05/15 02:10