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 命名查询的更多相关文章

  1. 使用Hibernate命名查询

    HQL查询支持将查询所用的HQL语句放入配置文件中,而不是代码中,在Hibernate映射文件的<hibernate-mapping>元素中使用<query>子元素来定义命名查 ...

  2. Hibernate 命名查询NamedQuery (转)

    转自:http://blog.163.com/ksm19870304@126/blog/static/374552332011993942391/ 配置方式: static List namedQue ...

  3. 12.hibernate命名查询

    1.创建如下javaweb项目结构 2.在项目的src下创建hibernate.cfg.xml主配置文件 <?xml version="1.0" encoding=" ...

  4. Hibernate命名查询

    hibernate命名的查询是通过一些有意义的名称来使用查询的方式.就类似于使用别名一样. Hibernate框架提供命名查询的概念,以便应用程序员不需要将查询分散到所有的java代码,进一步提高代码 ...

  5. hibernate学习系列-----(5)hibernate基本查询下篇:hibernate聚合函数、分组查询及命名查询

    在上一篇中,大致学习了hibernate的基本查询:HQL基本查询,今天,继续昨天的步伐,继续学习hibernate的基本查询..... 1.hql聚合函数,先大致列一下hql的聚合函数有哪些吧: 在 ...

  6. [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. Hibernate异常之命名查询节点未找到

    异常信息: java.lang.IllegalArgumentException: No query defined for that name [salaryEmps] at org.hiberna ...

  8. Hibernate(十三)命名查询-批量处理和调用存储过程

    一.命名查询 HQL语句混杂在代码之间将破坏代码的可读性 Hibernate允许在映射配置文件中定义字符串形式的查询语句,这种查询方式称为命名查询 二.建立数据表和持久化类 建立数据表 create ...

  9. Hibernate-ORM:14.Hibernate中的命名查询

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述命名查询,所谓命名查询是什么呢? Hibernate中允许我们在xml,实体类,甚至注解的方式来编 ...

随机推荐

  1. B树——算法导论(25)

    B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...

  2. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  3. Jquery的事件操作和文档操作

    对于熟悉前端开发的小伙伴,相信对于Jquery一定不陌生,相对于JavaScript的繁琐,Jquery更加的简洁,当然简洁不意味着简单,我们可以使用Jquery完成我们想要实现全部功能,这里为小白们 ...

  4. nodejs模块发布及命令行程序开发

    前置技能 npm工具为nodejs提供了一个模块和管理程序模块依赖的机制,当我们希望把模块贡献出去给他人使用时,可以把我们的程序发布到npm提供的公共仓库中,为了方便模块的管理,npm规定要使用一个叫 ...

  5. C++随笔:.NET CoreCLR之GC探索(1)

    一直是.NET程序员,但是.NET的核心其实还是C++,所以我准备花 一点时间来研究CoreCLR和CoreFX.希望这个系列的文章能给大家带来 帮助. GC的代码有很多很多,而且结构层次对于一个初学 ...

  6. Django

    一.Django 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是 CMS(内容管理系统) ...

  7. TFS 测试用例步骤数据统计

    TFS系统集成了一套BI系统,基于SQL Server的Analysis Service进行实现的.通过这几年的深入使用,能够感触到这个数据数据仓库模型是多么的优秀,和微软官方提供的数据仓库示例Adv ...

  8. Android SDK 在线更新镜像服务器资源

    本文转自:http://blog.kuoruan.com/24.html.感谢原作者. 什么是Android SDK SDK:(software development kit)软件开发工具包.被软件 ...

  9. Android中AlarmManager使用示例(持续更新,已经更改)

    现在普遍的手机都会有一个闹钟的功能,如果使用Android来实现一个闹钟可以使用AtarmManager来实现.AtarmManager提供了一种系统级的提示服务,允许你安排在将来的某个时间执行一个服 ...

  10. Josephus环类问题,java实现

    写出一个双向的循环链表,弄一个计数器,我定义的是到三的时候,自动删除当前节点,很简单. package Com; import java.util.Scanner; /* * 约瑟夫环问题,有n个人组 ...