HibernateのHQL操作
来源:互联网 发布:时时彩组三报警软件 编辑:程序博客网 时间:2024/05/21 08:45
前言:
HQL(Hibernate Query Language)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装。完整的HQL语句形式如下: Select/update/delete…… from (这里是不可省略的)…… where …… group by …… having …… order by …… asc/desc 其中的update/delete为Hibernate3中所新添加的功能,可见HQL查询非常类似于标准SQL查询。
正题:
还是接着上一篇博文来写,来做一个简单的HQL 操作,在做HQL操作之前需要拿到Query对象(org.hibernate.Query),怎么拿到这个Query对象呢?
session.createQuery(String hql)可以拿到Query对象,通过Query对象调 list()就可以拿到一个查询操作得到的集合。直接看代码:
package com.lagersoft.test;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import com.lagersoft.bean.Grade;import com.lagersoft.bean.Student;public class Test01 {//HQL: select ... from ... where ... group by...having ...order by ...//大致和SQL操作类似public static void main(String[] args) {//t1();//t2();//t3();//t4();t5();}//HQL之在查询的同时将数据装进对象里面,这里 select new Xxxx() from Xxxx...; new 注意后面这个对象需要给这个//实体添加上相应的构造器 也就是 new Student(sid,stuname,grade) 如果实体没有空的构造器还需要添加上一个空的构造器private static void t5() {Configuration cfg = new Configuration().configure();SessionFactory sessionFactory = cfg.buildSessionFactory();Session session = sessionFactory.openSession();Query query = session.createQuery("select new Student(sid,stuname,grade) from Student s");List<Student> stuInfo = query.list();for(Student s : stuInfo){System.out.println(s.getStuname());System.out.println(s.getSid());System.out.println(s.getGrade());}session.close();}//HQL之查询多个属性值,这里给大家一个建议:无论是使用HQL或是SQL语句时不要使用 select * ...这样的语句,//要使用多少个字段就select多少个字段,因为第一这样可以节省一些资源,提高效率,还有一点就是后期等你的//程序升级时可能会给表添加字段或是有些字段可能会移出,到时候会比较麻烦(后果真的很严重)private static void t4() {Configuration cfg = new Configuration().configure();SessionFactory sessionFactory = cfg.buildSessionFactory();Session session = sessionFactory.openSession();Query query = session.createQuery("select sid,stuname,grade from Student s");List<Object[]> stuInfo = query.list();for(Object[] s : stuInfo){System.out.println(s[0]);System.out.println(s[1]);System.out.println(s[2]);}session.close();}//HQL之使用 select...from...这里同样要注意select后接java对象的属性名,from后接Java对象名,严格区分大小写//查询单一属性时调用query的list方法时返回的是List<Object>private static void t3() {Configuration cfg = new Configuration().configure();SessionFactory sessionFactory = cfg.buildSessionFactory();Session session = sessionFactory.openSession();Query query = session.createQuery("select stuname from Student");List<Object> stuInfo = query.list();for(Object s : stuInfo){System.out.println(s.toString());}session.close();}//最普通的HQL代码,普通的代码 使用from ... from后面接的是java对象,可以省略全称,这里区分大小写private static void t2() {Configuration cfg = new Configuration().configure();SessionFactory sessionFactory = cfg.buildSessionFactory();Session session = sessionFactory.openSession();Query query = session.createQuery("from Student");List<Student> list = query.list();for(Student s : list){System.out.println("学生姓名:" + s.getStuname());System.out.println("学生班级:" + s.getGrade().getGname());}session.close();}//创建基础数据private static void t1() {// 加载配置文件Configuration cfg = new Configuration().configure();// 获取会话工厂对象SessionFactory sessionFactory = cfg.buildSessionFactory();// 通过会话工厂拿到一个会话,这个session可以看做是jdbc中Connection的作用Session session = sessionFactory.openSession();// 开始一个事务Transaction transaction = session.beginTransaction();Grade g = new Grade();g.setGname("Class A");g.getStudents().add(new Student("张三丰"));// 这里的保存班级对象的同时会将班级中的学生保存到session.save(g);// 提交事务并关闭会话transaction.commit();session.close();}}
当然Hql有一些操作是比较特殊的,比如说HQL的集合运算
最后按照惯例还是附上源文件:源码DownLoad
0 0
- HibernateのHQL操作
- Hibernate中Hql操作
- Hibernate(hql语句操作)
- Hibernate 对象操作 和 HQL
- hibernate中hql分页操作
- 记录Hibernate的hql操作
- Hibernate hql ---in操作符的使用
- Hibernate中的主要类别和HQL操作
- Hibernate插入、查询、删除操作 HQL
- Hibernate插入、查询、删除操作 HQL
- Hibernate中使用HQL进行查询操作
- Hibernate学习记录2 HQL常规操作
- Hibernate中使用HQL进行查询操作
- Hibernate hql 时间操作(加)
- HQL: Hibernate hql大全
- Hibernate-HQL 了解HQL
- 整合Struts+Hibernate+Spring应用开发 Hibernate hql操作详解
- Hibernate HQL
- 多线程--异步任务AsyncTask由浅入深探究
- ui--UIimage And UIIimageView
- CMMB中的H264和AAC打包成ts流
- 堆排序
- java之基础常识(一)
- HibernateのHQL操作
- Android新技术
- PostgreSQL9.6+PostGIS2.3学习笔记(二)常用函数以及JDBC连接
- ECMAScript6(ES6)标准之let、const关键字与块级作用域
- Excle 实现数据0,1 的离差标准化
- C Pointer-to-Function 与 C++ Pointer-to-MemberFunction 的区别
- 最小的K个数
- 深度学习元老Yann Lecun详解卷积神经网络
- 美国科技实力强大,创新能力领先世界的根本原因!