• Hibernate之QBC检索和本地SQL检索


    QBC查询就是通过使用Hibernate提供的Query By Criteria API来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口

    本地SQL查询来完善HQL不能涵盖所有的查询特性。

    ====================代码区======================

    测试类

      1 package com.yl.hibernate.test;
      2 
      3 
      4 import java.util.ArrayList;
      5 import java.util.Arrays;
      6 import java.util.LinkedHashSet;
      7 import java.util.List;
      8 import java.util.Set;
      9 
     10 import oracle.net.aso.e;
     11 
     12 import org.hibernate.Criteria;
     13 import org.hibernate.Query;
     14 import org.hibernate.Session;
     15 import org.hibernate.SessionFactory;
     16 import org.hibernate.Transaction;
     17 import org.hibernate.cfg.Configuration;
     18 import org.hibernate.criterion.Conjunction;
     19 import org.hibernate.criterion.Disjunction;
     20 import org.hibernate.criterion.MatchMode;
     21 import org.hibernate.criterion.Order;
     22 import org.hibernate.criterion.Projection;
     23 import org.hibernate.criterion.Projections;
     24 import org.hibernate.criterion.Restrictions;
     25 import org.hibernate.service.ServiceRegistry;
     26 import org.hibernate.service.ServiceRegistryBuilder;
     27 import org.junit.After;
     28 import org.junit.Before;
     29 import org.junit.Test;
     30 
     31 import com.yl.hibernate.entities.Department;
     32 import com.yl.hibernate.entities.Employee;
     33 
     34 public class HibernateTest {
     35 
     36     private SessionFactory sessionFactory;
     37     private Session session;
     38     private Transaction transaction;
     39     
     40     @Before
     41     public void init() {
     42         Configuration configuration = new Configuration().configure();
     43         ServiceRegistry serviceRegistry = 
     44                 new ServiceRegistryBuilder().applySettings(configuration.getProperties())
     45                                             .buildServiceRegistry();
     46 
     47         sessionFactory = configuration.buildSessionFactory(serviceRegistry);
     48         
     49         session = sessionFactory.openSession();
     50 
     51         transaction = session.beginTransaction();
     52     }
     53     @After
     54     public void destory() {
     55         transaction.commit();
     56         
     57         session.close();
     58         
     59         sessionFactory.close();
     60     }
     61     
     62     
     63     @Test
     64     public void testQBC() {
     65         //1.创建一个Ctiteria对象
     66         Criteria criteria = session.createCriteria(Employee.class);
     67         //2.添加查询条件:在QBC中查询条件使用Criterion来表示
     68         //Criterion可以通过Restrictions 的静态方法得到
     69         criteria.add(Restrictions.eq("email", "PRESIDENT"));
     70         criteria.add(Restrictions.gt("salary", 500f));
     71         //3.执行查询
     72         Employee employee = (Employee) criteria.uniqueResult();
     73         System.out.println(employee);
     74     }
     75     
     76     @Test
     77     public void testQBC2() {
     78         
     79         Criteria criteria = session.createCriteria(Employee.class);
     80         //1.AND: 使用Conjunction表示
     81         //Conjunction 本身就是一个Criterion对象
     82         //且其中还可以添加Criterion对象
     83         Conjunction conjunction = Restrictions.conjunction();
     84         conjunction.add(Restrictions.like("name", "A", MatchMode.ANYWHERE));
     85         Department dept = new Department();
     86         dept.setId(20);
     87         conjunction.add(Restrictions.eq("dept", dept));
     88         System.out.println(conjunction);
     89         
     90         //2. OR
     91         Disjunction disjunction = Restrictions.disjunction();
     92         disjunction.add(Restrictions.ge("salary", 1000F));
     93         disjunction.add(Restrictions.isNotNull("email"));
     94         
     95         criteria.add(disjunction);
     96         criteria.add(conjunction);
     97         
     98         criteria.list();
     99         /**
    100          *  where
    101         (
    102             this_.SALARY>=? 
    103             or this_.EMAIL is not null
    104         ) 
    105         and (
    106             this_.NAME like ? 
    107             and this_.DEPT_ID=?
    108         )
    109          */
    110     }
    111     
    112     @Test
    113     public void testQBC3() {
    114         Criteria criteria = session.createCriteria(Employee.class);
    115         
    116         //统计查询: 使用Projection表示: 可以由Projections的静态方法得到
    117         criteria.setProjection(Projections.max("salary"));
    118         
    119         System.out.println(criteria.uniqueResult());
    120     }
    121     
    122     @Test
    123     public void testQBC4() {
    124         Criteria criteria = session.createCriteria(Employee.class);
    125         
    126         //1.添加排序
    127         criteria.addOrder(Order.asc("salary"));
    128         criteria.addOrder(Order.desc("email"));
    129         
    130         //2.添加分页
    131         int pageSize = 3;
    132         int pageNo = 2;
    133         criteria.setFirstResult((pageNo - 1) * pageSize)
    134                 .setMaxResults(pageSize)
    135                 .list();
    136         
    137     }
    138     
    139     @Test
    140     public void testNative() {
    141         String sql = "INSERT INTO YL_department VALUES(?, ?)";
    142         Query query = session.createSQLQuery(sql);
    143         
    144         query.setInteger(0, 50)
    145              .setString(1, "DEV")
    146              .executeUpdate();
    147     }
    148     
    149     @Test
    150     public void testHQLUpdate() {
    151         String hql = "DELETE FROM Department d WHERE d.id = :id";
    152         
    153         session.createQuery(hql).setInteger("id", 50)
    154                                 .executeUpdate();
    155         
    156     }
    157 }
  • 相关阅读:
    【原创】枚举Android系统的进程、任务和服务的信息
    WPF学习笔记“控件”一:控件基本属性
    WCF学习笔记:基础一
    WPF学习笔记“布局”三:Grid分割窗口
    WPF学习笔记“XAML”一:基础
    WPF学习笔记“窗口”一:入门
    WPF学习笔记“形状”:基础
    WPF学习笔记“窗口”二:入门
    WPF学习笔记“窗口”四:三种方式不规则窗口实现大小的改变
    WPF学习笔记“窗口”三:入门
  • 原文地址:https://www.cnblogs.com/dreamfree/p/4138711.html
Copyright © 2020-2023  润新知