Hibernate-04 框架第四天 QBC与SQL的演示

124 篇文章 1 订阅
96 篇文章 0 订阅

 

 

 

package test;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;

import domain.Linkman;
import utils.HibernateUtils;


/**
 *	hibernate 中 QBC与SQL的演示 
 */
public class Demo2 {
	
	/*
	 * hibernate 使用 SQL 来查询
	 * 
	 */
	@Test
	public void testRun7() {
		//service层获得session
		Session session = HibernateUtils.getCurrentSession();
		Transaction tr = session.beginTransaction();
		
		//获得SQLQuery对象
		String sql = "select * from cst_linkman where lkm_id>?";
		SQLQuery sqlQuery = session.createSQLQuery(sql);
		//第一个参数0 对应第一个问号,第二个参数是值
		sqlQuery.setParameter(0, 1L);
		//不要忘记添加实体类
		sqlQuery.addEntity(Linkman.class);
		
		List<Linkman> list = sqlQuery.list();
		
		for (Linkman linkman : list) {
			System.out.println(linkman);
		}
		
		
		tr.commit();
	}
	
	/*
	 * 离线条件查询使用的是DetachedCriteria接口进行查询,离线条件查询对象在创建的时候,
	 * 不需要使用Session对象,只是在查询的时候使用Session对象即可。
	 */
	@Test
	public void testRun6() {
		
		//模拟从前台传来的离线criteria
		DetachedCriteria criteria = DetachedCriteria.forClass(Linkman.class);
		
		//service层获得session
		Session session = HibernateUtils.getCurrentSession();
		Transaction tr = session.beginTransaction();
		//添加条件
		criteria.add(Restrictions.like("lkm_name", "%联系人%"));
		//关键一步,用DetachedCriteria的getExecutableCriteria传入当前session执行后面的操作
		List<Linkman> list = criteria.getExecutableCriteria(session).list();

		System.out.println(list.size());
		
		for (Linkman linkman : list) {
			System.out.println(linkman);
		}
		
		tr.commit();
	}	
	
	
	
	
	/*
	 * 聚合查询,使用hibernate的工具类Projections来操作
	 */
	@Test
	public void testRun5() {
		
		Session session = HibernateUtils.getCurrentSession();
		Transaction tr = session.beginTransaction();
		//获得criteria对象
		Criteria criteria = session.createCriteria(Linkman.class);
		//设置条件
		criteria.setProjection(Projections.rowCount());//行数查询
		
		List<Number> list = criteria.list();
		System.out.println(list.get(0).longValue());
		
		tr.commit();
	}	
	
	
	
	
	
	
	/*
	 * 条件查询(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           -- 或者
	 * 
	 */
	@Test
	public void testRun4() {
		
		Session session = HibernateUtils.getCurrentSession();
		Transaction tr = session.beginTransaction();
		//获得criteria对象
		Criteria criteria = session.createCriteria(Linkman.class);
//		//设置条件
//		criteria.add(Restrictions.isNotNull("lkm_email"));//判断某个字段不为空
		criteria.add(Restrictions.eq("lkm_gender", "男"));		
		criteria.add(Restrictions.gt("lkm_id", 1L));		
		
		
		//获得列表
		List<Linkman> list = criteria.list();
		System.out.println("___________________________");
		for (Linkman linkman : list) {
			System.out.println(linkman);
		}
		
		tr.commit();
	}
	
	/*
	 * 分页排序查询方法
	 */
	@Test
	public void testRun3() {
		
		Session session = HibernateUtils.getCurrentSession();
		Transaction tr = session.beginTransaction();
		//获得criteria对象
		Criteria criteria = session.createCriteria(Linkman.class);
		//设置条件
//		criteria.addOrder(Order.asc("lkm_id"));
		criteria.addOrder(Order.desc("lkm_id"));
		//设置分页参数
		criteria.setFirstResult(0);//设置起始index
		criteria.setMaxResults(3);//设置获取数据长度
		//获得列表
		List<Linkman> list = criteria.list();
		
		for (Linkman linkman : list) {
			System.out.println(linkman);
		}
		
		tr.commit();
	}
	

	/*
	 * 排序查询方法
	 */
	@Test
	public void testRun2() {
		
		Session session = HibernateUtils.getCurrentSession();
		Transaction tr = session.beginTransaction();
		//获得criteria对象
		Criteria criteria = session.createCriteria(Linkman.class);
		//设置条件
//		criteria.addOrder(Order.asc("lkm_id"));
		criteria.addOrder(Order.desc("lkm_id"));
		//获得列表
		List<Linkman> list = criteria.list();
		
		for (Linkman linkman : list) {
			System.out.println(linkman);
		}
		
		tr.commit();
	}
	
	
	/*
	 * 基本查询方法
	 */
	@Test
	public void testRun1() {
		
		Session session = HibernateUtils.getCurrentSession();
		Transaction tr = session.beginTransaction();
		
		List<Linkman> list = session.createCriteria(Linkman.class).list();
		
		for (Linkman linkman : list) {
			System.out.println(linkman);
		}
		
		tr.commit();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值