세션


A 세션은 특정 비즈니스 운영에 의해 발생하는 데이터베이스와의 일련의 상호 작용 프로세스를 애플리케이션에 캡슐화한 것입니다. 임시 채널을 설정하여 데이터베이스와의 연결 리소스 생성 및 재활용을 담당하는 동시에 보다 향상된 기능을 제공합니다. 인터페이스 호출 및 세션 기반의 장점:

개발자는 연결 리소스가 올바르게 해제되는지 걱정할 필요가 없습니다.

엄격한 코딩 표준은 유지 관리 및 이해에 더 도움이 됩니다.

    세션 개체 매개변수:
    • 데이터베이스 연결 홀더(IConnectionHolder):
    • 이 세션에서 사용하는 데이터 소스 연결을 지정합니다.

    • 세션 실행자(ISessionExecutor):
    • 내부 클래스의 형식 결과 개체이며 세션 인스턴스 개체에 대한 참조를 제공합니다.

  • 세션 샘플 코드 시작:
  • // 使用默认数据源开启会话
    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 인터페이스 기반 데이터베이스 작업:
  • The 사용자(사용자) 데이터 엔터티 CRUD(추가, 쿼리, 수정, 삭제) 작업을 중심으로 샘플 코드가 완성되어 데이터 엔터티는 다음과 같습니다.

        @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";
        }
      삽입:
    • 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));
      reupdate) :
      R
      User _user = new User();
      _user.setId("bc19f5645aa9438089c5e9954e5f1ac5");
      _user.setPwd(DigestUtils.md5Hex("654321"));
      // 更新指定的字段
      session.update(_user, Fields.create(User.FIELDS.PWD));
    • Query (찾기) :
      method 1 : 데이터 엔티티를 통한 조건을 설정합니다 (비어 있지 않은 속성은 사용 및 조건을 사용하여 연결됩니다). , 그리고 조건을 충족하는 모든 레코드를 쿼리합니다.
    • 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));
      • 방법 2: 사용자 정의된 조건을 통해 일치하는 모든 레코드를 쿼리합니다.

        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));
      • 방법 3: 페이징 쿼리;

        rreee

        방법 4: 조건을 충족하는 첫 번째 레코드만 반환합니다(FindFirst).
      • 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"))));

    • 조건에 따라 레코드 삭제:
    • User _user = new User();
      _user.setId("bc19f5645aa9438089c5e9954e5f1ac5");
      //
      session.delete(_user);
      
      //
      session.delete(User.class, "bc19f5645aa9438089c5e9954e5f1ac5");
      • 통계(개수):
      • // 删除年龄小于20岁的用户记录
        session.executeForUpdate(
                SQL.create(
                        Delete.create(User.class).where(
                                Where.create(
                                        Cond.create()
                                                .lt(User.FIELDS.AGE).param(20)))));

        업데이트 작업 실행(ExecuteForUpdate):
      • 이 메서드는 ISession 인터페이스에서 해당 메서드 캡슐화를 제공하지 않는 SQL 문을 실행하는 데 사용되며 작업을 실행하면 데이터베이스가 변경됩니다. 이 방법을 실행하면 영향을 받은 레코드 행이 반환됩니다. 위의 20세 미만 사용자 레코드 삭제 실행과 같은 번호:
    •     // 统计年龄小于20岁的用户记录总数
      
          // 方式一:
          long _count = session.count(User.class, 
                  Where.create(
                          Cond.create()
                                  .lt(User.FIELDS.AGE).param(20)));
      
          // 方式二:
          _count = session.count(
                  SQL.create(
                          Delete.create(User.class).where(
                                  Where.create(
                                          Cond.create()
                                                  .lt(User.FIELDS.AGE).param(20)))));

      참고
    • : 위 작업은 모두 일괄 작업을 지원합니다. 특정 용도에 대한 API 인터페이스 문서 및 관련 소스 코드를 읽어보세요.