博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate 学习之Query查询(HQL查询)
阅读量:6518 次
发布时间:2019-06-24

本文共 5156 字,大约阅读时间需要 17 分钟。

package com.itcloud.test;import com.itcloud.pojo.Dept;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.query.Query;import org.junit.After;import org.junit.Test;import java.util.List;public class TestHibernate {    public static SessionFactory sessionFactory =null ;    public static Session session = null ;    public static Transaction transaction ;    static {        Configuration configuration = new Configuration().configure() ;        sessionFactory = configuration.buildSessionFactory() ;        session = sessionFactory.openSession() ;        transaction = session.beginTransaction() ;    }    @Test    public void post(){        String hql = "from Dept as d" ; //as请别名        //通过session创建quer查询        Query
query = session.createQuery(hql,Dept.class) ;     //上面的语句也可以这样写:Query query = session.createQuery(hql) ;
     List
allDept = query.list(); System.out.print(allDept); } @After public void destroy(){ transaction.commit(); session.close(); sessionFactory.close(); } }

*******************进行模糊查询

@Test    public void post(){        String hql = "from Dept as d where d.loc like ?" ; //as请别名        //通过session创建quer查询        Query
query = session.createQuery(hql,Dept.class) ; //设置参数 query.setParameter(0,"%"+3+"%") ; //hibernate的参数是从零开始的 List
allDept = query.list(); System.out.print(allDept); }

*************进行分页查询:

@Test    public void post(){        String column="loc" ; //表示模糊查询列 ;        String keyword="" ;//空字符串表示查询全部        int currentPage = 1 ;//当前页码,第一页        int lineSize =2 ;//每页显示两条数据 ;        String hql = "From Dept as d where d."+column+" like ?" ; //注意点,Dept必须对应着实体类        //通过session创建quer查询        Query
query = session.createQuery(hql,Dept.class) ; //设置参数 query.setParameter(0,"%"+keyword+"%") ; //hibernate的参数是从零开始的 /** 在查询之前进行分页操作 查询行数还是从0开始 * 第1页从0行开始,第二页从(2-1)*2=2行开始,... * 动态的根据页码的变化,跟新查询的数据 */ query.setFirstResult((currentPage-1)*lineSize) ;//设置开始行 query.setMaxResults(lineSize) ; //每页查询lineSize行数据 //上面的语句就表示,从第一行开始查询,每次查询2行 List
allDept = query.list(); System.out.print(allDept); }

查询结果

Hibernate:     select        dept0_.deptno as deptno1_0_,        dept0_.dname as dname2_0_,        dept0_.loc as loc3_0_     from        Dept dept0_     where        dept0_.loc like ? limit ?

********统计查询:

@Test    public void post(){        String hql = "select count(deptno) From Dept as d" ; //注意点,Dept必须对应着实体类        Query query = session.createQuery(hql) ;        System.out.println(query.uniqueResult());    }

注意点:

query.uniqueResult()返回是的数据类型是Long,可以通过以下的方法转换成整型
Long
 num = (Long)query.uniqueResult() ;
System.out.println(num.intValue());
 
******在*.hbm.xml文件中配置Query查询

取得查询语句:

      Query query = session.getNamedQuery("findById") ;           query.setParameter(0,4);//设置参数可以不考虑数据类型           News vo =(News)query.uniqueResult() ; //查询出单个数据           System.out.println(vo);           HibernateSessionFactory.closeSession();

*********query进行数据的更新操作

@Test    public void post(){        String hql = "update Dept set dname=? where deptno=?" ;        Query query = session.createQuery(hql) ;        //设置参数        query.setParameter(0,"更新部门操作") ;        query.setParameter(1,1) ;        int x = query.executeUpdate() ; //执行更新语句返回的是影响的行数 ;        System.out.print(x);    }

*********删除数据操作

   String hql = "delete from News where nid=?" ;           Query query = session.createQuery(hql);           query.setParameter(0, 6);           int len = query.executeUpdate() ;//进行数据的更新返回的是影响的行数          HibernateSessionFactory.getSession().beginTransaction().commit();//更新操作必须要进行数据的提交         System.out.println(len);

*********使用iterator取得查询结果

@Test    public void post(){        String hql = "from Dept as d" ; //as请别名        //通过session创建quer查询        Query
query = session.createQuery(hql,Dept.class) ; //上面的语句也可以这样写:Query query = session.createQuery(hql) ; Iterator
iter = query.iterate(); while(iter.hasNext()){ System.out.println(iter.next()); } }

结果:

Hibernate:     select        dept0_.deptno as col_0_0_     from        Dept dept0_Hibernate:     select        dept0_.deptno as deptno1_0_0_,        dept0_.dname as dname2_0_0_,        dept0_.loc as loc3_0_0_     from        Dept dept0_     where        dept0_.deptno=?Dept{deptno=1, dname='更新部门操作', loc='403'}Hibernate:     select        dept0_.deptno as deptno1_0_0_,        dept0_.dname as dname2_0_0_,        dept0_.loc as loc3_0_0_     from        Dept dept0_     where        dept0_.deptno=?Dept{deptno=2, dname='运营部门', loc='411'}Hibernate:     select        dept0_.deptno as deptno1_0_0_,        dept0_.dname as dname2_0_0_,        dept0_.loc as loc3_0_0_     from        Dept dept0_     where        dept0_.deptno=?Dept{deptno=3, dname='设计部门', loc='401'}

  这种方式我是不会用的

 

转载于:https://www.cnblogs.com/hu1056043921/p/7932629.html

你可能感兴趣的文章
htop进程管理工具
查看>>
etcd官方推荐的硬件配置
查看>>
Linux的inode的理解
查看>>
基于.NET平台常用的框架整理
查看>>
Ansible 入门:安装 简例 playbook应用
查看>>
MySQL -- binlog 操作与恢复
查看>>
ELK - 实用日志分析系统
查看>>
Flask mysql
查看>>
NEC描绘智慧城市蓝图
查看>>
vmware 12 安装centos7网络配置
查看>>
Word2010使用技巧之四:页眉的另类使用
查看>>
Xcode调试项目时取消弹出框提示授权
查看>>
zabbix使用Omsa来监控Dell服务器的硬件信息
查看>>
the process cannot access the file because it is being used by another process
查看>>
无线网络的基础及优化方案
查看>>
互联网协议精简讲解
查看>>
MongoDB 安装记录
查看>>
我的友情链接
查看>>
jsoup的介绍使用(转)
查看>>
javaWeb RSA加密使用
查看>>