array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Hibernate(九)HQL查询 - 爱码网

一、Hibernate提供的查询方式

  • OID查询方式:主键查询。通过get()或者load()方法加载指定OID的对象查询结果为一个
  • HQL查询方式:通过Query接口使用HQL语言进行查询
  • QBC查询方式:通过Criteria等接口和类进行是查询
  • 本地SQL查询方式:使用原生的SQL语言进行查询
  • 对象导航查询方式:通过已经加载的对象,导航到其关联对象

其中HQL和QBC是Hibernater提供的专业的查询方式

HQL查询方式为官方推荐的标准查询方式

二、HQL查询简述

HQL:Hibernate Query Language

这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。

例如:

                //1.得到session
        Session session=HibernateSessionFactory.getSession();
        //2。创建查询语句这里的Student为持久化类的,类名
        String hql="from Student";
        //String hql="from Student where sname='张三'";
        //3.创建Query对象
        Query query=session.createQuery(hql);
        //4.执行查询  返回结果为list集合
        List<Student>  list=query.list();
        //5.输出结果
        for (Student stu : list) {
            System.out.println(stu.getSname()+stu.getSex());
        }
                    

 三、最简单的查询

查询全部信息

from Student    //直接使用持久化类名
from com.pb.entity.Student  //使用全路径

 通常我们不需要使用类的全限定名, 因为 auto-import(自动引入) 是缺省的情况。 

也可以为类名指定别名

from Student as s     //使用as 关键字指定类的别名
from Student s  //省略as 关键字指定类的别名

四、where子句

也可以支持where子句

from Student where sid=201503011
from Student  s where s.sid=201503011

4.1、在where中可以使用各种运算符 

Hibernate(九)HQL查询

例如:

from Student where sex='男' and sid<11070200
//查询学生性别 为男同时,学号小于 11070200的学生

from Student where sid between 11070100 and 11070200
//查询学生学号在11070100 and 11070200之间的学生

from Student where  snamelike '%飞';
//查询学生姓名最后一个字为飞的全部学生

from Student where sname like '_ik*';
//查询学生姓名,第一个字为任意,第2个为i,第3个为k,后面任意长度的学生

其中"-"匹配单个字符

"%"匹配任意长度的字符

"_"不可以进行汉字匹配,"%"可以进行汉字匹配

 五、返回结果

Query的方法

5.1、list()方法

//1.得到session
        Session session=HibernateSessionFactory.getSession();
        //2。创建查询语句这里的Student为持久化类的,类名
        String hql="from Student";
        //String hql="from Student where sid=201503011 ";
        //3.创建Query对象
        Query query=session.createQuery(hql);
        //4.执行查询  返回结果为list集合
        List<Student>  list=query.list();
        //5.输出结果
        for (Student stu : list) {
            System.out.println(stu.getSname()+stu.getSex());
        }

5.2、iterate()方法

//1.得到session
        Session session=HibernateSessionFactory.getSession();
        //2。创建查询语句这里的Student为持久化类的,类名
        String hql="from Student";
        //String hql="from Student where sid=201503011 ";
        //3.创建Query对象
        Query query=session.createQuery(hql);
        //4.执行查询  返回结果为Iterator
        Iterator<Student>  iterator=query.iterate();
        //5.输出结果
        while(iterator.hasNext()){
            Student stu=iterator.next();
            System.out.println(stu.getSname()+stu.getSex());
        }
        

5.3、uniqueResult()方法

返回的结果为一个对象,一般用来根据主键查询

//1.得到session
        Session session=HibernateSessionFactory.getSession();
        //2。创建查询语句这里的Student为持久化类的,类名
        //String hql="from Student";
        String hql="from Student where sid=201503011 ";
        //3.创建Query对象
        Query query=session.createQuery(hql);
        //4.执行查询  返回结果为Object类型,
        Student student=(Student) query.uniqueResult();
        //5.输出结果
        System.out.println(student.getSname()+student.getSex());

5.4、list()和iterate()方法区别

两都的查询机制不同

使用list()时,只需要查询一次就可以完成全部持久化类的,全部字段的查询

使用iterate()时,第一次查询出来的是全部记录的主键ID,然后再去系统缓存中查询相应的记录,如果有这个ID的记录, 将不进行数据库查询,如果没有将进行数据库查询,有多少条记录就要查询1+N次。

六、属性查询(投影查询)

6.1、直接指定属性查询

返回结果为Object数组,数组的长度为属性的个数

public static void findByproperty(){
        //1.得到session
        Session session=HibernateSessionFactory.getSession();
        //2。创建查询语句这里的Student为持久化类的,类名
        //String hql="from Student";
        String hql="select sid,sname,sex from Student ";
        //3.创建Query对象
        Query query=session.createQuery(hql);
        //4.执行查询  返回结果为Object类型,
        List list=query.list();
        //5.输出结果
        for (Object object : list) {
            //结果为查询属性数据 的Object对象数组
            Object [] obj=(Object[]) object;
            System.out.println(obj[0]+"\t"+obj[1]+"\t"+obj[2]);
        }
        
    }

6.2、使用构造方法查询

前提是持久化类中要有这个构造方法

返回结果为持久化类的对象集合

public static void findByCons(){
        //1.得到session
        Session session=HibernateSessionFactory.getSession();
        //2。创建查询语句这里的Student为持久化类的,类名
        //String hql="from Student";
        String hql="select new Student(sid,sname,sex) from Student ";
        //3.创建Query对象
        Query query=session.createQuery(hql);
        //4.执行查询  返回结果为Object类型,
        List<Student> list=query.list();
        //5.输出结果
        for (Student stu : list) {
            System.out.println(stu.getSname()+"\t"+stu.getSex());
        }
        
    }

这种更直接,明了解,一定要有相应的构造方法

 七、实体更新和删除

7.1、更新

    Session session =new Configuration().configure().buildSessionFactory().openSession();
        Student stu=(Student) session.get(Student.class, 201509009);
        
        Course cou=(Course) session.get(Course.class, 2222);
        
        Transaction tran=session.beginTransaction();
        stu.getCourses().add(cou);
        session.update(stu);
        tran.commit();
        session.close();
View Code

相关文章: