# エンティティクラスを使用したDBアクセス
uroboroSQLではSQLファイルを使用したDBアクセスの他にエンティティクラスを使用したDBアクセスも提供しています。(EntityApiSample.java (opens new window)を参照)
# エンティティクラスを使用した検索
エンティティクラスを使用した検索を行う際は、SqlAgent#query(エンティティクラス)
メソッドを使用してSqlEntityQueryを取得し、バインドパラメータの設定や検索の実行を行います。
SqlEntityQueryでは検索結果をいくつかの形式で取得することができます。
メソッド | 説明 |
---|---|
SqlEntityQuery#collect() | 検索結果をList<エンティティクラス> の形式で取得する |
SqlEntityQuery#stream() | 検索結果をjava.util.Stream の形式で取得する |
SqlEntityQuery#first() | 検索結果の1件目を取得する。戻り値はOptional |
SqlEntityQuery#one() | 検索結果の1件目を取得する。検索結果が複数件になる場合はDataNonUniqueException をスローする。戻り値はOptional |
まずはテーブルに紐づくエンティティクラスを作成します。
- Department.java
package jp.co.future.uroborosql.sample.entity;
import jp.co.future.uroborosql.enums.GenerationType;
import jp.co.future.uroborosql.mapping.annotations.GeneratedValue;
import jp.co.future.uroborosql.mapping.annotations.Id;
import jp.co.future.uroborosql.mapping.annotations.Table;
import jp.co.future.uroborosql.mapping.annotations.Version;
/**
* Entity that can be mapped to department table
*/
@Table(name = "department")
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long deptNo;
private String deptName;
@Version
private long lockVersion;
public long getDeptNo() {
return this.deptNo;
}
public void setDeptNo(final long deptNo) {
this.deptNo = deptNo;
}
public String getDeptName() {
return this.deptName;
}
public void setDeptName(final String deptName) {
this.deptName = deptName;
}
public long getLockVersion() {
return this.lockVersion;
}
public void setLockVersion(final long lockVersion) {
this.lockVersion = lockVersion;
}
@Override
public String toString() {
return "Department [deptNo=" + this.deptNo + ", deptName=" + this.deptName + ", lockVersion="
+ this.lockVersion + "]";
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
@Table
アノテーションをクラスに指定することでテーブルとの紐づけを行います。上記の場合はdepartmentテーブルと紐づけています。
エンティティクラスの詳細についてはDAOインタフェースを参照してください。
このDepartment
クラスを使用した検索は以下のようになります。
// no parameter : バインドパラメータ指定なしで検索
List<Department> deps1 = agent.query(Department.class)
.collect();
// add bind parameter : バインドパラメータを設定して検索
List<Department> deps2 = agent.query(Department.class)
.equal("deptNo", 1)
.collect();
2
3
4
5
6
7
検索結果の各行がDepartment
クラスのインスタンスとして取得出来ます。
# エンティティクラスを使用した行挿入
エンティティクラスを使用してテーブルに行挿入を行うことが出来ます。行挿入を行う場合はSqlAgent#insert(エンティティクラスインスタンス)
メソッドを使用します。
Department dept = new Department();
dept.setDeptName("production");
// insert entity : 行挿入
int count = agent.insert(dept);
2
3
4
# エンティティクラスを使用した行更新
エンティティクラスを使用してテーブルの行更新を行うことが出来ます。行更新を行う場合はSqlAgent#update(エンティティクラスインスタンス)
メソッドを使用します。
Department dept = agent.query(Department.class)
.first().orElseThrow(UroborosqlRuntimeException::new);
dept.setDeptName("R&D");
// update entity : 行更新
int count = agent.update(dept);
2
3
4
5
# エンティティクラスを使用した行削除
エンティティクラスを使用してテーブルの行削除を行うことが出来ます。行更新を行う場合はSqlAgent#delete(エンティティクラスインスタンス)
メソッドを使用します。
Department dept = agent.query(Department.class)
.first().orElseThrow(UroborosqlRuntimeException::new);
// delete entity : 行削除
int count = agent.delete(dept);
2
3
4
エンティティクラスを使用したDBアクセスの詳細についてはDAOインタフェースを参照してください。
uroboroSQLではこれらの基本的な操作のほか、バッチ処理やトランザクション処理なども行うことができます。 詳細については基本操作を参照してください。