Java + Spring-boot + H2でインメモリDB接続を試してみる
はじめに
参考:
インメモリデータベースとは、非リレーショナルデータベースの一種です。データをディスクや SSD に保存するデータベースではなく、データストレージ用のメモリに主に依存します。インメモリデータベースは、ディスクにアクセスする必要性を除くことによって、最小限の応答時間を達成するよう設計されました。
準備
登場人物
- H2
- JPA
- エンティティクラス
- レポジトリ(インターフェース)
- コントローラー
流れ
ビルドファイルの修正
pom.xml
<!-- DBの接続--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency>
エンティティクラスの作成
- Laravelでいうところのモデル?
- Kotlinだとdata classでめっちゃ簡単にかけることを改めて実感
作成
@Entity @Table(name=“user") public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) //??? @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; } :
- @Entityでモデルであることを記述
- @Tableでテーブルを明示的に指定(必須ではない)
- privateでレコードを記述
- setter / getterを記述
- @Id/@Columnなどでフィールドの説明
@Id/@Columnなどでフィールドの説明
- @Id
- プライマリーキーの指定
- @GeneratedValue(strategy = GenerationType.AUTO)
- 主キーの生成
- @Column
- 制限を指定
レポジトリの作成
- JpaRepositoryを継承する事で、fineOne、findAll、save、deleteの4メソッドが使用
作成
@Repository public interface DataRepository extends JpaRepository<Data,Long> { }
- @Repositoryでリポジトリであることを記述
- JpaRepositoryを継承
JpaRepositoryを継承
// JpaRepository<エンティティ , IDタイプ>
JpaRepository<Data,Long>
コントローラーの修正
- リポジトリを利用するための処理記述
作成
@Autowired MyDataRepository repository; @RequestMapping(value = "/db" , method = RequestMethod.GET) public ModelAndView index(ModelAndView mav){ mav.setViewName(“index”); Iterable<Data> list = repository.findAll(); mav.addObject("datalist",list); return mav; }
- @AutoWiredでnewせずに使える(ここまだ曖昧)
- Iterableでfor-eachをつかえる形式にしている
- repository.findAllで全データをlistに入れている
画面には下記のように表示される(/db)
[]
データはないが、インメモリなDBは使用可能になってる
参考
https://www.walbrix.com/jp/blog/2010-05-java.html