您的位置:首页 > 其它

Hibernate的学习之路三十三(QBC的基本查询方式)

2017-12-04 14:33 381 查看

前言

     今天继续学习,之前贴出的大致图,再来一次。
  

技术分析之Hibernate框架的查询方式
1. 唯一标识OID的检索方式
* session.get(对象.class,OID)
2. 对象的导航的方式

3. HQL的检索方式
* Hibernate Query Language  -- Hibernate的查询语言

4. QBC的检索方式
* Query By Criteria -- 条件查询

5. SQL检索方式(了解)
* 本地的SQL检索

现在讲第4个。

分析

技术分析之QBC检索方式
0. QBC:Query By Criteria  按条件进行查询

1. 简单查询,使用的是Criteria接口
List<Customer> list = session.createCriteria(Customer.class).list();
for (Customer customer : list) {
System.out.println(customer);
}

2. 排序查询
* 需要使用addOrder()的方法来设置参数,参数使用org.hibernate.criterion.Order对象
* 具体代码如下:
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
Criteria criteria = session.createCriteria(Linkman.class);
// 设置排序
criteria.addOrder(Order.desc("lkm_id"));
List<Linkman> list = criteria.list();
for (Linkman linkman : list) {
System.out.println(linkman);
}
tr.commit();

3. 分页查询
* QBC的分页查询也是使用两个方法
* setFirstResult();
* setMaxResults();

* 代码如下;
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
Criteria criteria = session.createCriteria(Linkman.class);
// 设置排序
criteria.addOrder(Order.desc("lkm_id"));
criteria.setFirstResult(0);
criteria.setMaxResults(3);
List<Linkman> list = criteria.list();
for (Linkman linkman : list) {
System.out.println(linkman);
}
tr.commit();

4. 条件查询(Criterion是查询条件的接口,Restrictions类是Hibernate框架提供的工具类,使用该工具类来设置查询条件)
* 条件查询使用Criteria接口的add方法,用来传入条件。
* 使用Restrictions的添加条件的方法,来添加条件,例如:
* Restrictions.eq           -- 相等
* Restrictions.gt           -- 大于号
* Restrictions.ge           -- 大于等于
* Restrictions.lt           -- 小于
* Restrictions.le           -- 小于等于
* Restrictions.between      -- 在之间
* Restrictions.like         -- 模糊查询
* Restrictions.in           -- 范围
* Restrictions.and          -- 并且
* Restrictions.or           -- 或者

* 测试代码如下
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
Criteria criteria = session.createCriteria(Linkman.class);
// 设置排序
criteria.addOrder(Order.desc("lkm_id"));
// 设置查询条件
criteria.add(Restrictions.or(Restrictions.eq("lkm_gender", "男"), Restrictions.gt("lkm_id", 3L)));
List<Linkman> list = criteria.list();
for (Linkman linkman : list) {
System.out.println(linkman);
}
tr.commit();

5. 聚合函数查询(Projection的聚合函数的接口,而Projections是Hibernate提供的工具类,使用该工具类设置聚合函数查询)
* 使用QBC的聚合函数查询,需要使用criteria.setProjection()方法
* 具体的代码如下
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
Criteria criteria = session.createCriteria(Linkman.class);
criteria.setProjection(Projections.rowCount());
List<Number> list = criteria.list();
Long count = list.get(0).longValue();
System.out.println(count);
tr.commit();


/**
* 判断值是否为空
*/
@Test
public void run7(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 创建QBC查询接口
Criteria criteria = session.createCriteria(Linkman.class);

// 找所有的lkm_email是空的值
criteria.add(Restrictions.isNull("lkm_email"));

List<Linkman> list = criteria.list();
for (Linkman linkman : list) {
System.out.println(linkman);
}
tr.commit();
}

/**
* 演示QBC的or方法
*/
@Test
public void run6(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 创建QBC查询接口
Criteria criteria = session.createCriteria(Linkman.class);

// SQL:select * from cst_linkman where lkm_gender = '女' or lkm_id > 3L;
criteria.add(Restrictions.or(Restrictions.eq("lkm_gender", "女"), Restrictions.gt("lkm_id", 3L)));

List<Linkman> list = criteria.list();
for (Linkman linkman : list) {
System.out.println(linkman);
}
tr.commit();
}

/**
* in查询
*/
@Test
public void run5(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 创建QBC查询接口
Criteria criteria = session.createCriteria(Linkman.class);

// SQL:select * from cst_linkman where lkm_id in (1,2,7);
List<Long> params = new ArrayList<Long>();
params.add(1L);
params.add(2L);
params.add(7L);

// 使用in 方法查询
criteria.add(Restrictions.in("lkm_id", params));

List<Linkman> list = criteria.list();
for (Linkman linkman : list) {
System.out.println(linkman);
}
tr.commit();
}

/**
* QBC的条件查询
*/
@Test
public void run4(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 创建QBC查询接口
Criteria criteria = session.createCriteria(Linkman.class);

// 使用方法添加条件  and
// criteria.add(Restrictions.eq("lkm_gender", "男"));
// criteria.add(Restrictions.ge("lkm_id", 3L));
// criteria.add(Restrictions.between("lkm_id", 2L, 5L));

List<Linkman> list = criteria.list();
for (Linkman linkman : list) {
System.out.println(linkman);
}
tr.commit();
}

/**
* QBC分页的方法和HQL分页的方式一样的
*/
@Test
public void run3(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 创建QBC查询接口
Criteria criteria = session.createCriteria(Linkman.class);
// 调用排序的方法,addOrder()
criteria.addOrder(Order.desc("lkm_id"));

// 设置分页的方法
criteria.setFirstResult(0);
criteria.setMaxResults(3);

List<Linkman> list = criteria.list();
for (Linkman linkman : list) {
System.out.println(linkman);
}
tr.commit();
}

/**
* QBC的基本入门查询
* 排序查询,调用的方法
*/
@Test
public void run2(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 创建QBC查询接口
Criteria criteria = session.createCriteria(Linkman.class);
// 调用排序的方法,addOrder()
criteria.addOrder(Order.desc("lkm_id"));
List<Linkman> list = criteria.list();
for (Linkman linkman : list) {
System.out.println(linkman);
}
tr.commit();
}

/**
* QBC的基本入门查询
*/
@Test
public void run1(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 创建QBC查询接口
Criteria criteria = session.createCriteria(Customer.class);
List<Customer> list = criteria.list();
for (Customer customer : list) {
System.out.println(customer);
}
tr.commit();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: