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的聚合函数有哪些吧: 在 ...
随机推荐
- 彻底搞清楚javascript中的require、import和export
为什么有模块概念 理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块. 但是,Javascript不是一种模块化编程语言,在es6以前,它是不支持”类”(class),所以也 ...
- EF Core中执行Sql语句查询操作之FromSql,ExecuteSqlCommand,SqlQuery
一.目前EF Core的版本为V2.1 相比较EF Core v1.0 目前已经增加了不少功能. EF Core除了常用的增删改模型操作,Sql语句在不少项目中是不能避免的. 在EF Core中上下文 ...
- MOS管当开关控制时,为什么一般用PMOS做上管NMOS做下管?
了解MOS管的开通/关断原理你就会发现,使用PMOS做上管.NMOS做下管比较方便.使用PMOS做下管.NMOS做上管的电路设计复杂,一般情况下意义不大,所以很少采用. 下面先了解MOS管的开通/关断 ...
- 数据中心架构ToR和EoR【总结】
1.前言 最近在看<云数据中心网络技术>,学习了企业数据中心网络建设过程,看到有ToR和EoR两种布线方式,之前没有接触过,今天总结一下. 2.布线方式 ToR:(Top of Rack) ...
- mac的vscode配置使用zsh
配置文件 "terminal.integrated.shell.osx": "zsh"
- CentOS7通过rsync+crontab实现两台服务器文件同步
centos7系统中已经默认安装rsync 1:主服务器配置 (1)修改rsyncd.conf 配置文件 [root@localhost app]# vi /etc/rsyncd.conf motd ...
- android自己定义控件之飞入飞出控件
近期呢,本人辞职了.在找工作期间.不幸碰到了这个求职淡季,另外还是大学生毕业求职的高峰期,简历发了无数份却都石沉大海.宝宝心里那是一个苦啊! 翻着过去的代码,本人偶然找到了一个有意思的控件.那时本人还 ...
- 通过__block的作用深入研究block
block普通引用 默认情况下,在block中访问外部变量是通过复制一个变量来操作的,既可以读,但是写操作不对原变量生效,下面通过代码来举证 NSString *a = @"testa&qu ...
- 14.翻译系列:从已经存在的数据库中生成上下文类和实体类【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/code-first-from-existing-database.aspx EF 6 ...
- 在 Windows 8、Windows 10 桌面模式下的 .NET Framework 程序中,引用 Windows.Runtime 的 API。
参考:1.https://www.cnblogs.com/webtojs/p/9675956.html 2.http://jennal.com/2016/04/28/using-windows-run ...