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);

    }    

}
时间: 2024-07-31 13:29:40

hibernate10--命名查询的相关文章

12.hibernate命名查询

1.创建如下javaweb项目结构 2.在项目的src下创建hibernate.cfg.xml主配置文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourc

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

一.命名查询 HQL语句混杂在代码之间将破坏代码的可读性 Hibernate允许在映射配置文件中定义字符串形式的查询语句,这种查询方式称为命名查询 二.建立数据表和持久化类 建立数据表 create table login ( username varchar2(32) primary key, password varchar2(32) not null , age number(3) ); insert into login select '张三','123456',21 from dual

【HQL】分页查询 、对象导航查询、外置命名查询、连接查询、查询过滤器、统计查询

分页查询 List students = session.createQuery("from Student") .setFirstResult(1) .setMaxResults(2) .list(); for (Iterator iter=students.iterator(); iter.hasNext();) { Student student = (Student)iter.next(); System.out.println(student.getName()); } 对象

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

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

Hibernate命名查询

什么是命名查询? Hibernate允许在映射文件中定义字符串形式的查询语句,这种查询方式成为命名查询 使用命名查询有什么好处? 由于使用Hibernate的HQL常常需要在Java代码中写字符串查询语句,HQL混杂在代码之间,破坏代码可读性,通过使用命名查询,可以使业务逻辑和查询语句分离,使您专注于查询,而避免了 SQL 或者 HQL 代码分散于整个应用程序中的情况. 可以应用命名查询做复杂查询的处理 命名查询如何实现? 介绍下面几种方式: 方法一:在配置文件中<class/>标记的下面,声

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

异常信息: 1 java.lang.IllegalArgumentException: No query defined for that name [salaryEmps] 2 at org.hibernate.internal.AbstractSharedSessionContract.getNamedQuery(AbstractSharedSessionContract.java:578) 3 at org.hibernate.internal.AbstractSharedSessionC

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

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述命名查询,所谓命名查询是什么呢? Hibernate中允许我们在xml,实体类,甚至注解的方式来编写查询语句,本篇博客将讲述xml中的方式 一,准备好准备工作,我由于上篇博客把大量的准备都做好,所以,本篇从简 二,预览hbm.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hi

【Hibernate步步为营】--hql连接查询及外置命名查询

http://www.zhuke.com/user/zkuser55857163/overview?SEOwhy=www.baidu.comhttp://www.zhuke.com/user/zkuser35087475/overview?SEOwhy=www.baidu.comhttp://www.zhuke.com/user/zkuser23388715/overview?SEOwhy=www.baidu.comhttp://www.zhuke.com/user/zkuser86852476

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

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

Hibernate ORM框架——Hibernate查询

MySQL数据库-------------------------------------------------- use demo; select * from CLASSINFO; select * from persons; delete from CLASSINFO; delete from persons; insert into CLASSINFO values('c111','banji1'); insert into CLASSINFO values('c222','banji