分页:
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());
}