<tbody id="d1jhg"></tbody><th id="d1jhg"><track id="d1jhg"></track></th>
    <nav id="d1jhg"></nav>
  • <em id="d1jhg"></em>
  • <th id="d1jhg"><pre id="d1jhg"><sup id="d1jhg"></sup></pre></th>

  • <em id="d1jhg"></em>
    <em id="d1jhg"><acronym id="d1jhg"></acronym></em><dd id="d1jhg"><noscript id="d1jhg"></noscript></dd>

    Hibernate的四種查詢方式(主鍵查詢,HQL查詢,Criteria查詢,本地sql查詢)和修改和添加

    小編:管理員 52閱讀 2022.09.05

    Hibernate的添加,修改,查詢(三種查詢方式)的方法:

    案例演示:

    1:第一步,導包,老生常談了都是,省略;

    2:第二步,創建數據庫和數據表,表結構如下所示:

    3:第三步創建實體類User.java

    1 package com.bie.po;
     2 /** 
     3 * @author BieHongLi 
     4 * @version 創建時間:2017年3月8日 下午5:17:23 
     5 * 
     6 */
     7 public class User {
     8 
     9     private int id;
    10     private String name;
    11     private String password;
    12     private String email;
    13     private String phone;
    14     public int getId() {
    15         return id;
    16     }
    17     public void setId(int id) {
    18         this.id = id;
    19     }
    20     public String getName() {
    21         return name;
    22     }
    23     public void setName(String name) {
    24         this.name = name;
    25     }
    26     public String getEmail() {
    27         return email;
    28     }
    29     public void setEmail(String email) {
    30         this.email = email;
    31     }
    32     public String getPhone() {
    33         return phone;
    34     }
    35     public void setPhone(String phone) {
    36         this.phone = phone;
    37     }
    38     public String getPassword() {
    39         return password;
    40     }
    41     public void setPassword(String password) {
    42         this.password = password;
    43     }
    44     @Override
    45     public String toString() {
    46         return "User [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + ", phone=" + phone
    47                 + "]";
    48     }
    49     
    50     
    51 }
    復制

    4:第四步,完成實體類的屬性和數據表字段的映射,映射的.xml如下所示,前面的博客已經介紹如何寫這個映射,這里略過;

    1 <?xml version="1.0"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC 
     3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
     5     
     6 <hibernate-mapping package="com.bie.po"> 
     7     <!-- 操作條件:
     8         1:對象與表
     9         2:屬性與字段的對應
    10         3:類型的對應,類型默認采用屬性的類型,type不寫的話
    11      -->
    12     <class name="User" table="user">
    13         <!-- 主鍵,映射 -->
    14         <id name="id" column="id">
    15             <generator class="native"></generator>
    16         </id>
    17         
    18         <!-- 非主鍵,映射 -->
    19         <property name="name" column="name"></property>
    20         <property name="password" column="password"></property>
    21         <property name="email" column="email"></property>
    22         <property name="phone" column="phone"></property>
    23         
    24         
    25     </class>
    26 
    27 </hibernate-mapping>
    復制

    5:映射之后寫Hibernate的配置文件,配置文件如下所示:

    1 <!DOCTYPE hibernate-configuration PUBLIC
     2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     3     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
     4 
     5 <hibernate-configuration>
     6     <session-factory>
     7         <!-- 
     8             1:數據連接配置
     9             2:加載所有的映射(*.hbm.xml)
    10          -->
    11          
    12          <!-- 1:數據連接配置 -->
    13          <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    14          <property name="hibernate.connection.url">jdbc:mysql:///test</property>
    15          <property name="hibernate.connection.username">root</property>
    16          <property name="hibernate.connection.password">123456</property>
    17          <!-- mysql數據庫的方言 -->
    18          <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    19          
    20          <property name="hibernate.show_sql">true</property>
    21          
    22          <!-- 2:加載所有的映射(*.hbm.xml) -->
    23          <mapping resource="com/bie/po/User.hbm.xml"/>
    24          
    25     </session-factory>
    26 </hibernate-configuration>
    復制

    6:完成上面的之后寫測試的類即可;

      6.1:首先實現Hibernate的插入操作《session.save(user)》:

          核心代碼:

               //獲取加載配置文件的管理類對象                   Configuration config=new Configuration();                   //默認加載src/hibernate.cfg.xml文件                   config.configure();                  //創建session的工廠文件                  SessionFactory sf=config.buildSessionFactory();                 //創建session(代表一個會話,與數據庫連接的會話)                 Session session=sf.openSession();                 //開啟事務                 Transaction tx=session.beginTransaction();                 //保存到數據庫                 session.save(user);                 //提交事務                 tx.commit();                 //關閉                 session.close();                 //sessionFactory關閉                sf.close();

    源碼如下所示:

    1 package com.bie.test;
     2 
     3 import org.hibernate.Session;
     4 import org.hibernate.SessionFactory;
     5 import org.hibernate.Transaction;
     6 import org.hibernate.cfg.Configuration;
     7 import org.junit.Test;
     8 
     9 import com.bie.po.User;
    10 
    11 /** 
    12 * @author BieHongLi 
    13 * @version 創建時間:2017年3月8日 下午5:28:35 
    14 * 
    15 */
    16 public class HelloTest {
    17 
    18     @Test
    19     public void testHello(){
    20         //對象
    21         User user=new User();
    22         user.setName("張三");
    23         user.setPassword("123456");
    24         user.setEmail("1748741329@qq.com");
    25         user.setPhone("15236083005");
    26         
    27         //獲取加載配置文件的管理類對象
    28         Configuration config=new Configuration();
    29         //默認加載src/hibernate.cfg.xml文件
    30         config.configure();
    31         //創建session的工廠文件
    32         SessionFactory sf=config.buildSessionFactory();
    33         //創建session(代表一個會話,與數據庫連接的會話)
    34         Session session=sf.openSession();
    35         //開啟事務
    36         Transaction tx=session.beginTransaction();
    37         //保存到數據庫
    38         session.save(user);
    39         //提交事務
    40         tx.commit();
    41         //關閉
    42         session.close();
    43         //sessionFactory關閉
    44         sf.close();
    45     
    46         
    47     }
    48 }
    復制

    演示效果如下所示:

    6.2:實現Hibernate的修改操作,核心代碼《session.saveOrUpdate(user);   session.update(user);這個就不演示了,用法一樣,將他們替換一下即可,只是saveOrUpdate更加強大的說》:

           session.saveOrUpdate(user);

          這個實現的是如果沒有實體類的編號就執行保存操作,如果有實體類的編號就執行修改操作;

            設計Hibernate框架的人太TMD有才了,當然這是夸贊,大大簡化了我們對數據庫的操作,必須贊一個;

    源碼如下所示:

    1 package com.bie.test;
     2 
     3 import org.hibernate.Session;
     4 import org.hibernate.SessionFactory;
     5 import org.hibernate.Transaction;
     6 import org.hibernate.cfg.Configuration;
     7 import org.junit.Test;
     8 
     9 import com.bie.po.User;
    10 
    11 /** 
    12 * @author BieHongLi 
    13 * @version 創建時間:2017年3月8日 下午5:28:35 
    14 * 
    15 */
    16 public class HelloTest2 {
    17 
    18     //SessionFactory代表整個配置文件,所以沒必要加載多次,放到全局即可
    19     private static SessionFactory sf;
    20     static{
    21         //1:創建配置管理類對象
    22         Configuration config=new Configuration();
    23         //加載配置文件,(默認加載/src/hibernate.cfg.xml)
    24         config.configure();
    25         
    26         //2:根據加載的配置管理類對象,創建SessionFactory對象
    27         sf=config.buildSessionFactory();
    28         
    29         //簡介寫法,寫到一行里面
    30         //sf=new Configuration().configure().buildSessionFactory();
    31     }
    32     @Test
    33     public void testHello(){
    34         //對象
    35         User user=new User();
    36         user.setId(1);
    37         user.setName("李四22222");
    38         user.setPassword("222222");
    39         user.setEmail("22222222@qq.com");
    40         user.setPhone("15236083005");
    41         
    42         //3:根據sesson的工廠創建session對象
    43         Session session = sf.openSession();
    44         
    45         //開啟事務
    46         Transaction tx = session.beginTransaction();
    47         //執行操作
    48         //session.save(user);
    49         session.saveOrUpdate(user);
    50         
    51         //提交事務
    52         tx.commit();
    53         //關閉事務
    54         session.close();
    55         sf.close();
    56     }
    57     
    58 }
    復制

    演示結果如下所示:

    6.3:實現Hibernate的查詢操作:

        6.3.1:主鍵查詢的方法

          兩種方法:

           User u=(User)session.get(User.class, 1);                User u=(User)session.load(User.class, 1);支持懶加載

    源碼如下所示:

    1 package com.bie.test;
     2 
     3 import org.hibernate.Session;
     4 import org.hibernate.SessionFactory;
     5 import org.hibernate.Transaction;
     6 import org.hibernate.cfg.Configuration;
     7 import org.junit.Test;
     8 
     9 import com.bie.po.User;
    10 
    11 /** 
    12 * @author BieHongLi 
    13 * @version 創建時間:2017年3月9日 下午8:47:46 
    14 * Hibernate查詢的幾種方式:
    15 *     
    16 */
    17 public class SelectTest {
    18 
    19     //全局靜態session工廠
    20     private static SessionFactory sf;
    21     static{
    22         //1:創建sesson工廠
    23         sf=new Configuration().configure().buildSessionFactory();
    24     }
    25     
    26     @Test
    27     public void select(){
    28         User user=new User();
    29         
    30         //2:根據session工廠創建session
    31         Session session=sf.openSession();
    32         //3:開啟事務
    33         Transaction tx=session.beginTransaction();
    34         //4:主鍵查詢,執行查詢操作,方法一:get方法,方法2:load方法
    35         //User u=(User)session.get(User.class, 1);
    36         User u=(User)session.load(User.class, 1);
    37         
    38         //主鍵查詢測試結果
    39         System.out.println(u);
    40         //5:提交事務
    41         tx.commit();
    42         //6:關閉事務和session
    43         session.close();
    44         sf.close();
    45         
    46     }
    47     
    48 }
    復制

    演示效果如下所示:

    6.3.2:HQL查詢,特別注意的是查詢語句必須是實體類的方法名,不能是表名稱,必須和sql語句查詢區別:

        HQL查詢和sql查詢的區別:

          (1):sql查詢是表以及字段,不區分大小寫,也叫做結構化的查詢語句;

          (2):HQL查詢是Hibernate提供的面向對象的查詢語句,查詢的是對象以及對象的屬性,區分大小寫的。

    源碼如下所示:

    1 package com.bie.test;
     2 
     3 
     4 
     5 import java.util.List;
     6 
     7 import org.hibernate.Query;
     8 import org.hibernate.Session;
     9 import org.hibernate.SessionFactory;
    10 import org.hibernate.Transaction;
    11 import org.hibernate.cfg.Configuration;
    12 import org.junit.Test;
    13 
    14 import com.bie.po.User;
    15 
    16 /** 
    17 * @author BieHongLi 
    18 * @version 創建時間:2017年3月9日 下午8:47:46 
    19 * Hibernate查詢的幾種方式:
    20 *     
    21 */
    22 public class SelectTest2 {
    23 
    24     //全局靜態session工廠
    25     private static SessionFactory sf;
    26     static{
    27         //1:創建sesson工廠
    28         sf=new Configuration().configure().buildSessionFactory();
    29     }
    30     
    31     @Test
    32     public void select(){
    33         User user=new User();
    34         
    35         //2:根據session工廠創建session
    36         Session session=sf.openSession();
    37         //3:開啟事務
    38         Transaction tx=session.beginTransaction();
    39         
    40         //HRL查詢,查詢全部信息,注意HRL查詢的是實體類的名稱,不是數據表的名稱,特別注意這一點
    41         //Query q=session.createQuery("from User");
    42         Query q=session.createQuery("from User user where user.id=1 or user.id=2 ");
    43         
    44         List<User> list=q.list();
    45         System.out.println(list);
    46         
    47         //5:提交事務
    48         tx.commit();
    49         //6:關閉事務和session
    50         session.close();
    51         sf.close();
    52         
    53     }
    54     
    55 }
    復制

    效果如下所示:

    6.3.3:完全面向對象的查詢,Criteria查詢也叫做 QBC查詢   query by criteria

           核心代碼:   

          //Criteria查詢也叫做 QBC查詢   query by criteria            //完全的面向對象的查詢              Criteria criteria = session.createCriteria(User.class);                  //添加條件              criteria.add(Restrictions.eq("id", 1));              //查詢全部,沒有sql語句              List<User> list = criteria.list();              System.out.println(list);

    源碼如下所示:

    1 package com.bie.test;
     2 
     3 
     4 
     5 import java.util.List;
     6 
     7 import org.hibernate.Criteria;
     8 import org.hibernate.Session;
     9 import org.hibernate.SessionFactory;
    10 import org.hibernate.Transaction;
    11 import org.hibernate.cfg.Configuration;
    12 import org.hibernate.criterion.Restrictions;
    13 import org.junit.Test;
    14 
    15 import com.bie.po.User;
    16 
    17 /** 
    18 * @author BieHongLi 
    19 * @version 創建時間:2017年3月9日 下午8:47:46 
    20 * Hibernate查詢的幾種方式:
    21 *     
    22 */
    23 public class SelectTest3 {
    24 
    25     //全局靜態session工廠
    26     private static SessionFactory sf;
    27     static{
    28         //1:創建sesson工廠
    29         sf=new Configuration().configure().buildSessionFactory();
    30     }
    31     
    32     @Test
    33     public void select(){
    34         User user=new User();
    35         
    36         //2:根據session工廠創建session
    37         Session session=sf.openSession();
    38         //3:開啟事務
    39         Transaction tx=session.beginTransaction();
    40         
    41         //Criteria查詢也叫做 QBC查詢   query by criteria 
    42         //完全的面向對象的查詢
    43         Criteria criteria = session.createCriteria(User.class);    
    44         //添加條件
    45         criteria.add(Restrictions.eq("id", 1));
    46         
    47         //查詢全部,沒有sql語句
    48         List<User> list = criteria.list();
    49     
    50         
    51         System.out.println(list);
    52         
    53         //5:提交事務
    54         tx.commit();
    55         //6:關閉事務和session
    56         session.close();
    57         sf.close();
    58         
    59     }
    60     
    61 }
    復制

    演示效果如下所示:

     6.3.4:本地查詢sql語句,適合使用復雜的查詢,或者不想使用HQL或者criteria查詢,可以使用本地sql查詢,缺點,不能跨越數據庫,一般不適用,除非遇到復雜的sql語句才使用:

        核心代碼:

          //sql語句              //SQLQuery sql= session.createSQLQuery("select * from user ");             SQLQuery sql=session.createSQLQuery("select * from user where id=1 ");             sql.addEntity(User.class);             List<User> list=sql.list();             System.out.println(list);源碼如下所示:

    1 package com.bie.test;
     2 
     3 
     4 
     5 import java.util.List;
     6 
     7 import org.hibernate.SQLQuery;
     8 import org.hibernate.Session;
     9 import org.hibernate.SessionFactory;
    10 import org.hibernate.Transaction;
    11 import org.hibernate.cfg.Configuration;
    12 import org.junit.Test;
    13 
    14 import com.bie.po.User;
    15 
    16 /** 
    17 * @author BieHongLi 
    18 * @version 創建時間:2017年3月9日 下午8:47:46 
    19 * Hibernate查詢的幾種方式:
    20 *     
    21 */
    22 public class SelectTest4 {
    23 
    24     //全局靜態session工廠
    25     private static SessionFactory sf;
    26     static{
    27         //1:創建sesson工廠
    28         sf=new Configuration().configure().buildSessionFactory();
    29     }
    30     
    31     @Test
    32     public void select(){
    33         User user=new User();
    34         
    35         //2:根據session工廠創建session
    36         Session session=sf.openSession();
    37         //3:開啟事務
    38         Transaction tx=session.beginTransaction();
    39         
    40         //sql語句
    41         //把每一行記錄封裝為對象數組,再添加到list集合中
    42         //SQLQuery sql= session.createSQLQuery("select * from user ");
    43         //把每一行記錄封裝為指定的對象類型
    44         SQLQuery sql=session.createSQLQuery("select * from user where id=1 ").addEntity(User.class);
    45         List<User> list=sql.list();
    46         System.out.println(list);
    47         
    48         //5:提交事務
    49         tx.commit();
    50         //6:關閉事務和session
    51         session.close();
    52         sf.close();
    53         
    54     }
    55     
    56 }
    復制

    演示如下所示:

    為了美好明天,加油。!

    關聯標簽:
    国产亚洲无线码在软件线,国产女人18毛一级毛片,亚洲中文综合手机版在线,国产另类综合一区导航,亚洲va韩国va欧美va久久下载,久久先锋男人资源网站
    商河县杂果有限公司 嘉善县麻类有限公司 磐安县油子仁有限公司 无棣县仪器有限公司 安康市养殖有限公司 青田县咖啡有限公司
    无棣县仪器有限公司 汉中市花木有限公司 成武县油子仁有限公司 铜仁市动物有限公司 单县牲畜有限公司 昌乐县植物有限公司
    绵阳市艺术有限公司 嘉祥县电子有限公司 乐山市水果有限公司 延安市能源有限公司 泰顺县麻类有限公司 宝鸡市干果有限公司