セッション
セッションは、アプリケーション内の特定のビジネス操作によってトリガーされるデータベースとの一連の対話プロセスをカプセル化したもので、一時的なチャネルを確立することで、データベースとの接続リソースの作成とリサイクルを担当し、より高度な機能を提供します。インターフェース呼び出しとセッションベースの利点:
接続リソースが正しく解放されるかどうかを心配する必要がありません より良いビジネスカプセル化。 Session オブジェクト パラメータ:
データベース接続ホルダー (IConnectionHolder):
- このセッションで使用されるデータ ソース接続を指定します。
Session Executor (ISessionExecutor):
このセッションの戻りを定義します。で内部クラスの形式 結果オブジェクトと Session インスタンス オブジェクトへの参照を提供します - セッションのサンプル コードを開始します:
// 使用默认数据源开启会话 User _result = JDBC.get().openSession(new ISessionExecutor<User>() { public User execute(ISession session) throws Exception { // TODO 此处填写业务逻辑代码 return session.findFirst(EntitySQL.create(User.class)); } }); // 使用指定的数据源开启会话 IConnectionHolder _conn = JDBC.get().getConnectionHolder("oracledb"); // 不需要关心_conn对象的资源释放 IResultSet<User> _results = JDBC.get().openSession(_conn, new ISessionExecutor<IResultSet<User>>() { public IResultSet<User> execute(ISession session) throws Exception { // TODO 此处填写业务逻辑代码 return session.find(EntitySQL.create(User.class)); } });
ISession インターフェイスに基づくデータベース操作:サンプル コードは、ユーザー (User) データ エンティティの CRUD (追加、クエリ、変更、削除) 操作を中心に完成し、ISession オブジェクトの使用方法を示します。データ エンティティは次のとおりです。 : @Entity("user") public static class User extends BaseEntity<User, String> { @Id @Property private String id; @Property(name = "user_name") private String username; @Property(name = "pwd") private String pwd; @Property(name = "sex") private String sex; @Property(name = "age") private Integer age; // 忽略Getter和Setter方法 public static class FIELDS { public static final String ID = "id"; public static final String USER_NAME = "username"; public static final String PWD = "pwd"; public static final String SEX = "sex"; public static final String AGE = "age"; } public static final String TABLE_NAME = "user"; }
Update ):User _user = new User(); _user.setId(UUIDUtils.UUID()); _user.setUsername("suninformation"); _user.setPwd(DigestUtils.md5Hex("123456")); _user.setAge(20); _user.setSex("F"); // 执行数据插入 session.insert(_user); // 或者在插入时也可以指定/排除某些字段 session.insert(_user, Fields.create(User.FIELDS.SEX, User.FIELDS.AGE).excluded(true));
クエリ (検索):方法 1: データ エンティティを通じて条件を設定します (空でない属性は次を使用して接続されます)と条件)、条件を満たすすべてのレコードをクエリします。
User _user = new User(); _user.setId("bc19f5645aa9438089c5e9954e5f1ac5"); _user.setPwd(DigestUtils.md5Hex("654321")); // 更新指定的字段 session.update(_user, Fields.create(User.FIELDS.PWD));
- 方法 2: カスタマイズされた条件を通じてすべての一致するレコードをクエリします。ええ
メソッド 4: 条件を満たす最初のレコードのみを返します (FindFirst)。
User _user = new User(); _user.setUsername("suninformation"); _user.setPwd(DigestUtils.md5Hex("123456")); // 返回所有字段 IResultSet<User> _users = session.find(_user); // 或者返回指定的字段 _users = session.find(_user, Fields.create(User.FIELDS.ID, User.FIELDS.AGE));
- 注: 他のクエリメソッドについては、後ほど「クエリ」の章で詳しく説明します。 削除 (削除):
- エンティティの主キーに基づいてレコードを削除:
IResultSet<User> _users = session.find( EntitySQL.create(User.class) .field(User.FIELDS.ID) .field(User.FIELDS.SEX), // 设置Order By条件 Where.create() .orderDesc(User.FIELDS.USER_NAME));
- 条件に基づいてレコードを削除:
IResultSet<User> _users = session.find( EntitySQL.create(User.class) .field(User.FIELDS.ID) .field(User.FIELDS.SEX), Where.create() .orderDesc(User.FIELDS.USER_NAME), // 查询第1页,每页10条记录,统计总记录数 Page.create(1).pageSize(10).count(true));
統計 (カウント):
// 查询用户名称和密码都匹配的第一条记录 User _user = session.findFirst(EntitySQL.create(User.class), Where.create( Cond.create() .eq(User.FIELDS.USER_NAME).param("suninformation") .eq(User.FIELDS.PWD).param(DigestUtils.md5Hex("123456"))));
- 更新操作の実行 (ExecuteForUpdate): このメソッドは、ISession インターフェイスで対応するメソッドのカプセル化を提供しない SQL ステートメントを実行するために使用され、操作の実行によりデータベースが変更されます。このメソッドを実行すると、影響を受けるレコード行が返されます。たとえば、上記の 20 歳未満のユーザー レコードの削除実行です。具体的な使用法については、API インターフェースのドキュメントと関連ソースコードをお読みください
- 更新操作の実行 (ExecuteForUpdate): このメソッドは、ISession インターフェイスで対応するメソッドのカプセル化を提供しない SQL ステートメントを実行するために使用され、操作の実行によりデータベースが変更されます。このメソッドを実行すると、影響を受けるレコード行が返されます。たとえば、上記の 20 歳未満のユーザー レコードの削除実行です。具体的な使用法については、API インターフェースのドキュメントと関連ソースコードをお読みください