<?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.bdqn.bean">
<class name="Emp">
<id name="empNo">
<generator class="assigned"/>
</id>
<property name="empName"/>
<property name="job"/>
<property name="salary"/>
<!--配置多对一的关系 -->
<many-to-one name="dept" column="DEPTNO" class="Dept"/>
</class>
<!-- 和class节点是同辈的
01.HQL命名查询 语句要写在CDATA中 -->
<query name="fromEmp">
<![CDATA[
from Emp
]]>
</query> <!-- 02.sql命名查询
001.如果查询的是所有数据 那么前台接收的时候必须是数组
002.投影查询的是时候? 查询一个属性的时候是 object对象 多个 就是object数组
003.如果还向把结果集封装成对象 就得使用???
query.setResultTransformer(Transformers.aliasToBean(Emp.class));
-->
<sql-query name="sqlFromEmp">
<![CDATA[
select * from emp
]]>
</sql-query> <!-- 查询指定的一个对象的姓名 -->
<sql-query name="selectName">
<![CDATA[
select empName from emp where empNo=:id
]]>
</sql-query> <!-- 查询指定的一个对象的姓名和薪水 真的向返回一个对象 -->
<sql-query name="selectNameAndSal">
<return-scalar column="empName"/>
<!--
type属性:类型,如果不写,Hibernate会自动检测。可以写java中类的全名或是写hibernate类型。
因为我们数据库中的salary 是float类型 无法自动映射 需要我们手动的设置匹配!
empNo 是number类型 无法自动映射 也 需要我们手动的设置匹配!
java.lang.Integer: java的全类名 也可以写成 hibernate类型中的int
double: hibernate类型
-->
<return-scalar column="empNo" type="java.lang.Integer"/>
<return-scalar column="salary" type="double"/>
<![CDATA[
select empName,empNo,salary from emp where empNo=:id
]]>
</sql-query> </hibernate-mapping>
public class EmpTest {
Session session =null;
Transaction transaction=null; @Before
public void before(){
session = HibernateSessionUtil.getCurrentSession();
transaction= session.beginTransaction();
} /**
* 命名查询: hibernate允许我们在xml映射文件或者类中(使用注解的方式)定义字符串形式的查询语句!
* 命名查询 可以写 hql也可以是sql语句! 程序不区分命名查询语句的类型(hql,sql),只会根据名称进行查询!
* getNamedQuery(); ===>得到我们实现写好的 命名查询!
*/
@Test
public void test01(){
List<Emp> list = session.getNamedQuery("fromEmp").list();
for (Emp emp : list) {
System.out.println(emp);
}
} /**
* 测试 sql-query查询
*
* 发现的问题?
* 我们的sql查询语句的结果不能封装成对象 ,只能是Object数组
*/
@Test
public void test02(){
List<Object[]> list = session.getNamedQuery("sqlFromEmp").list();
for (Object[] objects : list) {
System.out.println(objects[0]);
}
} /**
* 查询指定的一个对象的姓名 还有一个参数需要赋值
* 返回一个Object对象
*/
@Test
public void test03(){
String name= (String) session.getNamedQuery("selectName").setParameter("id", 1).uniqueResult();
System.out.println(name);
} /**
* 查询指定的一个对象的姓名和薪水 还有一个参数需要赋值
* 返回一个Object[]数组
*/
@Test
public void test04(){
Object[] obj= (Object[]) session.getNamedQuery("selectNameAndSal").setParameter("id", 1).uniqueResult();
System.out.println(obj[0]); //姓名
System.out.println(obj[1]); //薪水
}
/**
* 查询指定的一个对象的姓名和薪水 还有一个参数需要赋值
* 返回一个对象 怎么做?
* 01.在xml文件中在增加 <return-scalar>节点
* 02.我们在query对象返回来的时候 把结果转换成对象
*
*
*/
@Test
public void test05(){
//获取query对象 并且给参数赋值
Query query = session.getNamedQuery("selectNameAndSal").setParameter("id", 1);
//把query查询出来的结果集 转换成 对象
/**
* 底层的代码
* Creates a resulttransformer that will inject aliased values into
* instances of Class via property methods or fields.
*
* public static ResultTransformer aliasToBean(Class target) {
return new AliasToBeanResultTransformer(target);
}
*/ query.setResultTransformer(Transformers.aliasToBean(Emp.class));
Emp emp= (Emp) query.uniqueResult();
System.out.println(emp); } }

hibernate10--命名查询的更多相关文章

  1. Hibernate 命名查询

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

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

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

  3. 使用Hibernate命名查询

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

  4. Hibernate 命名查询NamedQuery (转)

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

  5. 12.hibernate命名查询

    1.创建如下javaweb项目结构 2.在项目的src下创建hibernate.cfg.xml主配置文件 <?xml version="1.0" encoding=" ...

  6. Hibernate异常之命名查询节点未找到

    异常信息: java.lang.IllegalArgumentException: No query defined for that name [salaryEmps] at org.hiberna ...

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

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

  8. Hibernate-ORM:14.Hibernate中的命名查询

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述命名查询,所谓命名查询是什么呢? Hibernate中允许我们在xml,实体类,甚至注解的方式来编 ...

  9. Hibernate命名查询

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

  10. hibernate学习系列-----(5)hibernate基本查询下篇:hibernate聚合函数、分组查询及命名查询

    在上一篇中,大致学习了hibernate的基本查询:HQL基本查询,今天,继续昨天的步伐,继续学习hibernate的基本查询..... 1.hql聚合函数,先大致列一下hql的聚合函数有哪些吧: 在 ...

随机推荐

  1. win10下搭建storm环境

    原文:https://blog.csdn.net/lu_wei_wei/article/details/80843365 1.下载storm; http://mirror.bit.edu.cn/apa ...

  2. 搭建memcached使用:/usr/bin/phpize 安装memcached扩展的时候报错

    Can't find PHP headers in /usr/include/phpThe php-devel package is required for use of this command ...

  3. SpringCloud无废话入门02:Ribbon负载均衡

    1.白话负载均衡 在上一篇的介绍中,我们创建了两个一模一样的服务提供者:Provider1和Provider2,然后它们提供的服务也一模一样,都叫Hello-Service.为什么一样的服务我们要部署 ...

  4. 20170814 新鲜:EChart新增了日历图,要想办法用起来

    比如我可以用下面这个图来展示某个电站的年报,看他之后一年每一天的发电量.  或者是在月报的时候看这个月每天的发电量.这个最妙的时候,他可以通过旁边的图例来筛选,从而产生一个动态的效果.   还有可以在 ...

  5. Switch语句的参数是什么类型的?

    在Java5以前,switch(expr)中,exper只能是byte,short,char,int类型. 从Java5开始,java中引入了枚举类型,即enum类型. 从Java7开始,exper还 ...

  6. 每天一个linux命令(4):mkdir

    1.命令简介 mkdir (Make Directory 创建目录): 若指定目录不存在则创建目录.在创建目录时,要求创建目录的用户具有写权限,并应保证新建的目录没有重名. 2.用法 用法:mkdir ...

  7. git图解

  8. jetty9.4缓存文件目录自定义

    jetty9.4安装包解压之后,有几个修改的地方和jetty7.6有不同,需要单独注意一下: 1. 端口设置 端口设置在${jetty_home}/start.ini中 2. 缓存文件生成目录 项目通 ...

  9. DES加密解密算法C语言代码实现

    代码: #include<stdio.h> #include<string.h> #include<stdlib.h> /*-------------------- ...

  10. 深入理解linux系统下proc文件系统内容

    深入理解linux系统下proc文件系统内容 内容摘要:Linux系统上的/proc目录是一种文件系统,即proc文件系统. Linux系统上的/proc目录是一种文件系统,即proc文件系统.与其它 ...