Hibernate 命名查询
1.定义
Hibernate允许在映射配置文件中定义字符串形式的查询语句,这种查询方式被称为命名查询。
2.创建表结构并添加测试数据
create table `student` ( `id` double , `age` double , `name` ) ); ','张三'); ','李四'); ','李四'); ','王五');
3.建立持久化类和配置文件
3.1hibernate.cfg.xml配置文件
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 方言类 --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="connection.url"> jdbc:mysql://localhost:3306/test </property> <!--连接MySQL的用户名 --> <property name="connection.username">root</property> <!--连接MySQL的密码 --> <property name="connection.password">root</property> <!--连接MySQL的驱动类名 --> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="current_session_context_class">thread</property> <!--以格式良好的方式显示SQL语句 --> <property name="format_sql">true</property> <!--显示SQL语句 --> <property name="show_sql">true</property> <!-- 表结构更新机制 --> <property name="hbm2ddl.auto">update</property> <mapping resource="cn/entity/student.hbm.xml"/> </session-factory> </hibernate-configuration>
3.2student.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"> <!-- package Student实体类所在的包 --> <hibernate-mapping package="cn.entity"> <!-- name:包名 table:表名 --> <class name="Student" table="STUDENT"> <!-- name:stuNo对应 表中的一列,一般是主键列--> <id name="id"> <generator class="native" /> </id> <property name="age" column="age" /> <property name="name" column="name"/> </class> <!-- 命名查询(named query查询); 根据学生编号查询学生信息 --> <query name="byIdFindStu1"> <!-- hql语句形式的 --> <![CDATA[ from Student s where s.id=:id ]]> </query> <sql-query name="byIdFindStu2"> <!-- 本地化sql的形式 --> <![CDATA[ select {stu.*} from Student stu where stu.id=? ]]> <!-- 指定别名让stu和实体有所关联 --> <return alias="stu" class="cn.entity.Student" /> </sql-query> </hibernate-mapping>
4.HibernateUtis工具类
/** * 工具类 * @author happy * */ public class HibernateUtils { //getCurrentSession()底层实现原理 //ThreadLocal变量 public static final ThreadLocal<Session> threadTL=new ThreadLocal<Session>(); //我想直接调用一个方法,获取Session //定义一个sessionFactory对象 private static SessionFactory factory; private static Configuration cfg; static{ cfg=new Configuration().configure(); factory=cfg.buildSessionFactory(); } //提供一个静态方法 public static Session currentSession(){ Session session=threadTL.get(); if(session==null){ //当前线程中没有session对象 session=factory.openSession(); threadTL.set(session); } return session; } //关闭session public static void closeSession(){ //获取线程中的session Session session = threadTL.get(); if (session!=null) { threadTL.set(null); session.close(); } } }
5.测试类
/** * 学生的测试类 * @author hyj * */ public class StudentTest { /* * Hql形式的命名查询 */ @Test public void HqlNamedQuery(){ //01.通过HibernateUtils工具类的currentSession方法获取和当前线程绑定的session Session session = HibernateUtils.currentSession(); //02.通过命名查询的方式创建query对象 Query query = session.getNamedQuery("byIdFindStu1"); //03.传递参数,获取结果 Student stu=(Student)query.setParameter("id",4).list().get(0); System.out.println("学生编号:"+stu.getId()+",学生年龄:"+stu.getAge()+",学生姓名:"+stu.getName()+""); //04.关闭sessiong HibernateUtils.closeSession(); } /** * 本地SQL命名查询 */ @Test public void SqlNameQuery(){//01.通过HibernateUtils工具类的currentSession方法获取和当前线程绑定的session Session session = HibernateUtils.currentSession(); //02.通过命名查询的方式创建query对象 Query query = session.getNamedQuery("byIdFindStu2"); //03.传递参数,获取结果 Student stu=(Student)query.setParameter(0,4).list().get(0); System.out.println("学生编号:"+stu.getId()+",学生年龄:"+stu.getAge()+",学生姓名:"+stu.getName()+""); //04.关闭sessiong HibernateUtils.closeSession(); } }
6.测试结果
DB端
客户端
Hibernate 命名查询的更多相关文章
- 使用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命名查询
hibernate命名的查询是通过一些有意义的名称来使用查询的方式.就类似于使用别名一样. Hibernate框架提供命名查询的概念,以便应用程序员不需要将查询分散到所有的java代码,进一步提高代码 ...
- hibernate学习系列-----(5)hibernate基本查询下篇:hibernate聚合函数、分组查询及命名查询
在上一篇中,大致学习了hibernate的基本查询:HQL基本查询,今天,继续昨天的步伐,继续学习hibernate的基本查询..... 1.hql聚合函数,先大致列一下hql的聚合函数有哪些吧: 在 ...
- [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Hibernate异常之命名查询节点未找到
异常信息: java.lang.IllegalArgumentException: No query defined for that name [salaryEmps] at org.hiberna ...
- Hibernate(十三)命名查询-批量处理和调用存储过程
一.命名查询 HQL语句混杂在代码之间将破坏代码的可读性 Hibernate允许在映射配置文件中定义字符串形式的查询语句,这种查询方式称为命名查询 二.建立数据表和持久化类 建立数据表 create ...
- Hibernate-ORM:14.Hibernate中的命名查询
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述命名查询,所谓命名查询是什么呢? Hibernate中允许我们在xml,实体类,甚至注解的方式来编 ...
随机推荐
- Markdown 图片助手-MarkdownPicPicker
title: Markdown 图片助手 v0.1 toc: true comments: true date: 2016-06-04 16:40:06 tags: [Python, Markdown ...
- JavaScript Array对象
介绍Js的Array 数组对象. 目录 1. 介绍:介绍 Array 数组对象的说明.定义方式以及属性. 2. 实例方法:介绍 Array 对象的实例方法:concat.every.filter.fo ...
- HTML骨架结构
前面的话 一个完整的HTML文档必须包含3个部分:文档声明.文档头部和文档主体.而正是它们构成了HTML的骨架结构.前面已经分别介绍过文档声明和文档头部,本文将详细介绍构成HTML骨架结构的基础元 ...
- 学习ASP.NET Core,怎能不了解请求处理管道[1]: 中间件究竟是个什么东西?
ASP.NET Core管道虽然在结构组成上显得非常简单,但是在具体实现上却涉及到太多的对象,所以我们在 "通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流 ...
- 做一个gulp+webpack+vue的单页应用开发架子
1.目标 最近项目上的事情不多,根据我自己的开发习惯,决定开发一些简单的开发架子,方便以后事情多的时候直接套用.本文讲的一个gulp+webpack+vue的单页应用架子,想要达到的目的: 可以通过命 ...
- mongodb
修改所有的记录: > db.t_express_apply.update({},{$set:{"isStatus" : 0}},{multi:true})WriteResul ...
- linux yum命令详解
yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...
- linux-centos在VM中的网络配置
1.自动获取IP地址 虚拟机使用桥接模式,相当于连接到物理机的网络里,物理机网络有DHCP服务器自动分配IP地址. #dhclient 自动获取ip地址命令 #ifconfig 查询系统里网卡信息,i ...
- 微软.Net 社区虚拟大会 -- 首日重点(dotnetConf 2016)
6月7日--9日,为期三天的微软.NET社区虚拟大会正式在 Channel9 上召开. 在 Scott Hunter, Miguel de Icaza (Xamarin CTO) , ScottHan ...
- ASP.NET Web API Model-ModelMetadata
ASP.NET Web API Model-ModelMetadata 前言 前面的几个篇幅主要围绕控制器的执行过程,奈何执行过程中包含的知识点太庞大了,只能一部分一部分的去讲解,在上两篇中我们看到在 ...