Hibernate的添加,修改,查詢(三種查詢方式)的方法:java
案例演示:mysql
1:第一步,導包,老生常談了都是,省略;
sql
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以下所示,前面的博客已經介紹如何寫這個映射,這裏略過;session
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的配置文件,配置文件以下所示:app
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)》:ide
核心代碼:測試
//獲取加載配置文件的管理類對象
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 }
演示以下所示:
爲了美好明天,加油!!!