利用Struts2和Hibernate实现页面分页显示的功能

————-刚刚接触Struts2和Hibernate框架,将学习到的一点知识和大家分享,欢迎指正————–
技术要点:①使用Struts2中Action的注入方式实现数据的传递;②使用Hibernate的分页查询方法,Criteria——setFirstResult(设置分页查询的起始值)、setMaxResults(设置一页查询的记录数)。
第一步:建立分页的实例类,示例名称为PageInfo(包含总记录数、总页数、当前页面、下一页、上一页、每页显示的记录数、每页显示的记录的集合等属性)。

public class PageInfo {
    private int totalRecords;// 总记录数
    private int pageCount;// 总页数
    private int pageNo;// 当前页面
    private int nextPage;// 下一页
    private int prePage;// 上一页
    private int pageSize;// 每页显示的记录数
    private List<Mybook> mybooks = null;// 每页显示的短消息的集合

    public int getTotalRecords() {
        return totalRecords;
    }

    public void setTotalRecords(int totalRecords) {
        this.totalRecords = totalRecords;
    }

    // 返回总页数
    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getPageNo() {
        return pageNo;
    }

    public void setPageNo(int pageNo) {
        this.pageNo = pageNo;
    }

    // 得到下一页
    public int getNextPage() {
        if (pageNo >= getPageCount()) {
            nextPage = getPageCount();
        } else {
            nextPage = pageNo + 1;
        }
        return nextPage;
    }

    public void setNextPage(int nextPage) {
        this.nextPage = nextPage;
    }

    // 得到上一页
    public int getPrePage() {
        if (pageNo <= 1) {
            prePage = 1;
        } else {
            prePage = pageNo - 1;
        }
        return prePage;
    }

    public void setPrePage(int prePage) {
        this.prePage = prePage;
    }

    // 返回总页数
    public int getPageCount() {
        pageCount = totalRecords / pageSize;
        if (totalRecords % pageSize != 0) {
            pageCount += 1;
        }
        return pageCount;
    }

    public void setPageCount(int pageCount) {
        this.pageCount = pageCount;
    }

    public List<Mybook> getMybooks() {
        return mybooks;
    }

    public void setMybooks(List<Mybook> mybooks) {
        this.mybooks = mybooks;
    }

}

第二步:构建Action,示例名称为BookAction(包含显示的对象、返回给页面的集合、分页实体类对象等属性)。

public class BookAction extends ActionSupport {
    //连接业务层的服务对象
    private ICommonService bookService;
    // 返回给页面的集合
    private List<Mybook> products;
    //分页实体类
    private PageInfo pageinfo;
    // 返回给页面的信息(跳转、包含的页面)
    private String target;

    public List<Mybook> getProducts() {
        return products;
    }

    public void setProducts(List<Mybook> products) {
        this.products = products;
    }

    public String getTarget() {
        return target;
    }

    public void setTarget(String target) {
        this.target = target;
    }

    public PageInfo getPageinfo() {
        return pageinfo;
    }

    public void setPageinfo(PageInfo pageinfo) {
        this.pageinfo = pageinfo;
    }

    // 分页显示
    public String show() throws Exception {
        bookService = ServiceFactory.getInstance("com.want.service.impl.BookServiceImpl");
        // 查找当前所有图书数量
        int count =bookService.count();
        //设置总记录数
        pageinfo.setTotalRecords(count);
        //设置单页记录数
        pageinfo.setPageSize(8);
        //根据起始值和页面记录数,查找当前页到的结果
        products = bookService.getByPages((pageinfo.getPageNo() - 1) * pageinfo.getPageSize(), pageinfo.getPageSize());
        target = "showBooks.jsp";
        return SUCCESS;
    }
}

第三步:数据库层查询条件并返回结果。

public List<Mybook> findByPages(int startNo, int pageSize) {
        // 获取session和transaction
        Session session = HibernateSessionFactory.getSession();
        Transaction trans = session.beginTransaction();
        List<Mybook> mybooks = null;
        try {
            Criteria criteria = session.createCriteria(Mybook.class);
            // 设置分页查询的起始值和一页显示的数量
            criteria.setFirstResult(startNo);
            criteria.setMaxResults(pageSize);
            //按照书的id降序排列
            criteria.addOrder(Order.desc("bookid"));
            //获取查询到的所有图书
            mybooks = criteria.list();
            trans.commit();
        } catch (Exception e) {
            e.printStackTrace();
            trans.rollback();
        }
        return mybooks;
    }

第五步:页面代码,首页、上一页、下一页、末页。每次点击其中一个超链接,就会从Action中获取一次最新的页面数据(当前页总是在变化)。

<div class="pageDiv">
    <a href="bookAction_show.do?pageinfo.pageNo=1">首页</a> 
    <span >${pageinfo.pageNo}&/${pageinfo.pageCount }</span> 
    <a href="bookAction_show.do?pageinfo.pageNo=${pageinfo.prePage}">上一页</a>
    <a href="bookAction_show.do?pageinfo.pageNo=${pageinfo.nextPage}">下一页</a>
    <a href="bookAction_show.do?pageinfo.pageNo=${pageinfo.pageCount}">末页</a>
</div>

小结:①Hibernate中已经封装好查询分页查询的方法,本文中用到的数据库是Oracle11g,分页查询是根据表空间中隐藏的rownum来实现分页查询功能。
②每次点击完首页、下一页、上一页、末页,都需要从Action中拿到当前页码(或者上一页、下一页页码),以实现上一页、下一页的功能。(也可以用Servlet来实现)
Hibernate在控制台中显示的SQL语句如下:

Hibernate: select * from ( select this_.BOOKID as BOOKID1_0_0_, this_.BOOKNAME as BOOKNAME2_0_0_, this_.PRICE as PRICE3_0_0_, this_.PUBLISHER as PUBLISHE4_0_0_, this_.BOOKTYPEID as BOOKTYPE5_0_0_, this_.BOOKIMAGE as BOOKIMAG6_0_0_ from WANGTAO.MYBOOK this_ order by this_.BOOKID desc ) where rownum <= ?
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为你提供一个简单的Struts2Hibernate框架整合实现注册和登录功能的示例。 首先,你需要创建一个基于Struts2Hibernate的Web应用程序。接下来,你可以按照以下步骤来实现注册和登录功能: 1. 创建一个User实体类,包括id、username和password属性以及相应的getter和setter方法。 2. 创建一个UserDao类,实现用户信息的增、删、改、查等操作。在这个类中,你需要使用Hibernate提供的API来访问数据库。 3. 创建一个UserAction类,处理用户的注册和登录请求。在这个类中,你需要使用Struts2提供的API来接收用户提交的表单数据,并将其传递给UserDao类进行处理。 4. 创建一个注册页面和一个登录页面,让用户输入必要的信息。 5. 配置Struts2Hibernate框架,确保它们能够正确地协同工作。 下面是一个简单的注册和登录功能的示例代码: User实体类: ``` public class User { private Integer id; private String username; private String password; // getter and setter methods public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } ``` UserDao类: ``` public class UserDao { private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public void save(User user) { Session session = sessionFactory.getCurrentSession(); session.save(user); } public User findByUsername(String username) { Session session = sessionFactory.getCurrentSession(); Query query = session.createQuery("from User where username = :username"); query.setParameter("username", username); return (User) query.uniqueResult(); } } ``` UserAction类: ``` public class UserAction extends ActionSupport { private User user; private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String register() { userDao.save(user); return SUCCESS; } public String login() { User u = userDao.findByUsername(user.getUsername()); if (u != null && u.getPassword().equals(user.getPassword())) { return SUCCESS; } else { return ERROR; } } } ``` 注册页面: ``` <s:form action="register"> <s:textfield name="user.username" label="Username" /> <s:password name="user.password" label="Password" /> <s:submit value="Register" /> </s:form> ``` 登录页面: ``` <s:form action="login"> <s:textfield name="user.username" label="Username" /> <s:password name="user.password" label="Password" /> <s:submit value="Login" /> </s:form> ``` 以上代码仅供参考,你可以根据自己的需求进行修改和完善。同时,确保你已经正确地配置了Struts2Hibernate框架,以便它们能够协同工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值