------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

本篇博客讲述命名查询,所谓命名查询是什么呢?

Hibernate中允许我们在xml,实体类,甚至注解的方式来编写查询语句,本篇博客将讲述xml中的方式

一,准备好准备工作,我由于上篇博客把大量的准备都做好,所以,本篇从简

二,预览hbm.xml

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="cn.dawn.day05.entity">
  6. <!--如果上面指定package的话,class的name就不必写全类名-->
  7. <!--lazy:是否懒加载(延迟加载) 默认值是true,延迟加载-->
  8. <!--<class name="Teacher">-->
  9. <!--直接加载-->
  10. <class name="Emp" lazy="false">
  11. <!--主键-->
  12. <id name="empId" column="empId">
  13. <!--主键生成策咯 assigned程序员自己创建-->
  14. <!--identity是mysql里的自增,一会做增加操作不必再给主键赋值-->
  15. <!--increment是先查最大的主键列,在下一条给主键加一-->
  16. <!--sequence是oracle的主键生成策咯,他一会需要指定序列名字<param name="sequence">序列名</param>-->
  17. <generator class="assigned"></generator>
  18. </id>
  19. <property name="name"/>
  20. <property name="sal"/>
  21. <property name="job"/>
  22. <!--table指的是中间表,承载关联关系的表-->
  23.  
  24. <!--另外与他有多对多关联的实体类-->
  25. <many-to-one name="dept" column="deptNo" class="Dept"/>
  26. </class>
  27.  
  28. <!--hql-->
  29. <!--HQL命名查询-->
  30. <query name="getAllEmps">
  31. <!--这个符号表示不编译关键字,比如大于号小于号等-->
  32. <![CDATA[
  33. from Emp
  34. ]]>
  35. </query>
  36. <!--SQL命名查询,返回的是一个Object数据-->
  37. <sql-query name="getAllEmpsBySql">
  38. <!--这个符号表示不编译关键字,比如大于号小于号等-->
  39. <![CDATA[
  40. select * from emp
  41. ]]>
  42. </sql-query>
  43. <!--查询中携带条件-->
  44. <sql-query name="getAllEmpById">
  45. <!--这个符号表示不编译关键字,比如大于号小于号等-->
  46. <![CDATA[
  47. select * from emp where empId=:id
  48. ]]>
  49. </sql-query>
  50. <!--查询返回一个对象-->
  51. <sql-query name="getEmpObject">
  52. <return-scalar column="empId"/>
  53. <return-scalar column="name"/>
  54. <return-scalar column="sal"/>
  55. <return-scalar column="job"/>
  56. <!--但是无法绑定关联对象-->
  57. <!--这个符号表示不编译关键字,比如大于号小于号等-->
  58. <![CDATA[
  59. select * from emp where empId=:id
  60. ]]>
  61. </sql-query>
  62. </hibernate-mapping>

三,查全部使用HQL语句(用命名查询)

  1.在xml中使用到的方法是这个:

  1. <!--hql-->
  2. <!--HQL命名查询-->
  3. <query name="getAllEmps">
  4. <!--这个符号表示不编译关键字,比如大于号小于号等-->
  5. <![CDATA[
  6. from Emp
  7. ]]>
  8. </query>

    此处需要注意的就是<![CDATA[      ]]>这个标签,它表示不以关键字的形式编译里面的字符,例如<小于号在xml不以尖括号的形式编译

  2.单测方法:

  1. @Test
  2. /*HQL命名查询*/
  3. public void t1HQLnamedquery(){
  4. List<Emp> emps = session.getNamedQuery("getAllEmps").list();
  5. for (Emp emp:emps){
  6. System.out.println(emp);
  7. }
  8. /*
  9. Hibernate: select emp0_.empId as empId1_1_, emp0_.name as name2_1_, emp0_.sal as sal3_1_, emp0_.job as job4_1_, emp0_.deptNo as deptNo5_1_ from Emp emp0_
  10. Hibernate: select dept0_.deptId as deptId1_0_0_, dept0_.name as name2_0_0_, dept0_.location as location3_0_0_ from Dept dept0_ where dept0_.deptId=?
  11. Hibernate: select dept0_.deptId as deptId1_0_0_, dept0_.name as name2_0_0_, dept0_.location as location3_0_0_ from Dept dept0_ where dept0_.deptId=?
  12. Emp{empId=1, name='a', job='财务猿1', sal=10000.0, dept=Dept{deptId=1, name='xx部', location='1楼'}}
  13. Emp{empId=2, name='Ab', job='财务猿2', sal=5000.0, dept=Dept{deptId=1, name='xx部', location='1楼'}}
  14. Emp{empId=3, name='bAa', job='财务猿3', sal=6000.0, dept=Dept{deptId=1, name='xx部', location='1楼'}}
  15. Emp{empId=4, name='aaA', job='程序猿1', sal=100000.0, dept=Dept{deptId=2, name='研发部', location='2楼'}}
  16. Emp{empId=5, name='aB', job='程序猿2', sal=50000.0, dept=Dept{deptId=2, name='研发部', location='2楼'}}
  17. Emp{empId=6, name='AC', job='程序猿3', sal=60000.0, dept=Dept{deptId=2, name='研发部', location='2楼'}}
  18. Emp{empId=7, name='AD', job='Boss', sal=5000000.0, dept=null}
  19. * */
  20. }

四,查全部使用SQL语句(用命名查询)

  1.xml中

  1. <!--SQL命名查询,返回的是一个Object数据-->
  2. <sql-query name="getAllEmpsBySql">
  3. <!--这个符号表示不编译关键字,比如大于号小于号等-->
  4. <![CDATA[
  5. select * from emp
  6. ]]>
  7. </sql-query>

  2.单测方法:

  1. @Test
  2. /*SQL命名查询,返回的是一个Object数据*/
  3. public void t2HQLnamequeryBySQL(){
  4. List<Object[]> list=session.getNamedQuery("getAllEmpsBySql").list();
  5. for(Object[] emp:list){
  6. System.out.println(emp[0]);//id
  7. System.out.println(emp[1]);//name
  8. /*System.out.println(emp[2]);//sal*/
  9. }
  10.  
  11. /*
  12. Hibernate: select * from emp
  13. 1
  14. a
  15. 2
  16. Ab
  17. 3
  18. bAa
  19. 4
  20. aaA
  21. 5
  22. aB
  23. 6
  24. AC
  25. 7
  26. AD
  27. * */
  28. }

五,带条件查询(用命名查询,返回的是List<Object[]>)

  1.xml中:

  1. <!--查询中携带条件-->
  2. <sql-query name="getAllEmpById">
  3. <!--这个符号表示不编译关键字,比如大于号小于号等-->
  4. <![CDATA[
  5. select * from emp where empId=:id
  6. ]]>
  7. </sql-query>

  2.单测方法:

  1. @Test
  2. /*查询中携带条件*/
  3. public void t3HQLnamedqueryByParamter(){
  4. List<Object[]> list = session.getNamedQuery("getAllEmpById").setParameter("id", 1).list();
  5. for(Object[] emp:list){
  6. System.out.println(emp[0]);//id
  7. System.out.println(emp[1]);//name
  8. /*System.out.println(emp[2]);//sal*/
  9. }
  10.  
  11. /*
  12. Hibernate: select * from emp where empId=?
  13. 1
  14. a
  15. * */
  16. }

六,带条件查询,返回的是Object(使用命名查询)

  1.xml中:

  1. <!--查询返回一个对象-->
  2. <sql-query name="getEmpObject">
  3. <return-scalar column="empId"/>
  4. <return-scalar column="name"/>
  5. <return-scalar column="sal"/>
  6. <return-scalar column="job"/>
  7. <!--但是无法绑定关联对象-->
  8. <!--这个符号表示不编译关键字,比如大于号小于号等-->
  9. <![CDATA[
  10. select * from emp where empId=:id
  11. ]]>
  12. </sql-query>

  2.单测方法:

  1. @Test
  2. /*查询返回一个对象*/
  3. public void t4HQLnamedqueryReturnOneObj(){
  4. Query query = session.getNamedQuery("getEmpObject").setParameter("id", 1);
  5. /*把查询出来的结果集转换成指定的对象*/
  6. query.setResultTransformer(Transformers.aliasToBean((Emp.class)));
  7. Emp emp = (Emp)query.uniqueResult();
  8. System.out.println(emp);
  9.  
  10. /*
  11. Hibernate: select * from emp where empId=?
  12. Emp{empId=1, name='a', job='财务猿1', sal=10000.0, dept=null}
  13. * */
  14. }

Hibernate-ORM:14.Hibernate中的命名查询的更多相关文章

  1. Hibernate命名查询

    hibernate命名的查询是通过一些有意义的名称来使用查询的方式.就类似于使用别名一样. Hibernate框架提供命名查询的概念,以便应用程序员不需要将查询分散到所有的java代码,进一步提高代码 ...

  2. Hibernate(十二):HQL查询(一)

    概述 Hibernate提供了以下几种检索对象的方式 1)导航对象图检索方式:根据已经加载的对象导航到其他对象: 2)OID检索方式:按照对象的OID来检索对象: 3)HQL检索方式:使用面向对象的H ...

  3. java:Hibernate框架3(使用Myeclipse逆向工程生成实体和配置信息,hql语句各种查询(使用hibernate执行原生SQL语句,占位符和命名参数,封装Vo查询多个属性,聚合函数,链接查询,命名查询),Criteria)

    1.使用Myeclipse逆向工程生成实体和配置信息: 步骤1:配置MyEclipse Database Explorer: 步骤2:为项目添加hibernate的依赖: 此处打开后,点击next进入 ...

  4. Hibernate 命名查询

    1.定义 Hibernate允许在映射配置文件中定义字符串形式的查询语句,这种查询方式被称为命名查询. 2.创建表结构并添加测试数据 create table `student` ( `id` dou ...

  5. Hibernate中的HQL查询与缓存机制

    HQL:完全面向对象查询 SQL的执行顺序: 1.From 2.Where 过滤基础数据 where与having的区别:1.顺序不同 2.where过滤基础数据 3. 过滤聚合函数 3.Group ...

  6. [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. 使用Hibernate命名查询

    HQL查询支持将查询所用的HQL语句放入配置文件中,而不是代码中,在Hibernate映射文件的<hibernate-mapping>元素中使用<query>子元素来定义命名查 ...

  8. Hibernate 命名查询NamedQuery (转)

    转自:http://blog.163.com/ksm19870304@126/blog/static/374552332011993942391/ 配置方式: static List namedQue ...

  9. Hibernate(十三)命名查询-批量处理和调用存储过程

    一.命名查询 HQL语句混杂在代码之间将破坏代码的可读性 Hibernate允许在映射配置文件中定义字符串形式的查询语句,这种查询方式称为命名查询 二.建立数据表和持久化类 建立数据表 create ...

随机推荐

  1. Android(java)学习笔记33:注册广播接收者

    1. 下面我们先看一部分代码,由代码进行进一步的深入: registerReceiver( new BroadcastReceiver() {//onReceive中代码的执行时间不要超过5s,and ...

  2. 【[SCOI2012]喵星球上的点名】

    好题啊 \(SA+ST\text{表}+\text{莫队}\) 我们先强行把所有的串连起来,串与串之间插入特殊字符,姓和名之间也插入特殊字符 之后跑一遍\(SA\),求出\(sa\)和\(het\) ...

  3. Linux下安装jdk步骤

    1.检查当前服务器中是否有安装jdkrpm -qa|grep java 2. 批量删除java rpm -qa | grep java | xargs rpm -e --nodeps 3. 安装jdk ...

  4. mac 上安装lua

    mac 安装lua google了好个看起来都不怎么好操作,这个是在命令行下操作的很简单. http://www.lua.org/download.html curl -R -O http://www ...

  5. 手写数字识别的k-近邻算法实现

    (本文为原创,请勿在未经允许的情况下转载) 前言 手写字符识别是机器学习的入门问题,k-近邻算法(kNN算法)是机器学习的入门算法.本文将介绍k-近邻算法的原理.手写字符识别问题分析.手写字符识别的k ...

  6. 【洛谷P2831】[NOIP2016]愤怒的小鸟

    愤怒的小鸟 题目链接 本来是刷状压DP的,然而不会.. 搜索是比较好想的,直接dfs就行了 我们可以知道两只猪确定一条抛物线 依次处理每一只猪,有以下几种方法: 1.先看已经建立的抛物线是否能打到这只 ...

  7. 【luogu P3627 [APIO2009]抢掠计划】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3627 把点权转化到边权上去. #include <stack> #include <que ...

  8. mysql自连接

    自连接: -- 求7369员工编号,姓名,经理编号和经理姓名 select e1.empno,e1.ename,e2.empno,e2.ename from emp e1,emp e2 where e ...

  9. mobileeye

    if a human can drive a car based on vision alone – so can a computer. 但是目前哪家能做到?

  10. JavaScript编写棋盘覆盖

    一.前言 之前做了一个算法作业,叫做棋盘覆盖,本来需要用c语言来编写的,但是因为我的c语言是半桶水(哈哈),所以索性就把网上的c语言写法改成JavaScript写法,并且把它的覆盖效果显示出来 二.关 ...