세션
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) :RUser _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"))));
조건에 따라 레코드 삭제: - 방법 2: 사용자 정의된 조건을 통해 일치하는 모든 레코드를 쿼리합니다.
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 인터페이스 문서 및 관련 소스 코드를 읽어보세요.