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,实体类,甚至注解的方式来编 ...
随机推荐
- ExtJS 4.2 评分组件
上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...
- SQL Server镜像自动生成脚本
SQL Server镜像自动生成脚本 镜像的搭建非常繁琐,花了一点时间写了这个脚本,方便大家搭建镜像 执行完这个镜像脚本之后,最好在每台机器都绑定一下hosts文件,不然的话,镜像可能会不work 1 ...
- CRL快速开发框架系列教程十(导出对象结构)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 在知乎上看到 Web Socket这篇文章讲得确实挺好,从头看到尾都非常形象生动,一口气看完,没有半点模糊,非常不错
在知乎上看到这篇文章讲得确实挺好,从头看到尾都非常形象生动,一口气看完,没有半点模糊,非常不错,所以推荐给大家,非常值得一读. 作者:Ovear链接:https://www.zhihu.com/que ...
- 编写高质量代码:改善Java程序的151个建议(第6章:枚举和注解___建议88~92)
建议88:用枚举实现工厂方法模式更简洁 工厂方法模式(Factory Method Pattern)是" 创建对象的接口,让子类决定实例化哪一个类,并使一个类的实例化延迟到其它子类" ...
- VS2015在创建项目时的一些注意事项
一.下面是在创建一个新的项目是我最常用的,现在对他们一一做一个详细的介绍: 1.Win32控制台应用程序我平时编写小的C/C++程序都用它,它应该是用的最多的. 2.名称和解决方案名称的区别:名称是项 ...
- 【原】无脑操作:express + MySQL 实现CRUD
基于node.js的web开发框架express简单方便,很多项目中都在使用.这里结合MySQL数据库,实现最简单的CRUD操作. 开发环境: IDE:WebStorm DB:MySQL ------ ...
- Android中常见的图片加载框架
图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行 ...
- Centos6.5 配置Nginx开机自启动
1.在/etc/init.d/目录下创建 nginx 文件,内容如下: #!/bin/sh # # nginx - this script starts and stops the nginx dae ...
- tg2015 信息传递 (洛谷p2661)
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...