Spring Boot触ってみる その4 ーSQLServerへの接続ー
Spring Boot触ってみる その3 ーThymeleaf Layout Dialectでレイアウトを共通化ー - endokのブログ
の続き。
SpringBootでのSQLServerへの接続方法を確認する。
SpringBoot特有の設定ということはなく、Springであれば同じような設定となるだろう。
その1(http://endok.hatenablog.com/entry/2016/06/04/124011)で作成したサンプルプロジェクトを引き続き利用する。
目次
Microsoft JDBC Driver 4.2 for SQL Serverの導入
Microsoft JDBC Driver 4.2 for SQL Serverを利用する。
Maven管理はできるが、セントラルリポジトリからはダウンロードできないらしい。
そのため自分でMicrosoftからダウンロードしてMavenのローカルレポジトリに導入する必要がある。
ダウンロード
https://www.microsoft.com/en-us/download/details.aspx?id=11774
からsqljdbc_4.2.6420.100_jpn.exeをダウンロードする。
展開されたファイルに含まれる"sqljdbc42.jar"を利用する
pom.xmlへの追加
下記をpom.xmlに追記する。
<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>sqljdbc</artifactId> <version>4.2</version> </dependency>
この時点ではSTS上で
"Missing artifact com.microsoft.sqlserver:sqljdbc:jar:4.2"
というエラー扱いとなる。
Mavenローカルリポジトリへのインストール
今回はSTS上のMavenを使ってインストールしてみる。
Mavenがインストールされていればmvnコマンドで同等の内容を実行しても問題ない。
[Run]→[Run Configurations..]を開く。
左メニューのMaven Buildを右クリックし、Newを選択する。
Name:適当に名前を付ける
Base directory:sqljdbc.jarのあるフォルダを指定
Goals:install:install-file
Parameter:下記を追加する。
file:sqljdbc42.jar ※Base directoryからのファイルパス
packaging:jar
groupId:com.microsoft.sqlserver
artifactId:sqljdbc
version:4.2
Runボタンを押して実行する。
BUILD SUCCESSとなれば成功。
その後、プロジェクトを右クリックして[Maven]→[Update Project..]を実行するとpom.xmlのエラーが解消する。
Microsoft JDBC Driver 4.2 for SQL Serverの利用
エンティティクラスの作成
今回は下記memberクラスを利用する。
@Entity @Table public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column private long id; @Column(length = 50, nullable = false) private String name; @Column(nullable = true) private Integer age; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
接続設定
localhost:1433で動作するSQLServerインスタンスのtestdbデータベースに接続する場合、下記をapplication.propertiesに記載する。
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=testdb spring.datasource.username=sa spring.datasource.password=sqladmin spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
テーブルの作成
今回はtestdbというデータベースを作成して利用する。
https://msdn.microsoft.com/ja-jp/library/ms378599(v=sql.110).aspx
のデータ型を参考にテーブルを定義してもよいが、hibernateに自動生成させることもできる。
application.propertiesに下記記述を追加する。
spring.jpa.hibernate.ddl-auto=create
この設定を行ったうえでアプリケーションを起動すると、Entityの定義をもとにテーブルを自動生成してくれる。
この設定値は、none,update,create,create-drop,validateのいずれかを指定できる。
組み込みDBの場合はcreate-dropがデフォルト値、その他DBの場合はnoneがデフォルト値となるとのこと。
この機能で作成されたテーブル定義は下記の通りとなった。
CREATE TABLE [dbo].[member]( [id] [numeric](19, 0) IDENTITY(1,1) NOT NULL, [age] [int] NULL, [name] [varchar](50) NOT NULL, PRIMARY KEY CLUSTERED ( [id] ASC ) )
動作確認
テーブルの作成ができていれば接続設定の正しさは確認できているが、一応データの保存と取得を行っておく。
下記のような保存、参照処理をControllerで実行する。
@Controller public class HelloController { @Autowired MemberRepository repository; @RequestMapping(value = "/hello") public String index(Model model) { Member newMember = new Member(); newMember.setName("新規データ"); newMember.setAge(50); repository.save(newMember); List<Member> list = repository.findAll(); model.addAttribute("list", list); return "hello"; } }
テンプレートには下記を記述する。
<table> <tr> <th>ID</th> <th>名前</th> <th>年齢</th> </tr> <tr th:each="data : ${list}"> <td th:text="${data.id}"></td> <td th:text="${data.name}"></td> <td th:text="${data.age}"></td> </tr> </table>
アクセスすると下記のようにデータの保存、取得ができていることが確認できる。
(1,2は事前に登録しておいたデータ)