Session


Une session est une encapsulation d'une série de processus d'interaction avec la base de données déclenchés par des opérations métier spécifiques dans l'application, en établissant un canal temporaire, elle est responsable de la création et du recyclage des ressources de connexion avec la base de données, tout en fournissant des fonctionnalités plus avancées. instructions abstraites. Avantages de l'appel d'interface et basé sur la session :

Les développeurs n'ont pas à se soucier de savoir si les ressources de connexion sont libérées correctement

Les normes de codage strictes sont plus propices à la maintenance et à la compréhension ;

Paramètres des objets de session :
  • Titulaire de la connexion à la base de données (IConnectionHolder) :

      Spécifiez la connexion à la source de données utilisée par cette session
    • Exécuteur de session (ISessionExecutor) :

    • Définissez le retour de cette session dans le forme d'une classe interne L'objet résultat et fournit une référence à l'objet instance Session ; un exemple de code est complété autour des opérations CRUD (ajout, requête, modification, suppression) de l'entité de données utilisateur (Utilisateur) pour montrer comment utiliser l'objet ISession. Les entités de données sont les suivantes :
    • // 使用默认数据源开启会话
      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));
          }
      });

  • Insérer :
  •     @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";
        }
  • Mise à jour) :
  • 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));

    Requête (Rechercher) :
    • Méthode 1 : Définir les conditions via les entités de données (les attributs non vides seront connectés à l'aide de et conditions) , et interrogez tous les enregistrements qui remplissent les conditions

      User _user = new User();
      _user.setId("bc19f5645aa9438089c5e9954e5f1ac5");
      _user.setPwd(DigestUtils.md5Hex("654321"));
      // 更新指定的字段
      session.update(_user, Fields.create(User.FIELDS.PWD));
    • Méthode 3 : requête de pagination ;

      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));
    • Méthode 4 : renvoie uniquement le premier enregistrement qui remplit les conditions (FindFirst);
    • 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));
      • Remarque
         : D'autres méthodes de requête seront élaborées plus tard dans le chapitre "Requête" ;
        Supprimer (Supprimer) :
      • Supprimer les enregistrements en fonction de la clé primaire de l'entité :
        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));
      • Supprimer les enregistrements en fonction des conditions :
        // 查询用户名称和密码都匹配的第一条记录
        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"))));
      • Statistiques (Nombre):
      • User _user = new User();
        _user.setId("bc19f5645aa9438089c5e9954e5f1ac5");
        //
        session.delete(_user);
        
        //
        session.delete(User.class, "bc19f5645aa9438089c5e9954e5f1ac5");

      Exécuter l'opération de mise à jour (ExecuteForUpdate) :
    • Cette méthode est utilisée pour exécuter des instructions SQL qui ne fournissent pas d'encapsulation de méthode correspondante dans l'interface ISession et l'exécution de l'opération entraînera des modifications dans la base de données après. en exécutant cette méthode, les lignes d'enregistrement concernées seront renvoyées. Numéro, comme l'exécution ci-dessus de la suppression des enregistrements utilisateur de moins de 20 ans :

        // 删除年龄小于20岁的用户记录
        session.executeForUpdate(
                SQL.create(
                        Delete.create(User.class).where(
                                Where.create(
                                        Cond.create()
                                                .lt(User.FIELDS.AGE).param(20)))));
      • Remarque
         : Les opérations ci-dessus prennent toutes en charge les opérations par lots, veuillez lisez la documentation de l'interface API et le code source associé pour une utilisation spécifique
      •  ;