hibernate查询数据库的三种方式

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Hibernate查询数据库的三种方式

一、Hibernate的HQL与SQL查询

1.Hql(Hibernate Query Language )是面向对象的查询查询方式,HQL查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,提供了类似标准SQL语句的查询方式,同时也提供了面向对象的封装。HQL查询语句from关键字后面跟的类名+类对象, where 后用对象的属性做条件;

示例代码:(User是映射数据库的一个类)

public boolean checkUser(UserForm userForm) {

// TODO Auto-generated method stub

//String HQLString = "from User u where

ername='"+userForm.getUsername()+"'";

String HQLString = "from User u where ername=:uname";

Session session = HibernateSessionFactory.currentSession();

// 获取事务

session.beginTransaction();

Query query = session.createQuery(HQLString);

query.setParameter("uname", userForm.getUsername());//绑定参数

Object list = query.list().get(0);//list获取数据集,get获取数据集的某条记录

// 提交事务

session.getTransaction().commit();

// 关闭Session

HibernateSessionFactory.closeSession();

User user=(User)list;

if(user.getPassword().equals(userForm.getPassword())){

return true;

}

else{

return false;

}

}

2.sql 是面向数据库表查询,from 后面跟的是表名,where 后用表中字段做条件;

示例代码:([xxdb].[dbo].[student]就是要查询的数据库表)

public boolean checkUser(UserForm userForm) {

// TODO Auto-generated method stub

//String SQLString="select * from [xxdb].[dbo].[student] u where

erName='"+userForm.getUsername()+"'";

String SQLString=”select * from [xxdb].[dbo].[student] u where

erName=:uname”;

Session session = HibernateSessionFactory.currentSession();

session.beginTransaction();

//Query query = session.createSQLQuery(SQLString).addEntity(User.class);//实体查询

Query query = session.createSQLQuery(SQLString).

addScalar("userid",StandardBasicTypes.INTEGER).

addScalar("username",StandardBasicTypes.STRING).

addScalar("password",StandardBasicTypes.STRING).

addScalar("gender",StandardBasicTypes.INTEGER);//标量查询query.setParameter("uname", userForm.getUsername());//绑定参数

Object list = query.list().get(0);//list获取数据集,get获取数据集的某条记录

session.getTransaction().commit();

HibernateSessionFactory.closeSession();

User user=(User)list;

if(user.getPassword().equals(userForm.getPassword())){

return true;

}

else{

return false;

}

}

3.对比hql和sql查询方式我们可以发现他们之间的不同:

a.首先是查询语句的不同,hql语句from 后面跟的类名+类对象, where 后用对象的属性做条件,而sql语句from 后面跟的是表名,where 后用表中字段做条件,这也就是面向对象和面向数据库的一个区别。(上面例子中的User类映射的就是数据库中的[xxdb].[dbo].[student]表);

b.创建查询对象的方法有所不同,hql是creatQuery,而sql是creatSQLQuery;

c.Hql可以省略select关键字而sql不能省略。

4.hql和sql查询语句原则上都可以用拼接的方式书写查询条件,但为了为了防止SQL注入漏洞的产生一般用参数绑定的方式,参数绑定的方式有多种:按参数名称绑定query.setString(“uname”,“老谢”),按参数位置绑定query.setString(0,”laoxie”),setParameter()方法,setProperties()方法,setProperties方法命名参数与一个对象的属性值绑定在一起,如下程序代码:

User user=new User();

user.setUserName(“谢谢”);

user.setGender(“1”);

Query query=session.createQuery(from user u where ername=:name and u.gender=:gender);

query.setProperties(user);

setProperties()方法会自动将user对象实例的属性值匹配到命名参数上,但是要求命名参数名称必须要与实体对象相应的属性同名。

二、Hibernate条件查询

使用Hibernate时,即使不了解SQL的使用与撰写,也可以使用它所提供的API来进行SQL语句查询,org.hibernate.Criteria对SQL进行封装,可以从Java物件的观点来组合各种查询条件,由Hibernate自动产生SQL语句,而不用特别管理SQL与数据库相依的问题。Criteria criteria = session.createCriteria(User.class);

List users = criteria.list();

相关文档
最新文档