hibernate10--命名查询

<?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--命名查询的更多相关文章
- Hibernate 命名查询
1.定义 Hibernate允许在映射配置文件中定义字符串形式的查询语句,这种查询方式被称为命名查询. 2.创建表结构并添加测试数据 create table `student` ( `id` dou ...
- [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 使用Hibernate命名查询
HQL查询支持将查询所用的HQL语句放入配置文件中,而不是代码中,在Hibernate映射文件的<hibernate-mapping>元素中使用<query>子元素来定义命名查 ...
- Hibernate 命名查询NamedQuery (转)
转自:http://blog.163.com/ksm19870304@126/blog/static/374552332011993942391/ 配置方式: static List namedQue ...
- 12.hibernate命名查询
1.创建如下javaweb项目结构 2.在项目的src下创建hibernate.cfg.xml主配置文件 <?xml version="1.0" encoding=" ...
- Hibernate异常之命名查询节点未找到
异常信息: java.lang.IllegalArgumentException: No query defined for that name [salaryEmps] at org.hiberna ...
- Hibernate(十三)命名查询-批量处理和调用存储过程
一.命名查询 HQL语句混杂在代码之间将破坏代码的可读性 Hibernate允许在映射配置文件中定义字符串形式的查询语句,这种查询方式称为命名查询 二.建立数据表和持久化类 建立数据表 create ...
- Hibernate-ORM:14.Hibernate中的命名查询
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述命名查询,所谓命名查询是什么呢? Hibernate中允许我们在xml,实体类,甚至注解的方式来编 ...
- Hibernate命名查询
hibernate命名的查询是通过一些有意义的名称来使用查询的方式.就类似于使用别名一样. Hibernate框架提供命名查询的概念,以便应用程序员不需要将查询分散到所有的java代码,进一步提高代码 ...
- hibernate学习系列-----(5)hibernate基本查询下篇:hibernate聚合函数、分组查询及命名查询
在上一篇中,大致学习了hibernate的基本查询:HQL基本查询,今天,继续昨天的步伐,继续学习hibernate的基本查询..... 1.hql聚合函数,先大致列一下hql的聚合函数有哪些吧: 在 ...
随机推荐
- [转]通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题
转:http://blog.csdn.net/zhengwish/article/details/51602059 通过设置nginx的client_max_body_size解决nginx+php上 ...
- IntelliJ IDEA使用maven-javadoc-plugin生成Java Doc控制台乱码
问题描述 在使用IDEA生成Java Doc的过程中,发现IDEA控制台乱码,作为有轻微代码强迫症的我来说,这是不可忍受的,需要鼓捣一番.先上pom.xml中的javadoc插件配置 <!--配 ...
- [Linux] - Windows与Linux网络共享文件夹挂载方法
Windows与Linux网络SMB方式文件夹共享挂载 本示例系统: Windows 2003+ Linux-Centos/Ubuntu 本示例全为命令行操作,如何使用Windows.Linux命令行 ...
- Unitek的USB3.0 TF卡读卡器
淘宝买了个Unitek的usb3.0读卡器, 用来换掉之前用了很久sks的sub2读卡器, 收到之后在Ubuntu下先测了一下, 发现识别出来的是usb2.1 lsusb -D /dev/bus/us ...
- 美国FICO评分系统简介
美国的个人信用评分系统,主要是Fair IsaacCompany 推出的 FICO,评分系统也由此得名.一般来讲, 美国人经常谈到的你的得分 ,通常指的是你目前的FICO分数.而实际上, Fair I ...
- 详解 JVM Garbage First(G1) 垃圾收集器(转载)
前言 Garbage First(G1)是垃圾收集领域的最新成果,同时也是HotSpot在JVM上力推的垃圾收集器,并赋予取代CMS的使命.如果使用Java 8/9,那么有很大可能希望对G1收集器进行 ...
- H+ 显示并激活menuTab 根据tabName
//注:在contabs.js文件中 $(function () { }); 方法外 加入//注: data-name="' + menuName + '" 这句是加入的自定义属性 ...
- npm 发布包和删除包(2019最新攻略)
- Python PhantomJS 爬虫 示例
from selenium import webdriver# 请求url url = "https://auctions.freemansauction.com/auction-lot-d ...
- 【解惑】领略Java内部类的“内部”
转自:http://www.iteye.com/topic/494230 内部类有两种情况: (1) 在类中定义一个类(私有内部类,静态内部类) (2) 在方法中定义一个类(局部内部类,匿名内部类) ...