hibernate笔记3--hql查询

1.Query:他是一种比较面向对象的查询方式,query查询也叫做hql查询(hibernate query language),使用query查询,需要接受一个
         hql语句进行查询
         查询全部,分页查询,统计查询,条件查询,排序查询,投影查询
         sql:查询的是数据表和表中的字段
         hql:查询的是实体类和类中的属性
         * sql 和 hql 的语法极其类似
代码演示:
1.建库;
2.导入jar包(required/log4j/mysqlconnector)
2.建实体类(注意持久化类的编写规则);
3.编制映射关系文件(Linkman.hbm.xml);
4.编制核心配置文件(hibernate.cfg.xml);
5.编写工具类(HibernateUtils.java),增加getCurrentSession方法;
6.编写测试代码;
----------------------------------------------
5.编写工具类(HibernateUtils.java),增加getCurrentSession方法;

  1 package utils;
  2 
  3 import org.hibernate.Session;
  4  import org.hibernate.SessionFactory;
  5  import org.hibernate.cfg.Configuration;
  6 
  7 public class HibernateUtils {
  8      private static SessionFactory factory;
  9 
 10     static {
 11          // 加载配置文件
 12         Configuration cfg = new Configuration();
 13          cfg.configure();
 14          // 构建sessionFactory
 15          factory = cfg.buildSessionFactory();
 16      }
 17 
 18     public static Session getSession() {
 19          return factory.openSession();
 20      }
 21 
 22     // 获取与当前线程绑定的session
 23      public static Session getCurrentSession() {
 24          return factory.getCurrentSession();
 25      }
 26 
 27 }
 28 


6.编写测试代码;

  1 package demo;
  2 
  3 import java.util.List;
  4 
  5 import org.hibernate.Query;
  6  import org.hibernate.Session;
  7  import org.hibernate.Transaction;
  8  import org.junit.Test;
  9 
 10 import utils.HibernateUtils;
 11 
 12 //hql查询数据库
 13 public class Demo02 {
 14      @Test
 15      // 查询全部
 16     // sql:select * from cst_linkman
 17      // hql:from Linkman
 18      public void findAll() {
 19          // 获取session
 20          Session cs = HibernateUtils.getCurrentSession();
 21          // 开启事务,并返回事务对象
 22         Transaction tx = cs.beginTransaction();
 23          // hql语句
 24         String hql = "from Linkman";
 25          // 执行hql语句,并获取query对象
 26         Query query = cs.createQuery(hql);
 27          // 获取结果集,并输出
 28         List list = query.list();
 29          for (Object object : list) {
 30              System.out.println(object);
 31          }
 32          // 提交事务
 33         tx.commit();
 34      }
 35 
 36     // 条件查询
 37     // sql:select * from csl_linkman where id=3;
 38      // hql:from Linkman where id=3
 39      @Test
 40      public void findWithCondition() {
 41          // 获取当前线程session
 42          Session cs = HibernateUtils.getCurrentSession();
 43          // 开启事务,返回事务对象
 44         Transaction tx = cs.beginTransaction();
 45          // 执行hql,并返回query对象
 46         Query query = cs.createQuery("from Linkman where lkmId=?");
 47          // 为占位符赋值,从左往右,第1个?为0,第2个为1....
 48          query.setParameter(0, 3L);
 49          // 获取结果集并输出
 50         Object obj = query.uniqueResult();
 51          System.out.println(obj);
 52          // 提交事务
 53         tx.commit();
 54      }
 55 
 56     // 具名查询
 57     @Test
 58      public void findWithConditionOther() {
 59          // 获取当前线程session
 60          Session cs = HibernateUtils.getCurrentSession();
 61          // 开启事务,返回事务对象
 62         Transaction tx = cs.beginTransaction();
 63          // 编写hql语句
 64         String hql = "from Linkman where lkmName like :lkmName";
 65          // 执行hql,并返回query对象
 66         Query query = cs.createQuery(hql);
 67          // 为占位符赋值,具名方式
 68         query.setString("lkmName", "R%");
 69          // 获取结果集
 70         Object obj = query.uniqueResult();
 71          // 输出
 72         System.out.println(obj);
 73          // 提交事务
 74         tx.commit();
 75      }
 76 
 77     // 分页查询
 78     @Test
 79     public void findWithPage() {
 80          // 获取当前线程session
 81          Session cs = HibernateUtils.getCurrentSession();
 82          // 开启事务,并返回事务对象
 83         Transaction tx = cs.beginTransaction();
 84          // 编写hql
 85          String hql = "from Linkman";
 86          // 执行hql并返回query对象
 87         Query query = cs.createQuery(hql);
 88          // 为占位符赋值
 89         query.setFirstResult(0);
 90          query.setMaxResults(2);
 91          // 获取结果集
 92         List list = query.list();
 93          for (Object object : list) {
 94              System.out.println(object);
 95          }
 96          // 提交事务
 97         tx.commit();
 98      }
 99 
100     // 排序查询-id倒序
101     @Test
102      public void findByOrder() {
103          // 获取当前线程session
104          Session cs = HibernateUtils.getCurrentSession();
105          // 开启事务,并返回事务对象
106         Transaction tx = cs.beginTransaction();
107          // 编写hql
108          String hql = "from Linkman order by lkmId desc";
109          // 执行并返回query对象
110         Query query = cs.createQuery(hql);
111          // 获取结果集
112         List list = query.list();
113          for (Object object : list) {
114              System.out.println(object);
115          }
116          // 提交事务
117         tx.commit();
118      }
119 
120     // 统计查询
121     @Test
122      public void findWithCount() {
123          // 获取当前线程session
124          Session cs = HibernateUtils.getCurrentSession();
125          // 开启事务,并返回事务对象
126         Transaction tx = cs.beginTransaction();
127          // 编写hql
128          String hql = "select count(lkmId) from Linkman";
129          // 执行并返回query对象
130         Query query = cs.createQuery(hql);
131          // 获取结果集,并输出
132         Object obj = query.uniqueResult();
133          System.out.println(obj);
134          // 提交事务
135         tx.commit();
136      }
137 
138     // 投影查询
139     @Test
140      public void findProjection() {
141          // 获取当前线程session
142          Session cs = HibernateUtils.getCurrentSession();
143          // 开启事务,并返回事务对象
144         Transaction tx = cs.beginTransaction();
145          // 编写hql
146          String hql = "select new Linkman(lkmId,lkmName) from Linkman";
147          // 执行hql并返回query对象
148         Query query = cs.createQuery(hql);
149          // 获取结果集并输出
150         List list = query.list();
151          for (Object object : list) {
152              System.out.println(object);
153          }
154          // 提交事务
155         tx.commit();
156      }
157  }
158 

原文地址:https://www.cnblogs.com/huguangqin/p/7416537.html