• 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 

  • 相关阅读:
    母函数做的题
    HDU2089 暴力打表
    HDU2036 改革春风吹满地
    HDU1201 水题
    高可用服务 AHAS 在消息队列 MQ 削峰填谷场景下的应用
    Nacos Committers 团队首亮相,发布 0.9.0 版本
    Dubbo Mesh 在闲鱼生产环境中的落地实践
    Watchdogs利用Redis实施大规模挖矿,常见数据库蠕虫如何破?
    阿里在使用一种更灵活的软件集成发布模式
    2019 年,容器技术生态会发生些什么?
  • 原文地址:https://www.cnblogs.com/huguangqin/p/7416537.html
Copyright © 2020-2023  润新知