Hibernate分页和投影

分页:

DAO:

	/**
	 * 分页查询
	 * @param index
	 * @param pageSize
	 * @return
	 */
	public List<Dept> findByPage(Integer index, Integer pageSize) {
		return currentSession().createQuery("from Dept order by deptNo")
				.setFirstResult((index - 1) * pageSize)//设置获取结果的起始下标
				.setMaxResults(pageSize)//设置最大返回结果数
				.list();
	}

Service:

public List<Dept> findByPage(Integer index, Integer pageSize) {
		Transaction tx=null;
		List<Dept> deptList=null;
		try {
			tx=HibernateUtil.currentSession().beginTransaction();//开启事务
			deptList=deptDao.findByPage(index, pageSize);
			tx.commit();//提交事务
		} catch (HibernateException e) {
			if(tx!=null){
				tx.rollback();//回滚事务
			}
			e.printStackTrace();
		}
		return deptList;
	}

Test:

List<Dept> deptList=new DeptService().findByPage(2,5);//每页5条,查询第二页
		for (Dept dept : deptList) {
			System.out.println(dept.getdName());
		}


投影:

DAO:

/**
	 * 每条查询结果只包含一个结果列
	 * @return
	 */
	public List<String> findAllNames(){
		String hql="select dName from Dept";
		return currentSession().createQuery(hql).list();
	}
	
	
	/**
	 * 每条结果包含不止一个结果列
	 * 查询结果集合中每个元素都是对象数组Object[],数组长度2,第一个元素deptNo,第二个元素dName
	 * 这种方式一般用于查询部分属性值
	 */
	/*public List<Object[]> findAllDeptList(){
		String hql="select deptNo,dName from Dept";
		return currentSession().createQuery(hql).list();
	}*/
	
	/**
	 * 将每条查询结果通过构造方法封装成对象()
	 * 需要实体类添加构造方法
	 */
	public List<Dept> findAllDeptList(){
		String hql="select new Dept(deptNo,dName) from Dept";
		return currentSession().createQuery(hql).list();
	}

Service:

	/**
	 * 每条查询结果只包含一个结果列
	 * @return
	 */
	public List<String> findAllNames(){
		Transaction tx=null;
		List<String> result=null;
		try {
			tx=HibernateUtil.currentSession().beginTransaction();//开启事务
			result=deptDao.findAllNames();
			tx.commit();//提交事务
		} catch (HibernateException e) {
			if(tx!=null){
				tx.rollback();//回滚事务
			}
			e.printStackTrace();
		}
		return result;
	}
	
	
	/**
	 * 每条结果包含不止一个结果列
	 * 查询结果集合中每个元素都是对象数组Object[],数组长度2,第一个元素deptNo,第二个元素dName
	 * 这种方式一般用于查询部分属性值
	 */
	/*public List<Object[]> findAllDeptList(){
		Transaction tx=null;
		List<Object[]> result=null;
		try {
			tx=HibernateUtil.currentSession().beginTransaction();//开启事务
			result=deptDao.findAllDeptList();
			tx.commit();//提交事务
		} catch (HibernateException e) {
			if(tx!=null){
				tx.rollback();//回滚事务
			}
			e.printStackTrace();
		}
		return result;
	}*/
	
	
	/**
	 * 将每条查询结果通过构造方法封装成对象(非持久化)
	 * 需要实体类添加构造方法
	 */
	public List<Dept> findAllDeptList(){
		Transaction tx=null;
		List<Dept> result=null;
		try {
			tx=HibernateUtil.currentSession().beginTransaction();//开启事务
			result=deptDao.findAllDeptList();
			tx.commit();//提交事务
		} catch (HibernateException e) {
			if(tx!=null){
				tx.rollback();//回滚事务
			}
			e.printStackTrace();
		}
		return result;
	}

Test::

/*List<String> result=new DeptService().findAllNames();
		for (String string : result) {
			System.out.println(string);
		}*/
		
		/*List<Object[]> result=new DeptService().findAllDeptList();
		for (Object[] objects : result) {
			System.out.println(objects[0]+" "+objects[1]);
		}*/
		
		List<Dept> result=new DeptService().findAllDeptList();
		for (Dept dept : result) {
			System.out.println(dept.getDeptNo()+" "+dept.getdName());
		}


分页与投影结合:

DAO:

	/**
	 * 分页查询,每页三条记录,每条记录显示用户名和电话
	 * 
	 * @param user
	 */

	public List<Users> findUsersByPage(Integer index, Integer pageSize) {
		String hql = "select new Users(telephone,username) from Users";
		return currentSession().createQuery(hql)
				.setFirstResult((index - 1) * pageSize).setMaxResults(pageSize)
				.list();
	}

Service:

public List<Users> findUsersByPage(Integer index,Integer pageSize){
		Transaction tx=null;
		List<Users> userList=null;
		try {
			tx=usersDao.currentSession().beginTransaction();
			userList=usersDao.findUsersByPage(index, pageSize);
			tx.commit();
		} catch (HibernateException e) {
			e.printStackTrace();
			if(tx!=null){
				tx.rollback();
			}
		}
		return userList;
	}

Test:

List<Users> userList=new UserService().findUsersByPage(1, 3);
		for (Users users : userList) {
			System.out.println(users.getUsername()+" "+users.getTelephone());
		}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值