Hibernate=====HQL实用技术

Hibernate支持三种查询语言:HQL查询、Criteria查询和原生SQL查询

HQL(hibernate Query Language,hibernate查询语言)是一种面向对象查询语言,其中没有表和字段的概念,只有类、对象和属性的概念

语法:

  form子句:form +全类名  /   form  +  类名(查询所有)

  select子句:select  dept.deptname from Dept

  where子句:from dept where deptName=‘sales‘;

HQL执行语句

   例子:form子句、select子句、where子句以及参数查询

    建立实体类

  

public class Dept {
    private Integer deptno;
    private String dname;

    public Dept() {
    }

    public Dept(Integer deptno, String dname) {
        this.deptno = deptno;
        this.dname = dname;
    }

    public Integer getDeptno() {
        return deptno;
    }

    public void setDeptno(Integer deptno) {
        this.deptno = deptno;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }
}

测试方法

package cn;

import cn.happy.entity.Dog;
import cn.hib.entity.Dept;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Before;
import org.junit.Test;

import java.util.List;

/**
 * Created by a on 2017/8/20.
 */
public class Test924 {
    Configuration cfg;
    SessionFactory factory;
    Session session;
    Transaction tx;

    @Before
    public void beforeTest(){
        //创建配置对象
        cfg=new Configuration().configure();
        //根据配置对象创建SessonFactory
        factory=cfg.buildSessionFactory();
        //根据SessionFactory创建Session
        session=factory.getCurrentSession();
        //session=factory.openSession();
        //开启事务
        tx=session.beginTransaction();
    }

    @Test
    public void testlist(){
        String hql="from Dept";
        Query query=session.createQuery(hql);
        List<Dept> list=query.list();
        for (Dept dept : list){
            System.out.println(dept.getDname());
        }
    }
    @Test
    public void selectSomeColumnFromTable(){
        String hql="select dept.deptno,dept.dname from Dept";
        Query query=session.createQuery(hql);
        List<Object[]>list=query.list();
        for(Object[] obj : list){
            for (Object child : obj){
                System.out.println(child);
            }
        }
    }
    @Test
    public void selectSomesColumnFromTable(){
        String hql="select new Dept(dept.deptno,dept.dname) from Dept dept";
        Query query=session.createQuery(hql);
        List<Dept> list=query.list();
        for (Dept dept : list){
            System.out.println(dept.getDname());
        }
    }
    @Test
    public void selectSomeRecordsFromTable(){
        String hql="from dept.deptno,dept.dname from Dept dept where dept.dname=‘RESEARCH‘";
        Query query=session.createQuery(hql);
        List<Dept> list=query.list();
        for (Dept dept : list){
            System.out.println(dept.getDname());
        }
    }

    //案例:参数查询: 方案一:匿名占位符“?”
    @Test
    public void selectByConditionNiming(){
        String hql="from Dept dept where dname=?";
        Query query=session.createQuery(hql);
        query.setParameter(0,"RESEARCH");
        List<Dept> list=query.list();
        for(Dept dept : list){
            System.out.println(dept.getDname());
        }
    }

    //案例:参数查询:方案二:
    @Test
    public void selectByConditionParametername(){
        String hql="from Dept dept where dname=:dname";
        Query query=session.createQuery(hql);
        query.setParameter("dname","RESEARCH");
        List<Dept> list=query.list();
        for(Dept dept : list){
            System.out.println(dept.getDname());
        }
    }
    //案例:参数查询:方案三:name 参数名称绑定++++对象属性
    @Test
    public void selectByConditionParameternameAndObjectAttribute(){
        String hql="from Dept dept where dname=:dname";
        Dept dd=new Dept();
        dd.setDname("RESEARCH");
        Query query=session.createQuery(hql);
        query.setProperties(dd);
        List<Dept> list=query.list();
        for(Dept dept : list){
            System.out.println(dept.getDname());
        }
    }

}
时间: 2025-01-07 20:15:51

Hibernate=====HQL实用技术的相关文章

第五章 HQL实用技术

第五章   HQL实用技术5.1  使用HQL查询语句(面向对象查询语句)    5.1.1 编写HQL语句        5.1.1.1 from子句                    例:from com.entity.Dept;                    from Dept dept;--为持久化类Dept指定了别名dept:可省略包名        5.1.1.2    select子句                    例:select dept from Dept

Exception in thread &quot;main&quot; org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [from User

Exception in thread "main" org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [from User user where user.name=?0 and user.pass=?1] at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180

Hibernate HQL查询:

Hibernate HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装.完整的HQL语句形势如下:Select/update/delete…… from …… where …

weblogic10异常:org.hibernate.hql.ast.HqlToken

转自:http://www.programgo.com/article/68682994452/ 在做查询的时候,报出  org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken这  个错误(是通过数据源连接的) 解决方法如下: 如果你是通过eclipse启动weblogic的,那么依次点击windows-preferences-myeclipse workbench-servers-

SSH整合报错:org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped[......]

非常诡异的报错,信息如下:org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped [select count(*) from User u where u.userName=? and u.userPassword=? ]Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped类似的报错信息的解决方法,

Rhythmk 学习 Hibernate 09 - Hibernate HQL

1.初始数据 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 @Test     public void test01() {         Session session = null;         try {             session = HibernateUtil.getSessionFactory().openSession();             session.begin

hibernate hql 大全

hibernate hql 大全 http://blog.chinaunix.net/article.php?articleId=47942&blogId=1655 HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承.多态 和关联之类的概念. 第 15 章 HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询

Java学习笔记-Hibernate HQL查询

Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库的存取都与Session有关Session由SessionFactory创建,是线程安全的Thread-Safe,可以让多个线程同时存取SessionFactory而不会有数据共享的问题 Hibernate中Session的解释 :http://blog.csdn.net/shrek_xu/arti

Spring Data之@Query中的org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML

1. 环境准备 Spring , Spring Data, JPA, HIbernate, JDK 1.7 2.  问题提出 在使用Spring Data 来更新数据之时,爆出了如下错误信息: @Query("UPDATE User u SET u.state = ?1 WHERE u.server.id = ?2") public void updateAllUsers(long state, long serverid); 错误信息如下: org.springframework.d