Dao + h2 + JDBCでDB接続する

インメモリデータベースとは、非リレーショナルデータベースの一種です。データをディスクや SSD に保存するデータベースではなく、データストレージ用のメモリに主に依存します。インメモリデータベースは、ディスクにアクセスする必要性を除くことによって、最小限の応答時間を達成するよう設計されました。

https://makoo5.hatenablog.com/entry/2019/09/06/004605

全体像

的確ではないがこんな感じの認識

con → Service → [ Dao → jdbc ]→ db f:id:makoo5:20190911104608p:plain

必要なもの

  • Entityクラス(データ)
  • Serviceクラス(DAOを呼び出して、ビジネスロジックを実装する サービス層)
  • Daoクラス(単にSQLを実行するだけの DAO層)

事前準備

ライブラリの追加とymlファイルの設定

makoo5.hatenablog.com

瞬間復習

Daoとは

  • データ操作するためのインターフェース
  • ビジネスロジック(サービスの責務)とデータ操作(daoの責務)を分離できる

jdbcjpa

  • jdbcはデータアクセスの標準
  • jpaはormの標準(有名なプロバイダはhibernate

h2dbとは

  • インメモリDB(サーバー再起動時に初期化)
  • 後ほど

Entityの作成

データを保持するクラスを作成

Daoの作成

  • データ操作とデータアクセスを担当します
  • 単にSQLを実行するだけの DAO層

UserDao.java

public interface UserDao {
    void InsertUser(User user);

    List<User> getAll();
}

UserDaoImpl.java

@Repository // 1 DAO等のDBアクセスを行うクラスにつける
public class UserDaoImpl implements UserDao{

    // 2 Jdbcのテンプレート(DIで持ってこれる)
    private final JdbcTemplate jdbcTemplate;

    @Autowired
    public InquiryDaoImpl(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public void InsertUser(User user) {
    jdbcTemplate.update("INSERT INTO user(name, email, contents, created) 
    VALUES(?,?,?,?)",  
    user.getName(),user.getEmail(),user.getContents(),user.getCreated());
    }
}

Serviceの作成

@Service
public class UserServiceImpl{

    private final UserDao dao;

    @Autowired
    public UserServiceImpl(UserDao dao){
        this.dao = dao;
    }

    public void save(User user) {
        dao.InsertIUser(user);
    }

}

Controllerの記述

ServiceをDIして、それを介してデータ取得処理を記述

UserController.java

private final UserServiceImpl userService;
    
    @Autowired
    public UserController(UserServiceImpl userService){
        this.userService = userService;
    }

    @PostMapping("/userSave")
    public String save() {

        // 登録していく処理
    userService.save(//var);
    
        return "templete名";
    }

参考

Spring JDBC Development – A Practical Approach