この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:T
更新日時:2019-01-30 09:37:30

タイトル: DB接続設定や値の取得
SEOタイトル: DB接続設定から値の取得まで

本稿ではSpring FrameworkにおけるDBの作成~取得まで一通りを説明します。

 

DBの作成

データベースを使用するので、今回はMySQLを用意します。

Windowsの場合、MySQLを単独でインストールすると色々と設定がめんどくさいので、今回はXAMPPのMySQLを使用します。XAMPPのインストールはこちらを参照。

MySQLにデータベースおよびテーブルを作成しましょう。以下のコマンドを実行します。

CREATE DATABASE spring_db CHARACTER SET utf8 COLLATE utf8_bin;

USE spring_db;

CREATE TABLE users (
    user_name VARCHAR(50) PRIMARY KEY,
    password VARCHAR(50) NOT NULL
);
  
INSERT INTO users(
    user_name
    , password
)VALUES(
    'tarou'
    , 'password'
),(
    'jirou'
    ,'password'
);

 

JDBCを記載

pom.xmlに以下の記述を追加しましょう。

<!-- JDBC -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.0.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.46</version>
</dependency>

<!-- CGLIB -->
<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>3.2.6</version>
</dependency>

※ついでにCGLIBというライブラリも記載しておきましょう。このライブラリはInterfaceの実装でないbeanをInjectionする際に必要となります。

 

DB接続設定

src/maim/resources」に以下の内容の「jdbc.properties」ファイルを作成しましょう。

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_db
jdbc.username=root
jdbc.password=

 

DB設定用のクラスを用意します。

「com.example.springmvc.config」パッケージを作成して、以下の内容の「DBConfig.java」を作成しましょう。

@Configuration
@PropertySource({"classpath:/jdbc.properties"})
public class DBConfig {

    @Autowired
    private 
Environment environment;

    @Bean
    public 
DataSource datasource() {
        final DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(environment.getProperty("jdbc.driverClassName"));
        dataSource.setUrl(environment.getProperty("jdbc.url"));
        dataSource.setUsername(environment.getProperty("jdbc.username"));
        dataSource.setPassword(environment.getProperty("jdbc.password"));
        return dataSource;
    }

    @Bean
    public 
DataSourceTransactionManager transactionManager() {
      return new DataSourceTransactionManager(datasource());
    }

    @Bean
    public 
JdbcTemplate jdbcTemplate() {
      return new JdbcTemplate(datasource());
    }
}

@PropertySourceで先ほど作成した「jdbc.properties」を読み込み、datasource()メソッド内で設定内容をリターンしています。

メソッド内を見るとenvironmentから設定を取得していることが分かります。

このように、読み込まれた設定情報は自動的にEnvironmentにインジェクションされます。

後述しますが、あるクラスからDBアクセスをする際にはJdbcTemplateクラスを通してDBへアクセスすることになります。

DataSourceTransactionManagerはトランザクションが発生する際に使用することになります。

DBの設定は以上となります。

 

DBから値を取得

それでは実際にDBから値を取得しましょう。

デフォルトで用意されているHomeControllerを以下のように書き換えましょう。

@Controller
public class HomeController {

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

    @Autowired
    JdbcTemplate jdbcTemplate;

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model) {
        logger.info("Welcome home! The client locale is {}.", locale);

        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);

        String formattedDate = dateFormat.format(date);

        model.addAttribute("serverTime", formattedDate);

        //ユーザーを取得
        List<Map<String, Object>> users = jdbcTemplate.queryForList(
                "SELECT user_name, password FROM users");;

        model.addAttribute("users", users);

        return "home";
    }

}

インジェクションしたJdbcTemplateを通じてDBにアクセスしています。

これをmodelに格納することで画面側で格納した値を使用することができるようになります。