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

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

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

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

二,预览hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.dawn.day05.entity">
<!--如果上面指定package的话,class的name就不必写全类名-->
<!--lazy:是否懒加载(延迟加载) 默认值是true,延迟加载-->
<!--<class name="Teacher">-->
<!--直接加载-->
<class name="Emp" lazy="false">
<!--主键-->
<id name="empId" column="empId">
<!--主键生成策咯 assigned程序员自己创建-->
<!--identity是mysql里的自增,一会做增加操作不必再给主键赋值-->
<!--increment是先查最大的主键列,在下一条给主键加一-->
<!--sequence是oracle的主键生成策咯,他一会需要指定序列名字<param name="sequence">序列名</param>-->
<generator class="assigned"></generator>
</id>
<property name="name"/>
<property name="sal"/>
<property name="job"/>
<!--table指的是中间表,承载关联关系的表--> <!--另外与他有多对多关联的实体类-->
<many-to-one name="dept" column="deptNo" class="Dept"/>
</class> <!--hql-->
<!--HQL命名查询-->
<query name="getAllEmps">
<!--这个符号表示不编译关键字,比如大于号小于号等-->
<![CDATA[
from Emp
]]>
</query>
<!--SQL命名查询,返回的是一个Object数据-->
<sql-query name="getAllEmpsBySql">
<!--这个符号表示不编译关键字,比如大于号小于号等-->
<![CDATA[
select * from emp
]]>
</sql-query>
<!--查询中携带条件-->
<sql-query name="getAllEmpById">
<!--这个符号表示不编译关键字,比如大于号小于号等-->
<![CDATA[
select * from emp where empId=:id
]]>
</sql-query>
<!--查询返回一个对象-->
<sql-query name="getEmpObject">
<return-scalar column="empId"/>
<return-scalar column="name"/>
<return-scalar column="sal"/>
<return-scalar column="job"/>
<!--但是无法绑定关联对象-->
<!--这个符号表示不编译关键字,比如大于号小于号等-->
<![CDATA[
select * from emp where empId=:id
]]>
</sql-query>
</hibernate-mapping>

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

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

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

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

  2.单测方法:

    @Test
/*HQL命名查询*/
public void t1HQLnamedquery(){
List<Emp> emps = session.getNamedQuery("getAllEmps").list();
for (Emp emp:emps){
System.out.println(emp);
}
/*
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_
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=?
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=?
Emp{empId=1, name='a', job='财务猿1', sal=10000.0, dept=Dept{deptId=1, name='xx部', location='1楼'}}
Emp{empId=2, name='Ab', job='财务猿2', sal=5000.0, dept=Dept{deptId=1, name='xx部', location='1楼'}}
Emp{empId=3, name='bAa', job='财务猿3', sal=6000.0, dept=Dept{deptId=1, name='xx部', location='1楼'}}
Emp{empId=4, name='aaA', job='程序猿1', sal=100000.0, dept=Dept{deptId=2, name='研发部', location='2楼'}}
Emp{empId=5, name='aB', job='程序猿2', sal=50000.0, dept=Dept{deptId=2, name='研发部', location='2楼'}}
Emp{empId=6, name='AC', job='程序猿3', sal=60000.0, dept=Dept{deptId=2, name='研发部', location='2楼'}}
Emp{empId=7, name='AD', job='Boss', sal=5000000.0, dept=null}
* */
}

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

  1.xml中

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

  2.单测方法:

    @Test
/*SQL命名查询,返回的是一个Object数据*/
public void t2HQLnamequeryBySQL(){
List<Object[]> list=session.getNamedQuery("getAllEmpsBySql").list();
for(Object[] emp:list){
System.out.println(emp[0]);//id
System.out.println(emp[1]);//name
/*System.out.println(emp[2]);//sal*/
} /*
Hibernate: select * from emp
1
a
2
Ab
3
bAa
4
aaA
5
aB
6
AC
7
AD
* */
}

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

  1.xml中:

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

  2.单测方法:

    @Test
/*查询中携带条件*/
public void t3HQLnamedqueryByParamter(){
List<Object[]> list = session.getNamedQuery("getAllEmpById").setParameter("id", 1).list();
for(Object[] emp:list){
System.out.println(emp[0]);//id
System.out.println(emp[1]);//name
/*System.out.println(emp[2]);//sal*/
} /*
Hibernate: select * from emp where empId=?
1
a
* */
}

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

  1.xml中:

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

  2.单测方法:

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

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. MySQL学习(三)函数

    一.数学函数 绝对值函数ABS():ABS(X) 返回圆周率函数PI() 平方根函数SQRT() 求余函数MOD(X,Y) 获取整数函数CEIL(X),CEILING(X)返回不小于X的最小整数:FL ...

  2. Python 函数作为返回值

    函数作为返回值高阶函数除了可以接收函数作为参数外,还可以把函数作为结果值返回. def lazy_sum(*args): def sum(): ax=0 for n in args: ax = ax ...

  3. HDU 1853 MCMF

    题意:给定一个有向带权图,使得每一个点都在一个环上,而且权之和最小. 分析:每个点在一个环上,入度 = 出度 = 1,拆点入点,出点,s到所有入点全部满载的最小费用MCMF; #include < ...

  4. [19/03/21-星期四] 异常(Exception) (一)

    一.引言 在实际工作中,我们遇到的情况不可能是非常完美的.比如:你写的某个模块,用户输入不一定符合你的要求;你的程序要打开某个文件, 这个文件可能不存在或者文件格式不对 ,你要读取数据库的数据,数据可 ...

  5. 剑指offer23 从上往下打印二叉树

    没有把队列的头部弹出,出现内存错误:

  6. Android学习笔记_78_ Android开发中使用软引用和弱引用防止内存溢出

    在<Effective Java 2nd Edition>中,第6条“消除过期的对象引用”提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象 ...

  7. Java基础——数据结构总结

    目的 : 加强类与对象的内存分配理解,加强操作能力.理解数据结构. 结构 : 数据元素之间的关系. 数据结构 : 带有结构的数据对象. 线性结构: 各数据元素之间的逻辑以用一个线性序列简单的表达出现. ...

  8. 菜鸟笔记 -- Chapter 4.7 代码注释与编码规范

    4.7 代码注释与编码规范 在程序代码中适当的添加注释可以提高程序的可读性和可维护性.好的编码规范可以使程序更易阅读和理解.下面我们将介绍几种代码注释,以及应该注意的编码规范. 4.7.1 代码注释 ...

  9. iOS:常用属性、方法

    前言:一段时间没接触,很容易就忘记以前的知识.专写一篇,供几个月没接触,拿起却忘记了. 0.宏定义.系统相关 0-1).宏定义.规范 变量: //全局变量通常用小写g来提示 int gNumb=0; ...

  10. iOS之某公司iOS开发笔试题

    参考答案不唯一,大家可以根据自己的理解回答,没有必要跟笔者的一样.参考笔者的答案,也许给你带来灵感! 1.对数组中的元素去重复 例如: NSArray *array = @[@"12-11& ...