セッション


セッションは、アプリケーション内の特定のビジネス操作によってトリガーされるデータベースとの一連の対話プロセスをカプセル化したもので、一時的なチャネルを確立することで、データベースとの接続リソースの作成とリサイクルを担当し、より高度な機能を提供します。インターフェース呼び出しとセッションベースの利点:

接続リソースが正しく解放されるかどうかを心配する必要がありません

より良いビジネスカプセル化。

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 インターフェースのドキュメントと関連ソースコードをお読みください