Hibernate的三种查询方式

Hibernate提供了三种查询方式:

1. Criteria查询方式(QBC)

Criteria 查询采用面向对象方式封装查询条件,又称为对象查询;就是对SQL 语句进行封装,
采用对象的方式来组合各种查询条件,由Hibernate自动产生SQL 查询语句。Criteria查询只能进行
一些比较简单的查询。

        Session session = HibernateSessionFactory.getSession();//获得会话对象
        Query query = null;
        Criteria criteria = session.createCriteria(Student.Class);//创建Criteria对象
		 List <T> list = criteria.list();//这里如果返回的是多张(比如2张表)表的查询结果,
		                              //则list中存放的是 一个对象数组(长度为2的Object[]);
		 for(T t : list){
		 System.out.println(T.*);
		 }

2. HQL查询方式

HQL(hibernate Query Languge)查询方式是官方推荐的查询方式,查询是一种面向对 象的查询语言,其中没有表和字段的概念,只有类、对象和属性的概念。根据指定的条件进行查询,使用查询预处理占位符,根据条件来输出要查找的结果。
Session session = HibernateSessionFactory.getSession();
String hql = “from table where…”;
Query query = session.createQuery(hql);
List list = query.list();//若是返回结果来自多个表,这里的T为对象数组Object[];
for(T t : list){
System.out.println(t.*);

}
注意:查询的时候要给表起别名,否则可能出错,因为HQL查询将查询语句看做一个对象来进行处理,那么 起一个别名相当于声明一个对象。
常见的HQL查询语句:

  1. Between查询:String sql = “from Table where eid between 2 and 5 order by eid desc”;

  2. in 查询:String hql = "from Table where eid in(1,2,3) ";

  3. 分组查询(group by) String hql ="from Table where eid = ? group by ? ";
    注意:指定 GROUP BY 时,选择列表中任何非聚合表达式内的每个属性名都应包含在GROUP BY列表中,或者GROUP BY表达式必须与选择列表表达式完全匹配,否则会出错。

  4. 聚合函数:max();sum(),min(),avg(),count();

  5. 模糊查询(like):String sql = “from Table where name like “%a%””;

  6. 分页查询:

    Query query = null;
    String hql = "from Student where 1=1 order by eid"; 
    query  = session.createQuery(hql);
    
    //开始分页(可以用循环输出),核心代码如下:
     query.firstResult(0); //表示从第几页开始 = (页数-1)*每页记录数;
     query.maxResult(10);  //表示每页的记录数;
     List<Student> list = query.list();//注意顺序,分页完成之后再存到list,否则分页无效。
    
  7. 子查询:String sql = “from Student where Student.id = (select max(Student.id) from Student)”;

  8. 按照属性查询:String sql = “select s.id,s.name,s.age,c.course from student s,course c where s.id=c.id”; 注意要给表起个别名,否则会出错。

  9. 外连接查询:String sql = “select * from student s left join course c where s.id=c.id”;

  10. 原生 sql查询,根据表的名称进行查询,一般在的查询过程中使用了 “数据库的特定函数”

3. SQL查询方式

session.beginTransaction();
String sql = "select id,username,userpwd from t_user";
List list = session.createSQLQuery(sql).list();
for(Object item : list){ 
Object[] rows = (Object[]) item;
System.out.println("id:" + rows[0] + "username:"
+ rows[1] + "userpwd:" + rows[2]);
}
session.getTransaction().commit();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值