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 }

 

你可能感兴趣的:(Hibernate)