一、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
#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
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