导航:首页 > 使用方法 > hibernate常用方法

hibernate常用方法

发布时间:2022-01-09 00:50:53

㈠ 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();

㈡ 描述一下hibernate的工作机制,常用的类和方法

通过配置文件,将对象转型为表

㈢ hibernate的get()方法的使用

session.get( id ),返回是一个object的对象,

你强制装换一下就好了
session你应该能获取到吧,

get方法里的参数可以是任何一个 实现了 java.io.序列化接口.
而 不管 是String Ingeter等都实现了此接口,
所以可以传任何类型的主键 对象过来

不知道讲的对不对,我也刚学

㈣ Hibernate的几种查询方式

HIbernate主要常用有三种查询方式HQL、QBC、SQL:

1).HQL(Hibernate Query Language):hibernate数据查询语言;

2).QBC(Query By Criteria):规则查询

3).SQL:原生的SQL语句(较为复杂的情况下使用)

想要详细了解的可以看一下下面的几篇文章:

㈤ hibernate中的查询方式有哪些

hibernate的查询方式主要有以下几种,你可以看看,也可以去官方下载文档来看看,不过是英文版本。,谢谢
hibernate查询方式

♦ 小结Hibernate...
♦ Hibernate对多...
♦ hibernate查询...
♦ Hibernate之查...
♦ Hibernate 查...
更多相关推荐...
在HQL中关键字不区分大小写,但是属性和类名区分大小写,下面介绍各种类型的Hibernate的HQL查询。

1、Hibernate HQL查询:简单属性查询
* 单一属性查询,返回结果集属性列表,元素类型和实体类中相应的属性类型一致
* 多个属性查询,返回的集合元素是对象数组,数组元素的类型和对应的属性在实体类中的类型一致
数组的长度取决与select中属性的个数

* 如果认为返回数组不够对象化,可以采用HQL动态实例化Student对象
2、Hibernate HQL查询:实体对象查询

* N + 1问题,在默认情况下,使用query.iterate查询,有可以能出现N+1问题,所谓的N+1是在查询的时候发出了N+1条sql语句,1: 首先发出一条查询对象id列表的sql,N: 根据id列表到缓存中查询,如果缓存中不存在与之匹配的数据,那么会根据id发出相应的sql语句
* list和iterate的区别?

* list每次都会发出sql语句,list会向缓存中放入数据,而不利用缓存中的数据

* iterate:在默认情况下iterate利用缓存数据,但如果缓存中不存在数据有可以能出现N+1问题
3、Hibernate HQL查询:条件查询

* 可以采用拼字符串的方式传递参数

Java代码:
List students = session.createQuery("select s.id, s.name from Student s where s.name like '%1%'").list();
* 可以采用 ?来传递参数(索引从0开始)

Java代码:
List students = session.createQuery("select s.id, s.name from Student s where s.name like ?").setParameter(0, "%1%").list(); //可以使用?方式传递参数 //参数的索引从0开始 //传递的参数值,不用单引号引起来 //注意方法链编程
* 可以采用 :参数名 来传递参数
Java代码:
List students = session.createQuery ("select s.id, s.name from Student s where s.name like :myname").setParameter("myname", "%1%").list();
* 如果传递多个参数,可以采用setParamterList方法
Java代码:
List students = session.createQuery("select s.id, s.name from Student s where s.id in(:myids)").setParameterList("myids", new Object[]{1, 2, 3, 4, 5}).list();
* 在HQL中可以使用数据库的函数,如:date_format
Java代码:
List students = session.createQuery("select s.id, s.name from Student s where date_format(s.createTime, '%Y-%m')=?").setParameter(0, "2008-02").list();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //查询2008-01-10到2008-02-15创建的学生
List students =
session.createQuery("select s.id, s.name from Student s where s.createTime between ? and ?") .
.setParameter(0, sdf.parse("2008-01-10 00:00:00")) .
setParameter(1, sdf.parse("2008-02-15 23:59:59"))
.list();
4、Hibernate HQL查询:直接使用sql进行查询
Java代码:
List students = session.createSQLQuery("select * from t_student").list();

不会返回对象,而是所有属性,

5、Hibernate HQL查询:分页查询
* setFirstResult(),从0开始
* setMaxResults,每页显示多少条数据
Java代码:
List students = session.createQuery("from Student") .setFirstResult(1) .setMaxResults(2) .list();
6、Hibernate HQL查询:对象导航查询,在HQL中采用 . 进行导航
7、Hibernate HQL查询:连接查询
* 内连
Sql代码:
SELECT s.name, c.name FROM Student s (inner) join s.classes c
* 外连接(左连接/右连接)

Sql代码:
SELECT s.name, c.name FROM Student s left join s.classes c
8、Hibernate HQL查询:统计查询
Java代码:
List students =session.createQuery("select c.name, count(s) from Student s join s.classes c " +"group by c.name order by c.name").list(); for (Iterator iter=students.iterator(); iter.hasNext();) { Object[] obj = (Object[])iter.next(); System.out.println(obj[0] + ", " + obj[1]); }
9、DML风格的操作(尽量少用,因为和缓存不同步)
Java代码:
session.createQuery
("update Student s set s.name=? where s.id< ?")
.setParameter(0, "李四")
.setParameter(1, 5)
.executeUpdate();
应当尽量少用,因为和缓存不同步,也就是说,假如在执行上面的语句之前,已经把student封装成一个list曾经拿了出来,再执行上面的语句对 student中的表进行数据更新,然后再list Student表,则此时的list是从缓存中取的数据,而不是从表中找到的数据,也就是 说,list拿到的是update前的数据,所以造成了这种不同步,所以这种风格尽量少用。
从这个方面也可以看得出Hibernate并不适用于聚集性,统计,大量批量的更新,删除等操作。

㈥ 实现基于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中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中常用的注解方式,如@repository,及详解。

@overriide :限定重写父类方法,该注解只能用于方法。
@deprecated:用于表示某个程序元素(类,方法)已过时。
@SupperessWarnings:抑制编译器警告。
@Autowired是根据类型进行自动装配的。在上面的例子中,如果当Spring上下文中存在不止一个UserDao类型
@Qualifier配合@Autowired来解决这些问题。
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按byName自动注入罢了。@Resource有两个属性是比较重要的,分别是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
@PostConstruct(JSR-250)
在方法上加上注解@PostConstruct,这个方法就会在Bean初始化之后被Spring容器执行(注:Bean初始化包括,实例化Bean,并装配Bean的属性(依赖注入))。
它的一个典型的应用场景是,当你需要往Bean里注入一个其父类中定义的属性,而你又无法复写父类的属性或属性的setter方法时.
@PreDestroy(JSR-250)
在方法上加上注解@PreDestroy,这个方法就会在Bean初始化之后被Spring容器执行。由于我们当前还没有需要用到它的场景,这里不不去演示。其用法同@PostConstruct。.
使用@Scope来定义Bean的作用范围
在使用XML定义Bean时,我们可能还需要通过bean的scope属性来定义一个Bean的作用范围,我们同样可以通过@Scope注解来完成这项工

这些都应该是spring注解方式 看看是不是你要的 如果是 你就按照spring注解方式去网络上再搜搜 还有很多答案

㈨ Hibernate 有哪几种查询数据的方式

有三种方式,不过不是楼上说的那三种。
1.HQL查询
2.QBC查询
3.本地SQL查询

㈩ Hibernate有哪几种查询数据的方式

3种
1)session对象的load和get方法,只能按主键查询

2)hql:语法与sql类似,但查询的是对象,支持所有的sql查询方式,可以直接返回对象集合,可以完成修改删除

3)Criteria:只能进行查询,可以不用写查询语句,通过java代码完成

阅读全文

与hibernate常用方法相关的资料

热点内容
鼻饲管实验方法与步骤 浏览:362
直肠息肉的中医治疗方法是什么 浏览:651
远距离路由器连接方法 浏览:49
芥末酱怎么保存方法 浏览:398
膳食结构研究方法 浏览:893
食用百合种子来源盆栽养殖方法 浏览:397
鼻腔检测新冠的方法 浏览:210
消防泡沫枪头如何使用方法 浏览:263
不用分析就能赚钱的方法 浏览:616
大枣种植方法 浏览:625
楼房甲醛用什么去除最好的方法 浏览:812
未知物质化学键的痕量分析方法 浏览:242
阅读有难度方法有哪些 浏览:992
手机屏幕贴膜机使用方法 浏览:921
19岁副乳胀解决方法 浏览:478
最简单的不锈钢的辨别方法 浏览:61
茶几安装方法 浏览:821
亿通手机截屏方法 浏览:154
东原燃气壁挂炉使用方法 浏览:925
教师常用的指导方法有哪些 浏览:272