Hibernate中的HQL的基本常用小例子,单表查询与多表查询
生活随笔
收集整理的這篇文章主要介紹了
Hibernate中的HQL的基本常用小例子,单表查询与多表查询
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<span style="font-size:24px;color:#3366ff;">本文章實現HQL的以下功能:</span>
/*** hql語法:* 1)單表查詢* 1.1 全表查詢* 1.2 指定字段查詢* 1.3 排除重復記錄* 1.4 條件查詢(重點)* 1.5 分頁查詢* 1.6 聚合查詢* 1.7 查詢排序* 1.8 分組查詢* 1.9 分組后篩選* * 2)多表查詢* 1.1 內連接* 1.2 左外連接/右外連接
*/
</span>
首先要配置Hibernate的xml文件,讓兩個數據庫建立聯系,是一對多的映射連接
Employee.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping><class name="star.july.d_hql.Employee" table="employee"><id name="id"><generator class="native"></generator></id><property name="name"></property><property name="gender"></property><property name="title"></property><property name="email"></property><property name="salary"></property><many-to-one name="dept" class="star.july.d_hql.Dept"column="deptId"></many-to-one></class> </hibernate-mapping>
Dept.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping><class name="star.july.d_hql.Dept" table="dept"><id name="id"><generator class="native"></generator></id><property name="deptName" column="name"></property><set name="employee"cascade="all"><key column="id"></key><one-to-many class="star.july.d_hql.Employee"/></set></class> </hibernate-mapping>再建立兩個實體類
Employee.java
package star.july.d_hql;public class Employee {private int id;private String name;private String gender;private String title;private String email;private double salary;private Dept dept = new Dept();public Dept getDept() {return dept;}public void setDept(Dept dept) {this.dept = dept;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}@Overridepublic String toString() {return "Employee [id=" + id + ", name=" + name + ", gender=" + gender+ ", title=" + title + ", email=" + email + ", salary="+ salary + "]";}}
Dept.java
package star.july.d_hql;import java.util.HashSet; import java.util.Set;public class Dept {private int id;private String deptName;private Set<Employee> employee = new HashSet<Employee>();public int getId() {return id;}public void setId(int id) {this.id = id;}public String getDeptName() {return deptName;}public void setDeptName(String deptName) {this.deptName = deptName;}public Set<Employee> getEmployee() {return employee;}public void setEmployee(Set<Employee> employee) {this.employee = employee;}}
最后測試HQL:
Demo.java
package star.july.d_hql;import java.util.List; import java.util.Set;import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Test;import star.july.util.HibernateUtil; /*** hql語法:* 1)單表查詢* 1.1 全表查詢* 1.2 指定字段查詢* 1.3 排除重復記錄* 1.4 條件查詢(重點)* 1.5 分頁查詢* 1.6 聚合查詢* 1.7 查詢排序* 1.8 分組查詢* 1.9 分組后篩選* * 2)多表查詢* 1.1 內連接* 1.2 左外連接/右外連接 * **/ public class Demo {@Testpublic void test(){Session session = HibernateUtil.getSession();Transaction ts = session.getTransaction();try{ts.begin();//hql基本語法//1、創建一個Query對象//參數:需要執行的hql語句String hql = "select e from Employee e where id = 1";Query query = session.createQuery(hql);//2、執行查詢//2、1封裝所有List<Employee> emp = query.list();for(Employee e : emp){System.out.println(e);}//2、2 封裝一個(第一個)Employee empl = (Employee)query.uniqueResult();System.out.println(empl);ts.commit();}catch(Exception e){e.printStackTrace();ts.rollback();}}//單表查詢@Testpublic void test3(){Session session = HibernateUtil.getSession();Transaction ts = session.getTransaction();try{ts.begin(); // * 1)單表查詢 // * 1.1 全表查詢// String hql = "from star.july.d_hql.Employee";//auto-import:自動到爆,自動在每個包下面搜索對應這個類的包,多個同名類的報會沖突 // String hql = "select e from Employee e";// * 1.2 指定字段查詢//返回對象數組 // String hql = "select e.name,e.title from Employee e";// * 1.3 排除重復記錄 // String hql = "select distinct(e.gender) from Employee e";// * 1.4 條件查詢(重點)(where)//邏輯條件:and or// 模糊查詢:like: % _//比較查詢: < > <= >= between and <>//判空查詢: is null ,is not null, ='',<>''; // String hql = "select e from Employee e where name like '張%'"; // String hql = "select e from Employee e where e.gender is null or e.gender=''";// * 1.5 分頁查詢/* String hql = "from Employee ";Query query = session.createQuery(hql);//設置開始讀取行query.setFirstResult(0);//每頁讀取多少條信息query.setMaxResults(3);*/// * 1.6 聚合查詢//avg,count,max,min,uniqueResult // String hql = "select max(e.salary) from Employee e";// * 1.7 查詢排序//order by//desc:降序 asc:升序 // String hql = "select e from Employee e order by id desc ";// * 1.8 分組查詢 // String hql = "select e from Employee e group by e.gender";// * 1.9 分組后篩選String hql = "select e from Employee e where e.gender is not null and e.gender<>'' group by e.gender having count(e.gender)>1";Query query = session.createQuery(hql);//集合對象List<Object> e = query.list();for(Object emp : e){System.out.println(emp);}//對象數組/* List<Object[]> objects = query.list();for(Object[] object : objects){for(Object obj:object ){System.out.print(obj);}System.out.println();} */ //封裝一個對象/*Object unique = query.uniqueResult();System.out.println(unique);*/ts.commit();}catch(Exception e){e.printStackTrace();ts.rollback();}}//多表查詢@Testpublic void test2(){Session session = HibernateUtil.getSession();Transaction ts = session.getTransaction();try{ts.begin();/***步驟*1、確定查詢哪些對象*2、確定擦汗尋哪些屬性*3、確定連接條件*4、業務條件 *///1、內連接查詢//效果:只有滿足條件的數據才會被顯示出來//查詢員工及其部門:顯示員工名稱,部門名稱 // String hql = "select e.name,d.deptName from Employee e , Dept d where e.dept.id=d.id";//另一種寫法 // String hql = "select e.name,d.deptName from Employee e inner join e.dept d";//左外連接//效果:優先顯示左表,右表的數據匹配顯示,不匹配則顯示null//查詢所有部門的員工(沒有員工的部門也要顯示出來)String hql = "select d.deptName, e.name from Dept d left outer join d.employee e";//右外連接 // String hql = "select d.deptName,e.name from Employee e right outer join e.dept d";Query query = session.createQuery(hql);/*List<Object> object = query.list();for(Object obj:object){System.out.println(obj);}*/List<Object[]> objects = query.list();for(Object[] object:objects){for(Object obj : object){System.out.print(obj);}System.out.println();}ts.commit();}catch(Exception e){e.printStackTrace();ts.rollback();}} }總結
以上是生活随笔為你收集整理的Hibernate中的HQL的基本常用小例子,单表查询与多表查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hibernate 一对多的联系(Set
- 下一篇: Hibernate 注解映射