com.bookssys.action控制器中查询方法
@Controller
@ParentPackage("json-default")
public class BookInfoAction extends ActionSupport {
//注入
@Resource
private BookInfoBiz bookInfoBiz;//com.bookssys.biz包下BookInfoBiz.java的类名
private final Integer pageSize = 4;// 每页显示的条数
private Integer pageIndex=1;//页数
private Integer totalCnt;//信息总的数量
private Integer totalPage=1;//总的页数
private BookInfo bookInfo;//传入的对象
private List bookInfosList;// 封装一个集合,保存查找到的数据
/**省略setter和getter**/
//根据多条件动态查询图书信息的真正方法
@Action(value="findBookInfosByConditions",results={@Result(name = "success", location = "/index.jsp")})
//value="
findBookInfosByConditions"是给该方法取个别名,方便在其他页面或者页面调用
public String findBookInfosByConditions() {
//根据动态条件获得信息的总数
totalCnt=bookInfoBiz.findBookInfosByConditionsCnt(bookInfo.getBookType().getId(),
bookInfo.getBookName(), bookInfo.getIsBorrow());
if(totalCnt>0){
//在总数大于0的前提下才进行查找,否则会没有意义
bookInfosList = bookInfoBiz.findBookInfosByConditions(bookInfo.getBookType().getId(), bookInfo.getBookName(),
bookInfo.getIsBorrow(), pageIndex, pageSize);// 在BookInfo中BookType是一个对象,属于另外一张表,所以要getId()
//计算总页数
if(
totalCnt%pageSize==0){
totalPage=
totalCnt/pageSize;
}else{
totalPage=totalSize/pageSize+1;
}
//判断当前页(不能小于1,不能大于总页数),进行页码控制
if(pageIndex<1){
pageIndex=1;
}else if(pageIndex>totalPage){
pageIndex=totalPage;
}
}
return SUCCESS;
}
}
com.bookssys.dao.impl包中根据多条件动态分页查询图书信息--findBookInfosByConditions方法的实现
public class BookInfoDaoImpl extends HibernateDaoSupport implements BookInfoDao {
@Override
public List findBookInfosByConditions(final Integer bookType,final String bookName,
final Integer pageIndex, final Integer pageSize) {
// TODO Auto-generated method stub
// getHibernateTemplate().find(hql.toString(), params);
return getHibernateTemplate().executeFind(new HibernateCallback() {// 利用回调进行分页
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
StringBuilder hql = new StringBuilder(
"from BookInfo where 1=1");// 单线程的时候用StringBuilder相对于Sting比较节省资源
int index = 0;
// 将条件拼接到查询语句中 总共2个参数,分别对条件判断是否要传到查询方法中
if (bookType != null && bookType > 0) {
hql.append(" and bookType.id = ?");//调用BookType对象bookType中的id,and前面有空格
}
if (bookName != null && !bookName.equals("")) {
hql.append(" and bookName like ?");//模糊查询 步骤1,and前面有空格
}
// TODO Auto-generated method stub
Query query = session.createQuery(hql.toString());// 创建查询模版将查询语句放到模版中
// 配置参数(将参数送到查询语句中)
if (bookType != null && bookType > 0) {
query.setParameter(index++, bookType);
}
if (bookName != null && !bookName.equals("")) {
query.setParameter(index++, "%" + bookName + "%");// 模糊查询 步骤2
}
// 对信息进行分页
query.setFirstResult((pageIndex - 1) * pageSize);// 从第几页开始查询
query.setMaxResults(pageSize);// 每页显示的数量
return query.list();
}
});
com.bookssys.dao.impl包中根据多条件动态查询图书信息总数--findBookInfosByConditionsCnt方法的实现
@Override
public Integer findBookInfosByConditionsCnt(final Integer bookType,
final String bookName, final Integer isBorrow) {
// TODO Auto-generated method stub
Long count = (Long) getHibernateTemplate().execute(new HibernateCallback() {// 利用回调进行分页
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
StringBuilder hql = new StringBuilder(
"select count(bookId) from BookInfo where 1=1");// 单线程的时候用StringBuilder相对于Sting比较节省资源
int index = 0;
// 将条件拼接到查询语句中 总共2个参数,分别对条件判断是否要传到查询方法中
if (bookType != null && bookType > 0) {
hql.append(" and bookType.id = ?");// 调用BookType对象bookType中的id and前面有空格
}
if (bookName != null && !bookName.equals("")) {
hql.append(" and bookName like ?");// 模糊查询 步骤1 and前面有空格
}
// TODO Auto-generated method stub
Query query = session.createQuery(hql.toString());// 创建查询模版将查询语句放到模版中
// 配置参数(将参数送到查询语句中)
if (bookType != null && bookType > 0) {
query.setParameter(index++, bookType);
}
if (bookName != null && !bookName.equals("")) {
query.setParameter(index++, "%" + bookName + "%");//模糊查询 步骤2
}
return query.uniqueResult();//返回单个对象用uniqueResult
}
});
return Integer.parseInt(count.toString()); //将Long类型先转成字符串类型再转换成Integer类型
}
}