Maison  >  Article  >  Java  >  Explication détaillée du code permettant à Hibernate de terminer les opérations CRUD

Explication détaillée du code permettant à Hibernate de terminer les opérations CRUD

Y2J
Y2Joriginal
2017-05-13 11:06:411218parcourir

Cet article présente principalement l'exemple de code d'Hibernate pour les opérations de suppression, de recherche et de mise à jour de la base de données. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer

Cette section continue les autres opérations d'Hibernate sur la base de données. supprimer, interroger, modifier.

Opération de suppression de données d'Hibernate

La suppression d'un élément de données dans la table User nécessite la valeur de l'identifiant de clé primaire de la table User. Tout d'abord, l' objet correspondant est interrogé dans la base de données en fonction de la valeur de l'identifiant. Deux méthodes peuvent être utilisées : l'une est la méthode get de session et l'autre est la méthode de chargement de session.

Méthode Get de Session : L'appel de cette méthode renverra un Objet Object. Ensuite, nous le cast. Useruser = (User)session.get(User.class,” 402881e5441c035e01441c0360510003”); Lorsque nous transmettons la valeur id pour ne trouver aucun résultat correspondant dans les données, la méthode get renvoie une valeur null.

Différence : lorsque la méthode get est chargée, elle émettra immédiatement une instruction SQL pour interroger, tandis que la méthode de chargement n'émet pas immédiatement sql pour interroger lorsqu'elle est exécutée et qu'un utilisateur proxy est généré , mais aucun utilisateur réel n'est généré. Le véritable utilisateur sera chargé lorsque nous utiliserons réellement cet utilisateur. Load() prend en charge le chargement paresseux, contrairement à Get(). Get renvoie un objet nul lorsque l'objet chargé n'existe pas et Load() renvoie une exception ObjectNotFoundException lorsque l'objet chargé n'existe pas.

Méthode Load de Session : Cette méthode est également appelée pour renvoyer un objet Object, puis une conversion forcée est effectuée.

Ensuite, nous chargeons l'objet correspondant à l'identifiant de la table utilisateur via get ou load, puis appelons la méthode delete de la session pour supprimer l'objet et supprimer un enregistrement dans la table. Le code est le suivant Afficher.

La première méthode de suppression


 publicvoid testDel1()
      {
        Sessionsession =null;
        
        try
        {
         session= HibernateUtils.getSession();
         //开启事务.
         session.beginTransaction();
         //采用load查询不存在的数据,hibernate会抛出object not found exception
         Useruser = (User)session.load(User.class,"402881e5441c035e01441c0360510003");
         
         //删除表中的记录.
         //删除,建议用此种方式删除,先加载再删除.
         session.delete(user);
         
         //提交事务.把内存的改变提交到数据库上.
         session.getTransaction().commit();
         
        }catch(Exception e){
         e.printStackTrace();
         session.getTransaction().rollback();
        }finally{
         HibernateUtils.closeSession(session);
        }
        
      }

La deuxième méthode de suppression, construire manuellement l'objet détaché est alors supprimé. Le code est affiché ci-dessous.


 //测试方法以test开头.测试del方法.返回存在的加载的.
      publicvoid testDel2()
      {
        Sessionsession =null;
        
        try
        {
         session= HibernateUtils.getSession();
         //开启事务.
         session.beginTransaction();
         
         //手动构造的Detached对象.
         Useruser =new User();
         user.setId("402881e4441b3d1c01441b3f5dfe0001");
         session.delete(user);
         
         
         //提交事务.把内存的改变提交到数据库上.
         session.getTransaction().commit();
         
        }catch(Exception e){
         e.printStackTrace();
         session.getTransaction().rollback();
        }finally{
         HibernateUtils.closeSession(session);
        }
        
      }

Hibernate effectue des opérations de requête de données

Requête générale, le code est le suivant.


//查询方法.
 publicvoid testQuery1()
 {
   Sessionsession =null;
   try
   {
    session= HibernateUtils.getSession();
    
    session.beginTransaction();
    //参数是一个字符串,是HQL的查询语句.注意此时的的UserU为大写,为对象的,而不是表的.
    Queryquery = session.createQuery("from User");
    
    //使用List方法.
    ListuserList = query.list();
    //迭代器去迭代.
    for(Iteratoriter=userList.iterator();iter.hasNext();)
    {
      Useruser =(User)iter.next();
      System.out.println("id="+user.getId() + "name="+user.getName());
    }
    
    session.getTransaction().commit();
   }catch(Exception e){
    e.printStackTrace();
    session.getTransaction().rollback();
   }finally{
    HibernateUtils.closeSession(session);
   }
   
 }

Page requête, le code est le suivant.


//分页查询,从什么地方查,查几个;
 publicvoid testQuery2()
 {
   Sessionsession =null;
   try
   {
    session=HibernateUtils.getSession();
    
    session.beginTransaction();
    //参数是一个字符串,是HQL的查询语句.注意此时的的UserU为大写,为对象的,而不是表的.
    Queryquery = session.createQuery("from User");
    //从第一个开始查起.可以设置从第几个查起.
    query.setFirstResult(0);
    //最大条数为两个
    query.setMaxResults(2);
    
    //使用List方法.
    ListuserList = query.list();
    //迭代器去迭代.
    for(Iteratoriter=userList.iterator();iter.hasNext();)
    {
      Useruser =(User)iter.next();
      System.out.println("id="+user.getId() + "name="+user.getName());
    }
    
    session.getTransaction().commit();
   }catch(Exception e){
    e.printStackTrace();
    session.getTransaction().rollback();
   }finally{
    HibernateUtils.closeSession(session);
   }
   
 }

Opération de mise à jour des données d'Hibernate

Construire manuellement l'objet détaché et appeler la mise à jour de la session (), le code est le suivant.


      //测试方法以test开头.测试update方法.返回存在的加载的.
      publicvoid testUpdate1()
      {
        Sessionsession =null;
        
        try
        {
         session= HibernateUtils.getSession();
         //开启事务.
         session.beginTransaction();
         //采用load查询不存在的数据,hibernate会抛出object not found exception
         
         //手动构造的Detached对象.
         Useruser =newUser();
         user.setId("402881e5441bfb0601441bfb075b0002");
         user.setName("周六");
         
         session.update(user);
         
         
         //提交事务.把内存的改变提交到数据库上.
         session.getTransaction().commit();
         
        }catch(Exception e){
         e.printStackTrace();
         session.getTransaction().rollback();
        }finally{
         HibernateUtils.closeSession(session);
        }
        
      }

charge l'objet, appelle la méthode update() de la session et met à jour l'objet lorsqu'il est dans l'état persistant . Le code est affiché ci-dessous.


 //测试方法以test开头.测试update方法.返回存在的加载的.
      publicvoid testUpdate2()
      {
        Sessionsession =null;
        
        try
        {
         session= HibernateUtils.getSession();
         //开启事务.
         session.beginTransaction();
         //采用load查询不存在的数据,hibernate会抛出object not found exception
         
         //先把要更新的查出来.
         //建议采用此种方式,先加载再更新的方式.
         Useruser = (User)session.load(User.class,"402881e5441bfb0601441bfb075b0002");
         //查出来的话就直接放入了.处于持久化状态.
         user.setName("周日");
         
         //显示的调用,因为为持久化状态也可以不显示调用.
         session.update(user);
         
         
         //提交事务.把内存的改变提交到数据库上.
         session.getTransaction().commit();
         
        }catch(Exceptione){
         e.printStackTrace();
         session.getTransaction().rollback();
        }finally{
         HibernateUtils.closeSession(session);
        }
        
      }

【Recommandations associées】

1. Recommandation spéciale : "php Programmer Toolbox" version V0.1 Télécharger

2. Tutoriel vidéo gratuit Java

3 Manuel en ligne YMP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn