Domaでデータアクセスするのに必要なのは以下の3ファイル
- エンティティ
- Daoインターフェース
- SQLテンプレート
##1. エンティティ(User.java)
データベースのデータ本体を表すクラス
User.java
@Table(name = "users")
@Entity
@Getter
@Setter
public class User extends DomaDtoImopl{
private static final long serialVersionUID = 123456789123456L
@OriginalStates
User originalstates;
@Id
@Column(name ="user_id")
@GenerateValue(strategy = GenerationType.IDENTITY)
Long id;
String password;
String firstName;
String lastName;
}
####メモ
@OriginalStatesの役割
→更新したいカラムだけ更新する
そもそも、Domaを使用したUPDAT文は以下の操作でレコードを更新する。
①updateしたいレコードをselect(自動生成)でEntityクラスに全カラム取る (レコード数は1件)
②①で取得したEntityクラスの中でupdateしたいカラムのみ変更する
③変更後のEntityクラスをupdateの引数にわたして実行
この時、更新されていない項目もSETの項目には入っていて、同じ値で上書きすることになる。
しかし、@OriginalStatesの記述を最初のところに書いておけば、差分だけ更新してくれる。つまり、同じ値だからわざわざ更新する必要のない項目をSETの中には含めない。
##2. Daoインターフェース(UserDao.java)
UserDao.java
@ConfigureAutowireable
@Dao
public interface UserDao {
//ユーザーを一件取得する
@Select
Optional<User> selectById(Long Id);
//ユーザーを登録する
@Insert
int insert(User user);
//ユーザーを更新する
@Update
int update(User user);
}
3. SQLテンプレート(select.sql)
select.sql
SELECT
id
,password
,firstName
,lastName
FROM
users
メモ ~ファイルの置き場所とファイル名~
「src/main/resources/META-INF」の配下にDaoインターフェースと同じパッケージ構成になるように配置
ファイル名はDaoインターフェースに定義したメソッド名として、拡張子は.sqlとする