hibernate框架基础.docx
《hibernate框架基础.docx》由会员分享,可在线阅读,更多相关《hibernate框架基础.docx(42页珍藏版)》请在冰豆网上搜索。
hibernate框架基础
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<%
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+":
//"+request.getServerName()+":
"+request.getServerPort()+path+"/";
%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
">
MyJSP'index.jsp'startingpage
--
-->
ThisismyJSPpage.
2
DOCTYPEhibernate-configurationPUBLIC
"-//Hibernate/HibernateConfigurationDTD3.0//EN"
"http:
//www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
--通常,一个session-factory节点代表一个数据库-->
--1.数据库连接配置-->
com.mysql.jdbc.Driver
jdbc:
mysql:
///hib_demo
root
root
--
数据库方法配置,hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql
-->
org.hibernate.dialect.MySQL5Dialect
--2.其他相关配置-->
--2.1显示hibernate在运行时候执行的sql语句-->
true
--2.2格式化sql
true-->
--2.3自动建表-->
update
--配置session的创建方式:
线程方式创建session对象-->
thread
--******************【连接池配置】******************-->
--配置连接驱动管理类-->
org.hibernate.connection.C3P0ConnectionProvider
--配置连接池参数信息-->
2
4
5000
10
30000
2
--******************【二级缓存配置】******************-->
--a.开启二级缓存-->
true
--b.指定使用哪一个缓存框架(默认提供的)-->
org.hibernate.cache.HashtableCacheProvider
--开启查询缓存-->
true
--c.指定哪一些类,需要加入二级缓存-->
--集合缓存[集合缓存的元素对象,也加加入二级缓存]-->
--3.加载所有映射
-->
3
packagecn.itcast.a_query;
importjava.util.List;
importorg.hibernate.Criteria;
importorg.hibernate.Query;
importorg.hibernate.SQLQuery;
importorg.hibernate.SessionFactory;
importorg.hibernate.cfg.Configuration;
importorg.hibernate.classic.Session;
importorg.hibernate.criterion.Restrictions;
importorg.junit.Test;
publicclassApp_criteria{
privatestaticSessionFactorysf;
static{
sf=newConfiguration()
.configure()
.addClass(Dept.class)
.addClass(Employee.class)//测试时候使用
.buildSessionFactory();
}
/*
*1)Get/load主键查询
2)对象导航查询
3)HQL查询,HibernateQuerylanguagehibernate提供的面向对象的查询语言。
4)Criteria查询,完全面向对象的查询(QueryByCriteria,QBC)
5)SQLQuery,本地SQL查询
*/
//4)Criteria查询,
@Test
publicvoidcriteria(){
Sessionsession=sf.openSession();
session.beginTransaction();
Criteriacriteria=session.createCriteria(Employee.class);
//构建条件
criteria.add(Restrictions.eq("empId",12));
//criteria.add(Restrictions.idEq(12));//主键查询
System.out.println(criteria.list());
session.getTransaction().commit();
session.close();
}
//5)SQLQuery,本地SQL查询
//不能跨数据库平台:
如果该了数据库,sql语句有肯能要改。
@Test
publicvoidsql(){
Sessionsession=sf.openSession();
session.beginTransaction();
SQLQueryq=session.createSQLQuery("SELECT*FROMt_Deptlimit5;")
.addEntity(Dept.class);//也可以自动封装
System.out.println(q.list());
session.getTransaction().commit();
session.close();
}
}
4
packagecn.itcast.a_query;
importjava.util.List;
importorg.hibernate.Query;
importorg.hibernate.SessionFactory;
importorg.hibernate.cfg.Configuration;
importorg.hibernate.classic.Session;
importorg.junit.Test;
publicclassApp_hql{
privatestaticSessionFactorysf;
static{
sf=newConfiguration()
.configure()
.addClass(Dept.class)
.addClass(Employee.class)//测试时候使用
.buildSessionFactory();
}
/*
*1)Get/load主键查询
2)对象导航查询
3)HQL查询,HibernateQuerylanguagehibernate提供的面向对象的查询语言。
4)Criteria查询,完全面向对象的查询(QueryByCriteria,QBC)
5)SQLQuery,本地SQL查询
*/
@Test
publicvoidall(){
Sessionsession=sf.openSession();
session.beginTransaction();
//1)主键查询
//Deptdept=(Dept)session.get(Dept.class,12);
//Deptdept=(Dept)session.load(Dept.class,12);
//2)对象导航查询
//Deptdept=(Dept)session.get(Dept.class,12);
//System.out.println(dept.getDeptName());
//System.out.println(dept.getEmps());
//3)HQL查询
//注意:
使用hql查询的时候auto-import="true"要设置true,
//如果是false,写hql的时候,要指定类的全名
//Queryq=session.createQuery("fromDept");
//System.out.println(q.list());
//a.查询全部列
//Queryq=session.createQuery("fromDept");//OK
//Queryq=session.createQuery("select*fromDept");//NOK,错误,不支持*
//Queryq=session.createQuery("selectdfromDeptd");//OK
//System.out.println(q.list());
//b.查询指定的列【返回对象数据Object[]】
//Queryq=session.createQuery("selectd.deptId,d.deptNamefromDeptd");
//System.out.println(q.list());
//c.查询指定的列,自动封装为对象【必须要提供带参数构造器】
//Queryq=session.createQuery("selectnewDept(d.deptId,d.deptName)fromDeptd");
//System.out.println(q.list());
//d.条件查询:
一个条件/多个条件andor/betweenand/模糊查询
//条件查询:
占位符
//Queryq=session.createQuery("fromDeptdwheredeptName=?
");
//q.setString(0,"财务部");
//q.setParameter(0,"财务部");
//System.out.println(q.list());
//条件查询:
命名参数
//Queryq=session.createQuery("fromDeptdwheredeptId=:
myIdordeptName=:
name");
//q.setParameter("myId",12);
//q.setParameter("name","财务部");
//System.out.println(q.list());
//范围
//Queryq=session.createQuery("fromDeptdwheredeptIdbetween?
and?
");
//q.setParameter(0,1);
//q.setParameter(1,20);
//System.out.println(q.list());
//模糊
//Queryq=session.createQuery("fromDeptdwheredeptNamelike?
");
//q.setString(0,"%部%");
//System.out.println(q.list());
//e.聚合函数统计
//Queryq=session.createQuery("selectcount(*)fromDept");
//Longnum=(Long)q.uniqueResult();
//System.out.println(num);
//f.分组查询
//--统计t_employee表中,每个部门的人数
//数据库写法:
SELECTdept_id,COUNT(*)FROMt_employeeGROUPBYdept_id;
//HQL写法
//Queryq=session.createQuery("selecte.dept,count(*)fromEmployeeegroupbye.dept");
//System.out.println(q.list());
session.getTransaction().commit();
session.close();
}
//g.连接查询
@Test
publicvoidjoin(){
Sessionsession=sf.openSession();
session.beginTransaction();
//1)内连接【映射已经配置好了关系,关联的时候,直接写对象的属性即可】
//Queryq=session.createQuery("fromDeptdinnerjoind.emps");
//2)左外连接
//Queryq=session.createQuery("fromDeptdleftjoind.emps");
//3)右外连接
Queryq=session.createQuery("fromEmployeeerightjoine.dept");
q.list();
session.getTransaction().commit();
session.close();
}
//g.连接查询-迫切连接
@Test
publicvoidfetch(){
Sessionsession=sf.openSession();
session.beginTransaction();
//1)迫切内连接【使用fetch,会把右表的数据,填充到左表对象中!
】
//Queryq=session.createQuery("fromDeptdinnerjoinfetchd.emps");
//q.list();
//2)迫切左外连接
Queryq=session.createQuery("fromDeptdleftjoinfetchd.emps");
q.list();
session.getTransaction().commit();
session.close();
}
//HQL查询优化
@Test
publicvoidhql_other(){
Sessionsession=sf.openSession();
session.beginTransaction();
//HQL写死
//Queryq=session.createQuery("fromDeptdwheredeptId<10");
//HQL放到映射文件中
Queryq=session.getNamedQuery("getAllDept");
q.setParameter(0,10);
System.out.println(q.list());
session.getTransaction().commit();
session.close();
}
}
5
packagecn.itcast.a_query;
importjava.util.List;
importorg.hibernate.Criteria;
importorg.hibernate.Query;
importorg.hibernate.ScrollableResults;
importorg.hibernate.SessionFactory;
importorg.hibernate.cfg.Configuration;
importorg.hibernate.classic.Session;
importorg.junit.Test;
importcom.mchange.v2.c3p0.ComboPooledDataSource;
publicclassApp_page{
privatestaticSessionFactorysf;
static{
sf=newConfiguration()
.configure()
.addClass(Dept.class)
.addClass(Employee.class)//测试时候使用
.buildSessionFactory();
}
//分页查询
@Test
publicvoidall(){
Sessionsession=sf.openSession();
session.beginTransaction();
Queryq=ses