1、Query
(1)使用该方法查询时,不需要编写sql语句,但是需要编写hql(Hibernate Query Language)语句,该语句是Hibernate查询语言。
(2)hql语言 *** 作的是实体类和实体类的属性,比如查询所有数据的hql语句为:from 实体类名称。
(3)使用方法:首先创建Query对象,然后调用该对象的List方法返回数据集合。
@Test
public void test11(){
SessionFactory sessionFactory = null
Session session = null
Transaction tx = null
try {
sessionFactory = HibernateUtils.getFactory()
session = sessionFactory.getCurrentSession()
tx = session.beginTransaction()
/**
* 使用session对象的createQuery方法创建Query对象。
* 参数为hql语句
* 使用QUERY对象的list方法获取数据集合
*/
Query query =session.createQuery("from UserEntity")
List<UserEntity>list = query.list()
//使用forEach遍历集合
for (UserEntity userEntity : list) {
System.out.println(userEntity)
}
tx.commit()
} catch (Exception e) {
tx.rollback()
}finally{
sessionFactory.close()
}
}
2、criteria
(1)使用该对象不需要写hql语句,只需要指定实体类。
(2)使用方法:首先创建criteria对象,然后调用list返回数据集合。
@Test
public void test12(){
SessionFactory sessionFactory = null
Session session = null
Transaction tx = null
try {
sessionFactory = HibernateUtils.getFactory()
session = sessionFactory.getCurrentSession()
tx = session.beginTransaction()
/**
* 使用session对象的createCriteria方法创建criteria对象。
* 使用criteria对象的list方法获取数据集合
*/
Criteria criteria =session.createCriteria(UserEntity.class)
List<UserEntity>list = criteria.list()
//使用forEach遍历集合
for (UserEntity userEntity : list) {
System.out.println(userEntity)
}
tx.commit()
} catch (Exception e) {
tx.rollback()
}finally{
sessionFactory.close()
}
}
3、SQLQuery
(1)使用该对象,需要写底层的SQL语句。
(2)实现方法:首先创建该对象,然后调用list。
@Test
public void test13(){
SessionFactory sessionFactory = null
Session session = null
Transaction tx = null
try {
sessionFactory = HibernateUtils.getFactory()
session = sessionFactory.getCurrentSession()
tx = session.beginTransaction()
/**
* 使用session对象的createSQLQuery方法创建SQLQuery对象。
* 使用qQLQuery对象的list方法获取数据集合,集合里面不是对象,而是数组
*/
SQLQuery qQLQuery =session.createSQLQuery("select * from t_user")
List<Object[]>list = qQLQuery.list()
//使用forEach遍历集合
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects))
}
tx.commit()
} catch (Exception e) {
tx.rollback()
}finally{
sessionFactory.close()
}
}
(3)数组转换成对象
@Test
public void test13(){
SessionFactory sessionFactory = null
Session session = null
Transaction tx = null
try {
sessionFactory = HibernateUtils.getFactory()
session = sessionFactory.getCurrentSession()
tx = session.beginTransaction()
/**
* 使用session对象的createSQLQuery方法创建SQLQuery对象。
* 使用qQLQuery对象的list方法获取数据集合,集合里面不是对象,而是数组
*/
SQLQuery qQLQuery =session.createSQLQuery("select * from t_user")
//将数组装载进实体中
qQLQuery.addEntity(UserEntity.class)
List<UserEntity >list = qQLQuery.list()
//使用forEach遍历集合
for (UserEntity userEntity : list) {
System.out.println(userEntity)
}
tx.commit()
} catch (Exception e) {
tx.rollback()
}finally{
sessionFactory.close()
}
}
在 Hibernate4 中,利用原生SQL语句查询时,
1、可使用Session.createSQLQuery(sql)建立Qurey(org.hibernate.Query),
2、可使用Query.setParameter(int index, Object obj),对sql语句中的参数根据位置进行参数值动态绑定
升级到 Hibernate5 后
1、org.hibernate.Query被标记为@Deprecated
2、Session().createSQLQuery(sql)返回类型为org.hibernate.query.Query
3、并且Session().createSQLQuery也已经被标记为@Deprecated;
4、可使用Session().createNativeQuery(sql)代替createSQLQuery。
5、createNativeQuery返回的Query, 不可 通过setParameter(int index, Object obj) 根据位置 进行参数值动态绑定; 只可以 通过setParameter(String paramname, Object obj) 按参数名称绑定 。
6、createNativeQuery(sql)中的sql语句中的 查询占位符
只可使用 命名参数 方式进行编写。
上问错误例子中,将导致如下错误:
以在接口HibernateDaoSupport 中的类中获取session查询数据库中的数据。
一、Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行。
二、 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。
三、2EE5.0标准正式发布以后,持久化框架标准Java Persistent API(简称JPA)基本上是参考Hibernate实现的,而Hibernate在3.2版本开始,已经完全兼容JPA标准。
四、Hibernate是一个以LGPL(Lesser GNU Public License)许可证形式发布的开源项目。在Hibernate官网上有下载Hibernate包的说明。Hibernate包以源代码或者二进制的形式提供。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)