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,实体类,甚至注解的方式来编 ...
随机推荐
- pt-ioprofile
pt-ioprofile是用来观察特定进程的IO信息的. 该脚本是用shell写的,有两方面的作用: pt-ioprofile does two things: ) ) is not performe ...
- GPG终极指南(加密/签名)
我们平时都听过非对称加密,公钥和私钥,签名验证,但这些证书都是怎么得到的呢?本篇文章会解答这些问题. 背景介绍 加密的一个简单但又实用的任务就是发送加密电子邮件.多年来,为电子邮件进行加密的标准一直是 ...
- 使用蓝灯后,IE浏览器以及内置IE浏览器的程序不能使用的解决方案
使用完蓝灯后,每次使用IE浏览器都不能正常使用,于是有了下面的这个方案 1.通过Win+R 打开注册表编辑器(regedit) 进入目录 HKEY_CURRENT_USER \ Software \ ...
- 代码的坏味道(22)——不完美的库类(Incomplete Library Class)
坏味道--不完美的库类(Incomplete Library Class) 特征 当一个类库已经不能满足实际需要时,你就不得不改变这个库(如果这个库是只读的,那就没辙了). 问题原因 许多编程技术都建 ...
- 游走 bzoj 3143
游走(2s 128MB)walk [问题描述] [输入格式] [输出格式] [样例输入] 3 3 2 3 1 2 1 3 [样例输出] 3.333 [样例说明] 题解: 主要算法:贪心:高斯消元: 题 ...
- javascript arguments(转)
什么是arguments arguments 是是JavaScript里的一个内置对象,它很古怪,也经常被人所忽视,但实际上是很重要的.所有主要的js函数库都利用了arguments对象.所以agru ...
- git远程库GitHub
首先,注册一个GitHub(github.com)帐号,免费获得Git远程仓库 由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置: 第1步:创建SSH Key.在用 ...
- Linux基础介绍【第四篇】
Linux文件和目录的属性及权限 命令: [root@oldboy ~]# ls -lhi total 40K 24973 -rw-------. 1 root root 1.1K Dec 10 16 ...
- .Net 初步学习笔记之一——.Net 平台与.Net FrameWork框架的关系
.Net 包含两部分 .Net平台 和.Net FrameWork 框架 1..Net FrameWork框架包含于.Net平台. .Net FrameWork提供环境和支撑保证.Net平台运行. 2 ...
- CacheManager:–个通用缓存接口抽象类库
CacheManager是–个缓存通用接口抽象类库,它支持各种高速缓存提供者,例如Memcache,Redis,并且有许多先进的功能特性.具体可以访问官方网站 http://cachemanager ...