本篇主要介绍HIbernate常用的几种查询方式
HQL查询---------Query/session.createQuery(hql)
HibernateTemplate查询---------getHibernateTemplate.find(hql)
OBC查询----------Criteria/session.createCriteria(.class)
SQL查询-----------SQLQuery/session.createSQLQuery(sql)
HQL查询
最常见的查询方式:
大致步骤:
1.创建hql查询语句
2,通过Query对象,执行hql语句
3,若查询语句带有占位符或其他参数,那么就是用setObjectType()或setParameter()
最简单的查询:
String hql="select name from User where user='cc' and age>20";
Query query=session.createQuery(hql);
List<User> list=query.list();
以占位符方式进行查询
//编写查询语句,该from后面是对应的实体类,不是表名
String hql="from User where user=? and age>?";
//创建查询对象
Query query=session.createQuery(hql);
// //占位符从0开始计算,同时将查询结果转化为list对象
List<User> list= query.setString(0, "cc").setInteger(1,20).list();
//通过设置参数形式
List<User> list=query.setParameter(0,"cc").setParameter(1,20).list();
以别名参数进行查询
使用别名参数进行查询,以:别名参数
String hql="from User where user=:name and age>:age";
//创建查询对象
Query query=session.createQuery(hql);
//传入查询参数,并执行查询&查询结果转化为list对象
List<User> list=query.setString("name","cc").lsetInteger("age",20).ist();
//通过设置参数形式
List<User> list=query.setParameter("name","cc").setParameter("age",20).list();
分页查询
主要由两个参数,从哪个数据开始显示,每页显示多少个
//查询第一页的数据,每页显示10个数据
String hql="from User";
Query query=session.createQuery(hql);
//设置从哪个数据开始显示(page-1)*每页显示数
query.setFirstResult(0);
query.setMaxResult(10);
List<User> list=query.list();
//查询第4页的数据,每页显示8个数据//从第24个数据开始显示,
String hql="from User"
Query query=session.createQuery(hql).setFirstResult(24).setMaxResult(8);
List<User> list=query.list();
HibernateTemplate查询,该查询时HIbernate为了简化相关的增删改查操作,而封装了数据库的一些通用操作,可以直接使用,使用时机:由Spring整合Hibernate&由Spring对Hibernate相关的操作对象进行封装&对应dao层实现类必须继承HibernateDaoSupport:
1继承HibernateDaoSupport
2编写hql查询语句
3通过getHibernateTemplate().find()执行查询
public class FindUser extends HibernateDaoSupport{
public String FindUserName(){
String hql="select username from User where username='cc'";
List<User> list=this.getHibernateTemplate().find(hql);
//判断该数据库是否存在对应的用户名
if(list.size>0)
//存在则返回该查询结果
return list.get(0).value();
//不存在则返回null
return null;
}
find(String queryString,object value);
String hql="select username from User where sid=?"
List<User> list=this.getHibernateTemplate().find(hql,123);
find(String queryString,Object[] values)
String hql="from User where username=? and uis=?"
List<User> list=getHibernateTemplate().find(hql,new String[]{"cc","123"});
使用别名参数进行查询
findByNameParam(String queryString , String paramName , Object value)
其中value是paramname的值
String hql="from User where name=:name";
String paramname="name";
String value="cc"
List<User> list=this.getHibernateTemplate(hql,paramname,value);
QBC:对象化查询Criteria方法
1新建查询对象Criteria,且引入对应的实体类(与数据库对应的表具有映射关系)
2执行查询
3若该查询语句中需要传入对应参数则调用add方法添加约束条件
且该约束条件主要有eq(=),gt(>),lt(<),or
查询所有
Criteria cc=session.createCriteria(User.class);//User实体类
List<User> list=cc.list();
带参数查询
//查询名字为cc的所有数据
Criteria cc=session.createCriteria(User.class);
//给实体类对应的属性变量赋值
cc.add(Restrictions.eq("userName","cc"));
List<User> list=cc.list();
//查询名字为cc年龄超过20岁的男性
//多个条件
Criteria cc=sessino.createCriteria(User user);
//给实体类的属性赋值
cc.add(Restrictions.eq("name","cc");
cc.add(Restrictions.gt("age",20);
cc.add(Restrictions.eq("sex","男");
List<User> list=cc.list();
分页
//查询第一页的数据,每页显示10个数据
Criteria cc=session.createCriteria(User.class);
cc.setFirstResult(0);
cc.setMaxResult(10);
List<User> list=cc.list();
SQL查询(适用情况:不熟悉HQL的朋友,又不打算转数据库平台的朋友,万能方法 缺点:破坏跨平台,不易维护,不面向对象。
因为这个方法不常用,所以就只写这一个简单例子了
1开启事务
2编写sql
3执行查询
4提交事务
session.beginTranscation();
String sql="select username from User";
List list=session.createSQLQuery(sql).list();
session.getTranscation().commit();