‘壹’ Hibernate的几种查询方式
HIbernate主要常用有三种查询方式HQL、QBC、SQL:
1).HQL(Hibernate Query Language):hibernate数据查询语言;
2).QBC(Query By Criteria):规则查询
3).SQL:原生的SQL语句(较为复杂的情况下使用)
想要详细了解的可以看一下下面的几篇文章:
QBC数据查询
HQL单表查询
HQL多表查询
希望对你有所帮助~
‘贰’ 实现基于hibernate的BaseHibernateDao包含常用的CURD方法
BaseHibernateDao的意思就是用泛型的方法实现一个基本的增删改查(CURD)方法,这样一些基本的单表操作直接继承这个类就可以实现了,例子如下:
publicclassBaseHibernateDAO{
privateSessionsession=null;
privateObjectget(Classclz,Serializableid){
Objectret=null;
Sessionsession=HibernateSessionFactory.getSession();
try{
ret=session.get(clz,id);
}catch(HibernateExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
this.closeSession();
}
returnret;
}
protectedvoidadd(Objectitem){
Transactiontx=null;
Sessionsession=HibernateSessionFactory.getSession();
try{
tx=session.beginTransaction();
session.save(item);
tx.commit();
}catch(HibernateExceptione){
//TODOAuto-generatedcatchblock
if(tx!=null){
tx.rollback();
}
e.printStackTrace();
}finally{
closeSession();
}
}
publicvoiddelete(Classclz,Serializableid){
Transactiontx=null;
Sessionsession=HibernateSessionFactory.getSession();
try{
tx=session.beginTransaction();
session.delete(this.get(clz,id));
tx.commit();
}catch(HibernateExceptione){
//TODOAuto-generatedcatchblock
if(tx!=null){
tx.rollback();
}
e.printStackTrace();
}finally{
closeSession();
}
}
publicvoipdate(Objectitem){
Transactiontx=null;
Sessionsession=HibernateSessionFactory.getSession();
try{
tx=session.beginTransaction();
session.update(item);
tx.commit();
}catch(HibernateExceptione){
//TODOAuto-generatedcatchblock
if(tx!=null){
tx.rollback();
}
e.printStackTrace();
}finally{
closeSession();
}
}
publicListsearch(Classclazz,Objectcondition){
Listresults=null;
try{
Sessionsession=HibernateSessionFactory.getSession();
results=session.createCriteria(clazz).add(Example.create(condition)).list();
}catch(HibernateExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
closeSession();
}
returnresults;
}
protectedvoidcloseSession(){
this.session=null;
HibernateSessionFactory.closeSession();
}
}
‘叁’ hibernate的get()方法的使用
session.get( id ),返回是一个object的对象,
你强制装换一下就好了
session你应该能获取到吧,
get方法里的参数可以是任何一个 实现了 java.io.序列化接口.
而 不管 是String Ingeter等都实现了此接口,
所以可以传任何类型的主键 对象过来
不知道讲的对不对,我也刚学
‘肆’ hibernate级联操作有哪些
级联操作
一.简单的介绍
cascade和inverse
(Employee
–
Department)
l
Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似的操作,常用的cascade:
none,all,save-update,delete,
lock,refresh,evict,replicate,persist,
merge,delete-orphan(one-to-many)。一般对many-to-one,many-to-many不设置级联,在<one-to-one>和<one-to-many>中设置级联。
l
inverse表“是否放弃维护关联关系”(在Java里两个对象产生关联时,对数据库表的影响),在one-to-many和many-to-many的集合定义中使用,inverse=”true”表示该对象不维护关联关系;该属性的值一般在使用有序集合时设置成false(注意hibernate的缺省值是false)。
one-to-many维护关联关系就是更新外键。many-to-many维护关联关系就是在中间表增减记录。
注:
配置成one-to-one的对象不维护关联关系
二,属性的解析
class元素的lazy属性设定为true,表示延迟加载,如果lazy设为false,则
表示立即加载。以下对这二点进行说明。
立即加载:表示Hibernate在从数据库中取得数据组装好一个对象(如学生1)后,
会立即再从数据库取得数据组装此对象所关联的对象(如学生证1)。
延迟加载:表示Hibernate在从数据库中取得数据组装好一个对象(如学生1)后,
不会立即再从数据库中取得数据组装此对象所关联的对象(如学生1),
而是等到需要时,才会从数据库取得数据组装此关联对象。
<one-to-one>元素的cascade属性表明操作是否从父对象级联到被关联的对象,
它
的取得可以是以下几种:
none:在保存,删除或修改当前对象时,不对其附属对象(关联对象)进行级联
操作。它是默认值。
save-update:在保存,更新当前对象时,级联保存,更新附属对象(临时对象,
游离对象)。
delete:在删除当前对象时,级联删除附属对象。
all:所有情况下均进行级联操作,即包含save-update和delete操作。
delete-orphan:删除和当前对象解除关系的附属对象。
<one-to-one>元素的fetch属性的可选值是join和select,默认是select。
当fetch属性设定为join时,表示连接抓取(Join
fetching):Hibernate通过
在Select语句中使用outer
join(外连接)来获得对象的关联实例或者关联集合。
当fetch属性设定为select时,表示查询抓取(Select
fetching):需要另外发
送一条Select语句抓取当前对象的关联实体或集合。
三。代码练习
<set
name="emps"
cascade="save-update">
<key
column="depart_id"/>
<one-to-many
class="Employee"/>
</set>
<set
name="students"
table="taacher_student"
inverse="true"><!--
table是用来指定中间表的属性
-->
<key
column="teacher_id"></key><!--
查找教师id时,链接中间表表的teacher_id
-->
<many-to-many
class="Student"
column="student_id"></many-to-many>
</set>
‘伍’ hibernate的主要作用是什么
白一点就是把JDBC封装起来,作为一种工具让我们来用。
就好像平时吃饭:
JDBC是自己做饭吃,需要买菜,做饭,当然就要知道在哪买菜,买什么的菜,多少钱,怎么做,放什么作料等等的
而Hibernate就是个饭店,你只要知道这个饭多少钱,掏钱就可以吃到饭,不知道怎么做也可以吃到饭
‘陆’ Hibernate有哪几种查询数据的方式
3种
1)session对象的load和get方法,只能按主键查询
2)hql:语法与sql类似,但查询的是对象,支持所有的sql查询方式,可以直接返回对象集合,可以完成修改删除
3)Criteria:只能进行查询,可以不用写查询语句,通过java代码完成
‘柒’ 描述一下hibernate的工作机制,常用的类和方法
通过配置文件,将对象转型为表
‘捌’ Hibernate的主要功能及用法
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。
‘玖’ Hibernate中getHibernateTemplate()具体包含哪些方法,都怎么用
HibernateTemplate()提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring 2.0更增加对命名SQL查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate的常规用法,就可完成大多数DAO对象的CRUD操作。下面是HibernateTemplate的常用方法简介:
q void delete(Object entity):删除指定持久化实例
q deleteAll(Collection entities):删除集合内全部持久化类实例
q find(String queryString):根据HQL查询字符串来返回实例集合
q findByNamedQuery(String queryName):根据命名查询返回实例集合
q get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例
q save(Object entity):保存新的实例
q saveOrUpdate(Object entity):根据实例状态,选择保存或者更新
q update(Object entity):更新实例的状态,要求entity是持久状态
q setMaxResults(int maxResults):设置分页的大小
getHibernateTemplate已经封装好了一些基本的方法,可以直接去用,也就是template, 而getSession只是获取一个数据工厂的session,然后大部分方法都需要自己写,加hql语句,然后用query方法执行,类似添加删除更新这样的可以直接用getHibernateTemplate而大部分带条件查询的就需要用getSession写了。
‘拾’ Hibernate有几种查询方法
Hibernate有4种查询方法。
HQL 通过Hibernate提供的查询语言进行查询。Hibernate Query lanague
EJBQL(JPQL 1.0) 是EJB提供的查询语言
QBC(query by cretira)通过Cretira接口进行查询
QBE(query by Example) 通过Example编程接口进行查询
从功能强弱上排序:NativeSQL > HQL > EJBQL(JPQL 1.0) >QBC(query by cretira) >QBE(query by Example) 1: QBE (Query By Example) QBC查询方式。
QBC(Query By Criteria)查询方式是 Hibernate 提供的“ 更加面向对象”的一种检索方式。 QBC 在条件查询上比 HQL 查询更为灵活,而且支持运行时动态天生查询语句。
在Hibernate 应用中使用 QBC 查询通常经过 3 个步骤:
(1)使用 Session 实例的 createCriteria() 方法创建 Criteria 对象
(2)使用工具类 Restrictions 的相关方法为 Criteria 对象设置查询对象
(3)使用 Criteria 对象的 list() 方法执行查询,返回查询结果QBE查询QBE查询就是检索与指定样本对象具有相同属性值的对象。因此QBE 查询的关键就是样本对象的创建,样本对象中的所有非空属性均将作为查询条件。 QBE 查询的功能子集,固然 QBE 没有 QBC 功能大,但是有些场合 QBE 使用起来更为方便。
工具类Example 为 Criteria 对象指定样本对象作为查询条件Java代码:
1 Session session = HibernateSessionFactory.getSessionFactory().openSe ssion();
2 Transaction ts = session.beginTransaction();
3 Customer c = new Customer();
4 c.setCname("Hibernate");
5 Criteria criteria = session.createCriteria(Customer. class );
6 Criteria.add(Example.create(c));
7 Iterator it = criteria.list().iterator();
8 ts.commit();
9 HibernateSessionFactory.closeSession();