MVC模式详解和分页功能的实现

您所在的位置:网站首页 使用jsp不能实现数据库的分页浏览吗为什么 MVC模式详解和分页功能的实现

MVC模式详解和分页功能的实现

2024-07-15 02:47| 来源: 网络整理| 查看: 265

文章目录 一、MVC框架(Model-View-Controller)1.1MVC概念1.2MVC模式详解1.3 优点1.4MVC在框架中应用1.5三层架构与MVC1.5.1三层架构1.5.2MVC与三层架构的区别 二、分页2.1概念2.2分页实现思路2.3分页代码实现2.3.1数据库准备2.3.2数据库配置文件db.properties2.3.3PageBean类2.3.4创建DAO2.3.5EmpDaoImpl实现类2.3.6创建Service2.3.7Service实现类2.3.8ShowAllEmpController实现2.3.9showAllEmp.jsp2.3.10 运行效果图

一、MVC框架(Model-View-Controller) 1.1MVC概念

MVC又称为编程模式,是一种软件设计思想,将数据操作、页面展示、业务逻辑分为三个层级(模块),独立完成,相互调用

模型层(Model)

视图(View)

控制器(Controller)

1.2MVC模式详解

MVC并不是Java独有的,现在几乎所有的B/S的架构都采用了MVC模式。

视图View:视图即是用户看到并与之交互的界面,比如HTML(静态资源),JSP(动态资源)等等。控制器Controller:控制器即是控制请求的处理逻辑,对请求进行处理,负责流程跳转(转发和重定向)。模型Model:对客观世界的一种代表和模拟(业务模拟、对象模拟)。

在这里插入图片描述

1.3 优点 低耦合性:模块与模块之间的关联性不强,不与某一种具体实现产生密不可分的关联性高维护性:基于低耦合性,可做到不同层级的功能模块灵活更换、插拔高重用性:相同的数据库操作,可以服务于不同的业务处理。将数据作为独立模块,提高重用性 1.4MVC在框架中应用

MVC模式被广泛用于Java的各种框架中,比如Struts2、SpringMVC等等都用到了这种思想。

1.5三层架构与MVC 1.5.1三层架构

View层(表示|界面层)、Service层(业务逻辑层)、DAO层(数据访问层) 在这里插入图片描述

1.5.2MVC与三层架构的区别 MVC强调的是视图和业务代码的分离。严格的说MVC其实关注的是Web层。View就是单独的页面,如JSP、HTML等,不负责业务处理,只负责数据的展示。而数据封装到Model里,由Controller负责在V和M之间传递。MVC强调业务和视图分离。三层架构是“数据访问层”、“业务逻辑层”、“表示层”,指的是代码之间的解耦,方便维护和复用。

现在数据库里面有一个表student表,里面有13条数据,现在要求把13条数据展示到jsp页面上如何来搞?

1.先连接数据库

​ 在util文件夹中,需要黏贴咱们之前封装JdbcUtil,BaseDao

​ c3p0-config.xml文件复制到src文件夹下面

​ 导入依赖,连接数据库需要的东西

2.写一个sql语句

​ 查询出来所有的数据。要写Model层,包含了dao,entity,service

​ 因为是查询,查询出来的数据,要用实体类来接一下。要在entity里面来接受咱们从数据库里面查询出来的数据

​ model层结束

3.控制层,

​ 在controller文件夹中写一个Servelet,这个servlet从service里面取数据。

二、分页 2.1概念

分页是Web应用程序非常重要的一个技术。数据库中的数据可能是成千上万的,不可能把这么多的数据一次显示在浏览器上面。一般根据每行数据在页面上所占的空间设置每页显示若干行,比如一般20行是一个比较理想的显示状态。

2.2分页实现思路

对于海量的数据查询,需要多少就取多少,显然是最佳的解决方法,假如某个表中有200万条记录,第一页取前20条,第二页取21~40条记录。

select * from 表名 limit 0,20;//第一页 select * from 表名 limit 20,20;//第二页 select * from 表名 limit 40,20;//第三页

2.3分页代码实现

步骤:

1.确定每页显示的数据数量

2.确定分页显示所需的总页数

3.编写SQL查询语句,实现数据查询

4.在JSP页面中进行分页显示设置

2.3.1数据库准备 CREATE TABLE emp( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) NOT NULL, salary DOUBLE NOT NULL, age INT NOT NULL )CHARSET=utf8; -- 向数据库中添加100条添加记录 2.3.2数据库配置文件db.properties #连接设置 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/java2010 username=root password=root # initialSize=10 #最大连接数量 maxActive=50 # minIdle=5 # maxWait=5000 2.3.3PageBean类

分页数据所需要的实体类!内包含页码,页大小,总条数,总页数,起始行

package com.qf.emp.entity; public class Page { private Integer pageIndex;//页码 private Integer pageSize;//页大小 显示多少行数据 private Integer totalCounts;//数据的总行数 private Integer totalPages;//总页数 private Integer startRows;//起始行 public Page(Integer pageIndex) { this(pageIndex, 5); } public Page(Integer pageIndex, Integer pageSize) { this.pageIndex = pageIndex; this.pageSize = pageSize; this.setStartRows((pageIndex - 1) * pageSize); } public Integer getPageIndex() { return pageIndex; } public void setPageIndex(Integer pageIndex) { this.pageIndex = pageIndex; } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public Integer getTotalCounts() { return totalCounts; } public void setTotalCounts(Integer totalCounts) { this.totalCounts = totalCounts; this.setTotalPages(totalCounts % pageSize == 0? totalCounts/pageSize:totalCounts/pageSize +1); } public Integer getTotalPages() { return totalPages; } public void setTotalPages(Integer totalPages) { this.totalPages = totalPages; } public Integer getStartRows() { return startRows; } public void setStartRows(Integer startRows) { this.startRows = startRows; } } 2.3.4创建DAO package com.qf.emp.dao; import com.qf.emp.entity.Emp; import com.qf.emp.entity.Page; import java.util.List; public interface EmpDao { public List selectAll(); public int delete(int id); public int update(Emp emp); public Emp select(int id); //分页查询所有 public List selectAll(Page page); //查询数据总行数 public long selectCount(); } 2.3.5EmpDaoImpl实现类 package com.qf.emp.dao.impl; import com.qf.emp.dao.EmpDao; import com.qf.emp.entity.Emp; import com.qf.emp.entity.Page; import com.qf.emp.utils.DbUtils; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import java.sql.SQLException; import java.util.List; public class EmpDaoImpl implements EmpDao { private QueryRunner queryRunner = new QueryRunner(); //...省略其他方法 @Override public List selectAll(Page page) { try { List emps = queryRunner.query(DbUtils.getConnection(),"select * from emp limit ?,?",new BeanListHandler(Emp.class),page.getStartRows(),page.getPageSize()); return emps; } catch (SQLException e) { e.printStackTrace(); } return null; } @Override public long selectCount() { try { return queryRunner.query(DbUtils.getConnection(),"select count(*) from emp;",new ScalarHandler()); } catch (SQLException e) { e.printStackTrace(); } return 0; } } 2.3.6创建Service package com.qf.emp.service; import com.qf.emp.entity.Emp; import com.qf.emp.entity.Page; import java.util.List; public interface EmpService { public List showAllEmp(); public int removeEmp(int id); public int modify(Emp emp); public Emp showEmp(int id); public List showAllEmp(Page page); } 2.3.7Service实现类 package com.qf.emp.service.impl; import com.qf.emp.dao.EmpDao; import com.qf.emp.dao.impl.EmpDaoImpl; import com.qf.emp.entity.Emp; import com.qf.emp.entity.Page; import com.qf.emp.service.EmpService; import com.qf.emp.utils.DbUtils; import java.util.ArrayList; import java.util.List; public class EmpServiceImpl implements EmpService { private EmpDao empDao = new EmpDaoImpl(); //...省略其他方法 @Override public List showAllEmp(Page page) { List emps = null; try { DbUtils.begin(); //获取总行数 long count = empDao.selectCount(); page.setTotalCounts((int)count); //根据controller传递的page对象查询对应数据 emps = empDao.selectAll(page); DbUtils.commit(); } catch (Exception e) { DbUtils.rollback(); e.printStackTrace(); } return emps; } } 2.3.8ShowAllEmpController实现 package com.qf.emp.controller; import com.qf.emp.entity.Emp; import com.qf.emp.entity.Page; import com.qf.emp.service.EmpService; import com.qf.emp.service.impl.EmpServiceImpl; import sun.security.util.AuthResources_it; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; @WebServlet(name = "ShowAllEmpController",value = "/manager/safe/showAllEmpController") public class ShowAllEmpController extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String pageIndex = request.getParameter("pageIndex"); if(pageIndex==null){//如果是第一次访问 pageIndex ="1"; } Page page = new Page(Integer.valueOf(pageIndex)); EmpService empService = new EmpServiceImpl(); List emps = empService.showAllEmp(page); request.setAttribute("emps",emps); request.setAttribute("page",page); request.getRequestDispatcher("/manager/safe/showAllEmp.jsp").forward(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } } 2.3.9showAllEmp.jsp 查询所有员工页面 编号 姓名 工资 年龄 操作 ${emp.id} ${emp.name} ${emp.salary} ${emp.age} 删除 修改 首页 上一页 上一页 下一页 下一页 尾页 2.3.10 运行效果图

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3