# エンティティクラスを使用した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 + "]";
    }
}
1
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();
1
2
3
4
5
6
7

検索結果の各行がDepartmentクラスのインスタンスとして取得出来ます。

# エンティティクラスを使用した行挿入

エンティティクラスを使用してテーブルに行挿入を行うことが出来ます。行挿入を行う場合はSqlAgent#insert(エンティティクラスインスタンス)メソッドを使用します。

Department dept = new Department();
dept.setDeptName("production");
// insert entity : 行挿入
int count = agent.insert(dept);
1
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);
1
2
3
4
5

# エンティティクラスを使用した行削除

エンティティクラスを使用してテーブルの行削除を行うことが出来ます。行更新を行う場合はSqlAgent#delete(エンティティクラスインスタンス)メソッドを使用します。

Department dept = agent.query(Department.class)
    .first().orElseThrow(UroborosqlRuntimeException::new);
// delete entity : 行削除
int count = agent.delete(dept);
1
2
3
4

エンティティクラスを使用したDBアクセスの詳細についてはDAOインタフェースを参照してください。

uroboroSQLではこれらの基本的な操作のほか、バッチ処理やトランザクション処理なども行うことができます。 詳細については基本操作を参照してください。