hql查询语句用法详解_sql add语句

hql查询语句用法详解_sql add语句HQL的语法比较简单,与普通SQL的区别之处是针对对象的不同,在查询语句中将sql中的表名替换成了sql中的持久化类名,因为hibernate机制是基于对象进行查询的。 不带参数的查询,语句是“fromPOJO”的形式,其中POJO即为持久化类名称Queryquery=session.createQuery("fromUser");带参数的查询接口Query提供了…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

HQL的语法比较简单,与普通SQL的区别之处是针对对象的不同,在查询语句中将sql中的表名替换成了sql中的持久化类名,因为hibernate机制是基于对象进行查询的。

 

不带参数的查询,语句是“from POJO”的形式,其中POJO即为持久化类名称

Query query=session.createQuery("from User");

带参数的查询

接口Query提供了对命名参数、JDBC风格的(?)两种参数的绑定方法。

命名参数在查询字符串中是形如name的标识符。

命名参数的优点:

1、命名参数与其在查询串中出现的顺序无关。

2、它们可在同一查询串中多次出现。

3、它们本身是自我说明的。

命名参数的使用格式是 :username /* username这里泛指命名参数名 */

赋值采用: Query的setXXX()f方法。

/* 这是使用一个命名参数username,然后给命名参数设置值为“admin”的例子*/
Query query=session.createQuery("from User where username=:username"); query.setString("username","admin");

/* 使用集合类型的命名参数的例子 */
List names=new ArrayList(); names.add("admin"); names.add("test"); Query query=session.createQuery("from User where username in (:nameList)"); query.setParameterList("nameList",names);

hibernate使用问号参数时与JDBC不同,hibernate对参数从0开始计数。JDBC应该是从0开始的

Query query=session.createQuery("from User where username=?");
query.setString(0,"admin");

在HQL语句中可以设置多个问号参数,之后按照”0、1、2、3…”的序号形式来设置各个参数的值。

 

取读query中的值:

1、将query中的值转换成list然后进行后面的操作

query.list()方法。

demo:

hql查询语句用法详解_sql add语句
hql查询语句用法详解_sql add语句

public List<Person> hqlquerylist(String hql){
        Session session=HibernateSessionFactory.getSession();
        Transaction tx=session.beginTransaction();
        List<Person> p = null;
        try{
        Query query=session.createQuery(hql);
        p=query.list();
        tx.commit();
        }catch(Exception e){
            e.printStackTrace();
            tx.rollback();
        }
        return p;
    }

View Code

2、将query中的值转换成iterator对象然后进行后面的操作

1)query.iterator()方法

hql查询语句用法详解_sql add语句
hql查询语句用法详解_sql add语句

public Iterator<Person> hqlqueryiterator(String hql){
        Session session=HibernateSessionFactory.getSession();
        Transaction tx=session.beginTransaction();
        Iterator<Person> p = null;
        try{
        Query query=session.createQuery(hql);
        p=query.iterate();
        tx.commit();
        }catch(Exception e){
            e.printStackTrace();
            tx.rollback();
        }finally{
            session.clear();
        }
        return p;
    }

View Code

2)、将query.list()得到的对象转换称为iterator对象

hql查询语句用法详解_sql add语句
hql查询语句用法详解_sql add语句

public Iterator<Person> hqlqueryiterator(String hql){
        session=HibernateSessionFactory.getSession();
        Transaction tx=session.beginTransaction();
        Iterator<Person> p = null;
        try{
        Query query=session.createQuery(hql);
        //p=query.iterate();
        p=query.list().iterator();
        tx.commit();
        }catch(Exception e){
            e.printStackTrace();
            tx.rollback();
        }/*finally{
            session.close();
        }*/
        return p;
    }

View Code

3、当已知query中的对象为0个或者1个的时候,可以使用uniqueResult()取得一个对象。

返回:单个实例或者null
抛出:当返回的实例大于一个的时候的抛出NonUniqueResultException

hql查询语句用法详解_sql add语句
hql查询语句用法详解_sql add语句

public Person queryUniqueResult(int id){
        Session session=HibernateSessionFactory.getSession();
        Transaction tx=session.beginTransaction();
        Person p = null;
        try{
        Query query=session.createQuery("from Person where id=:id");
        query.setInteger("id", id);
        p=(Person) query.uniqueResult();
        tx.commit();
        }catch(Exception e){
            e.printStackTrace();
            tx.rollback();
        }/*finally{
            session.close();
        }*/
        return p;
    }

View Code

4、标量查询

查询可以在select语句中指定类的属性,甚至可以调用SQL统计函数。统计结果或者属性被称为“标量Scalar”的结果。

demo:

hql查询语句用法详解_sql add语句
hql查询语句用法详解_sql add语句

public static void main(String[] args){
        PersonDAO persondao=new PersonDAO();
        String hql="select P.name,count(P.address) from Person P";
        Iterator<Object[]> it=persondao.hqlqueryScalar(hql);
        while(it.hasNext()){
            Object[] o=it.next();
            System.out.println(o[0]+"\t"+o[1]);
        }
    }
public Iterator<Object[]> hqlqueryScalar(String hql){
        session=HibernateSessionFactory.getSession();
        Transaction tx=session.beginTransaction();
        Iterator<Object[]> p = null;
        try{
        Query query=session.createQuery(hql);
        //p=query.iterate();
        p=query.list().iterator();
        tx.commit();
        }catch(Exception e){
            e.printStackTrace();
            tx.rollback();
        }/*finally{
            session.close();
        }*/
        return p;
    }

View Code

5、分页查询

我们知道,sqlserver的查询使用的是top,mysql使用的是limit,oracle使用的是rownumber。

其实hibernate有快捷的分页查询方式,框架可以自动生成对应的分页查询语句。

使用query对象的setFirstResult()和对象的setMaxResult()设置查询的起始指针和查询的最大数量,再使用query的其他取出对象方法得到想要的值。hibernate自动生成sql查询语句。

注意:指针是从0开始的。也就是指针为0的对应数据库中的第一条记录。

demo:

hql查询语句用法详解_sql add语句
hql查询语句用法详解_sql add语句

public Iterator<Student> queryhql(String hql,int first,int max){
        session=HibernateSessionFactory.getSession();
        
        Query query=session.createQuery(hql);
        query.setFirstResult(first);
        query.setMaxResults(max);
        Iterator<Student> s=query.list().iterator();
        return s;
    }
StudentDAO studentdao=new StudentDAO();
        String hql="from Student";
        int first=1;
        int max=2;
        Iterator<Student> s=studentdao.queryhql(hql, first, max);
        while(s.hasNext()){
            Student stu=s.next();
            System.out.println(stu.getName()+"\t"+stu.getAge()+"\t"+stu.getSex()+"\t"+stu.getTelephone());
        }

View Code

 

SQL语句查询

使用createSQLQuery()方法,然后在后面加上addEntity()

demo:

hql查询语句用法详解_sql add语句
hql查询语句用法详解_sql add语句

public static void main(String[] args){
        String sql="select * from student where age=:age and name=:name";
        Session session=HibernateSessionFactory.getSession();    
            SQLQuery sqlquery=session.createSQLQuery(sql).addEntity(Student.class);
            sqlquery.setString("name", "guozhen");
            sqlquery.setInteger("age", 21);
            List<Student> s=sqlquery.list();
            Student stu=s.get(0);
            System.out.println(stu.getName()+"\t"+stu.getAge()+"\t"+stu.getId()+"\t"+stu.getTelephone()+"\t"+stu.getTelephone());
        
    }

View Code

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187662.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 怎么创建css样式表,怎样创建可反复使用的外部CSS样式表?[通俗易懂]

    怎么创建css样式表,怎样创建可反复使用的外部CSS样式表?[通俗易懂]创建可反复使用的外部CSS样式表用DreamWeaver在某网页中创建了一种CSS样式后,如果你要在另外的网页中应用该样式,你不必从新创建该CSS样式,只要你创建了外部CSS样式表文件(externalCSSstylesheet),你便可以在今后任意调用该样式表文件中的样式。为了便于管理,先在站点所在文件夹中,新建一个文件夹,取名为CSS,专门用于放置外部样式表文件(其扩展名为css)。1、在Do…

    2022年7月14日
    15
  • java sql拼接字符串_SQL中字符串拼接

    java sql拼接字符串_SQL中字符串拼接1.概述在SQL语句中经常需要进行字符串拼接,以sqlserver,oracle,mysql三种数据库为例,因为这三种数据库具有代表性。sqlserver:select’123’+’456′;oracle:select’123’||’456’fromdual;或selectconcat(‘123′,’456’)fromdual;mysql:selectconcat(‘123’,’…

    2022年6月16日
    104
  • 微信公众平台开发接口_小程序注册好了为什么搜索不到

    微信公众平台开发接口_小程序注册好了为什么搜索不到在进行微信公众平台开发之前,需要先接入微信公众平台。具体的步骤在公众平台开发者文档-接入指南已有详细介绍,文档中也提供了验证服务器的PHP示例代码。本文主要提供了Node.js版本的验证代码,同时把步骤细化,让开发者更方便地了解整个接入过程,对初学者更友好。TL;DR在微信公众平台后台的开发者中心/填写服务器配置页面…

    2022年8月21日
    6
  • vuejs生命周期函数(什么是vue的生命周期)

    用Vue框架,熟悉它的生命周期可以让开发更好的进行。首先先看看官网的图,详细的给出了vue的生命周期:它可以总共分为8个阶段:beforeCreate(创建前),created(创建后),beforeMount(载入前),mounted(载入后),beforeUpdate(更新前),updated(更新后),beforeDestroy(销毁前),de

    2022年4月15日
    48
  • java jar 没有主清单属性_Spring Boot jar中没有主清单属性的解决方法「建议收藏」

    java jar 没有主清单属性_Spring Boot jar中没有主清单属性的解决方法「建议收藏」使用SpringBoot微服务搭建框架,在eclipse和Idea下能正常运行,但是在打成jar包部署或者直接使用java-jar命令的时候,提示了xxxxxx.jar中没有主清单属性:D:\hu-git\spring-xxx-xxx\target>java-jarspring-cloud-eureka-0.0.1-SNAPSHOT.jarspring-xxx-xxx-0.0.1-S…

    2025年9月13日
    7
  • 如何激活成功教程Mac软件的付费限制(一)

    如何激活成功教程Mac软件的付费限制(一)一、前言在使用Mac的过程中,经常会碰到一些软件,属于付费使用产品。那么处于好奇或者自学的目的,能不能绕过这个限制呢。今天简单的分享下我激活成功教程的几款软件当中的一款,具体是什么软件就不说了,主要是提供下激活成功教程的思路。由于不能供发图,所以这里简单介绍下这款软件。这款软件是AppStore上的一款磁盘清理软件,扫描是免费的。扫描到数据之后,点击清理按钮时候会检查是否注册。如果注册了,直接进入清理程序,否…

    2022年6月15日
    121

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号