hibernate HQL 分頁 關聯查詢(一對多單向,多對一 雙向,多對多)
阿新 • • 發佈:2019-02-08
HQL的 分頁
1.首先我們準備好實體類:
package cn.happy.hibernate04pagelist; import cn.happy.hibernate03hql.conEmp; import java.util.Date; /** * Created by linlin on 2017/9/25. */ public class Emp { private Long empno; private String empname; private String job; private Long mgr; private Date hiredate; private Long sal; private Long comm; private Byte deptno; public Long getEmpno() { return empno; } public void setEmpno(Long empno) { this.empno = empno; } public String getEmpname() { return empname; } public void setEmpname(String empname) { this.empname = empname; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public Long getMgr() { return mgr; } public void setMgr(Long mgr) { this.mgr = mgr; } public Date getHiredate() { return hiredate; } public void setHiredate(Date hiredate) { this.hiredate = hiredate; } public Long getSal() { return sal; } public void setSal(Long sal) { this.sal = sal; } public Long getComm() { return comm; } public void setComm(Long comm) { this.comm = comm; } public Byte getDeptno() { return deptno; } public void setDeptno(Byte deptno) { this.deptno = deptno; } }
然後是小配置:
<?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 package="cn.happy.hibernate03hql"> <class name="cn.happy.hibernate04pagelist.Emp" table="EmpSLL"> <id name="empno" column="empno" > <generator class="native" /> </id> <property name="empname" column="ENAME"/> <property name="job" column="job"/> <property name="mgr" column="mgr"/> <property name="hiredate" column="hiredate"/> <property name="sal" column="sal"/> <property name="comm" column="comm"/> <property name="deptno" column="deptno"/> </class> </hibernate-mapping>
大配置:
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <!-- <session-factory> <property name="myeclipse.connection.profile">JDBC for MySQL</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/book</property> <property name="connection.username">root</property> <property name="connection.password"></property> <property name="hibernate.show_sql">true</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.format_sql">true</property> <!–生成特定資料庫sql–> <property name="hibernate.hbm2ddl.auto">update</property> <!–thread指定當前執行緒來跟蹤管理–> <property name="current_session_context_class">thread</property> <mapping resource="Dog.xml"></mapping> </session-factory> --> <session-factory> <property name="connection.driver_class">oracle.jdbc.OracleDriver</property> <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property> <property name="connection.username">sll</property> <property name="connection.password">sll</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> <property name="current_session_context_class">thread</property> <property name="show_sql">true</property> <!-- <property name="hbm2ddl.auto">update</property>--> <property name="connection.autocommit">true</property> <!-- <mapping resource="cn/happy/hibernate01/Cat.hbm.xml"/> <mapping resource="cn/happy/hibernate02/Dept.hbm.xml"/>--> <!-- <mapping resource="cn/happy/hibernate03hql/Emp.hbm.xml"/> <mapping resource="cn/happy/hibernate04pagelist/Emp.hbm.xml"/> <mapping resource="cn/happy/hibernate06mapping/Emp.hbm.xml"/> <mapping resource="cn/happy/hibernate06mapping/Dept.hbm.xml"/> <mapping resource="cn/happy/hibernate07onttomany/Emp.hbm.xml"/> <mapping resource="cn/happy/hibernate07onttomany/Dept.hbm.xml"/> --> <mapping resource="cn/happy/hibernate08save/Emp.hbm.xml"/> <mapping resource="cn/happy/hibernate08save/Dept.hbm.xml"/> <mapping resource="cn/happy/hibernate09manytomany/Employee.hbm.xml"/> <mapping resource="cn/happy/hibernate09manytomany/Project.hbm.xml"/> </session-factory> </hibernate-configuration>
測試類:
Configuration cfg;
Transaction tx;
Session session;
SessionFactory factory;
@Before
public void myBefore(){
//建立配置物件
cfg = new Configuration().configure("Hibernate.cfg.xml");
//根據配置物件建立SessionFactory
factory = cfg.buildSessionFactory();
//根據SessionFactory建立Session
session= factory.openSession();
/* Session session1= HibernateUtil.getSession();
System.out.println(session);
System.out.println(session1);*/
//在Session建立後開啟事務
tx = session.beginTransaction();
}
//分頁
@Test
public void testl8() {
String hql="from Emp";
Query query = session.createQuery(hql);
int pageindex=2;
int pagesize=3;
query.setFirstResult((pageindex-1)*pagesize);
query.setMaxResults(pagesize);
List<Emp> list=query.list();
for (Emp item:list){
System.out.println(item.getEmpname());
}
}
一對一單向查詢:
實體 的關聯:封裝*****
並進行封裝(get set)
然後是關聯小配置
<?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 package="cn.happy.hibernate06mapping">
<class name="cn.happy.hibernate06mapping.Dept" table="Dept" schema="sll">
<id name="deptno" column="deptno" >
<generator class="native" />
</id>
<property name="deptname" column="deptname"/>
</class>
</hibernate-mapping>
<?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 package="cn.happy.hibernate06mapping">
<class name="cn.happy.hibernate06mapping.Emp" table="Emp" schema="sll">
<id name="empno" column="empno" >
<generator class="native" />
</id>
<property name="enmae" column="enmae"/>
<many-to-one name="dept" column="deptno"
class="cn.happy.hibernate06mapping.Dept"></many-to-one>
</class>
</hibernate-mapping>
大配置 如上述 一樣 新增一個mapping
測試類:
//多對一
@Test
public void testmanyToOne(){
cn.happy.hibernate06mapping.Emp emp=session.get(cn.happy.hibernate06mapping.Emp.class,1);
System.out.println(emp.getDept().getDeptname());
}
多對多 查詢 帶有中間表:變像的 2個多對一
小配置:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.happy.hibernate09manytomany">
<class name="Employee" table="Employee22" schema="sll">
<id name="empid" column="empid">
<generator class="native"></generator>
</id>
<property name="empname" />
<!--table指的是中間表-->
<set name="projects" table="PROEMP22" inverse="true">
<key column="REMPID"></key>
<many-to-many column="RPROID" class="Project"></many-to-many>
</set>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.happy.hibernate09manytomany">
<class name="Project" table="Project22" schema="sll">
<id name="proid" column="proid">
<generator class="native"></generator>
</id>
<property name="proname" />
</class>
</hibernate-mapping>
測試類;
package cn.happy.test;
import cn.happy.hibernate08save.Dept;
import cn.happy.hibernate08save.Emp;
import cn.happy.hibernate09manytomany.Employee;
import cn.happy.hibernate09manytomany.Project;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
/**
* Created by linlin on 2017/9/22.
*/
public class test1006_02 {
Configuration cfg;
Transaction tx;
Session session;
SessionFactory factory;
@Before
public void myBefore() {
//建立配置物件
cfg = new Configuration().configure("Hibernate.cfg.xml");
//根據配置物件建立SessionFactory
factory = cfg.buildSessionFactory();
//根據SessionFactory建立Session
session = factory.openSession();
//在Session建立後開啟事務
tx = session.beginTransaction();
}
@Test
public void test03() {
Employee emp=session.get(Employee.class,1);
System.out.println(emp.getEmpname());
System.out.println("============");
for(Project pro:emp.getProjects()){
System.out.println(pro.getProname());
}
}
}