Day18_学点儿设计模式_MVC和三层架构

0 优质文章

MVC与三层架构
什么是MVC?什么是三层架构?
三层架构与MVC详细讲解
MVC三层架构(详解)

1 MVC

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,
用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
最简单的、最经典就是JSP(view) +Servlet(controller) + JavaBean(model)
视图和逻辑隔离开来
在这里插入图片描述
控制器是核心
M(Model) 模型 JavaBean
V(View) 视图 html jsp Thymeleaf volicity freemaker
C(Control) 控制器 Servlet,Controller,Action

工作流程:

  1. 当控制器收到来自用户的请求
  2. 控制器调用业务层完成JavaBean数据封装
  3. 完成业务后通过控制器跳转JSP页面的方式给用户反馈信息
  4. JSP个 用户做出响应。

什么是JavaBean?

JavaBean:一种规范,表达实体和信息的规范,便于封装重用

  1. 所有属性为private
  2. 提供默认无参构造方法
  3. 提供getter和setter
  4. 实现serializable接口

2 三层架构

在这里插入图片描述
在这里插入图片描述

  1. Controller:负责控制,拿到View传递过来的数据,封装之后交给Service处理,Service处理完了之后,Controller拿到结果之后,将结果交给界面。
  2. Service:业务逻辑(比如分页,为了完成分页就要调用两次DAO层)
  3. DAO:纯粹的JDBC的增删改查操作
    上一层可以调用下一层所有代码,并不是StudentServlet只能调用IStudentService代码,也可以调用ITeacherService代码
	@WebServlet("/student")
	public class StudentServlet extends HttpServlet {
	    private IStudentService studentService = new StudentServiceImpl();
	    private ITeacherService teacherService = new TeacherServiceImpl();
	    
	}
	
	public class StudentServiceImpl implements IStudentService {
	    private IStudentDao studentDao = new StudentDaoImpl();
	    private ITeacherDao teacherDao = new TeacherDaoImpl();
	    
	}
	
	public class StudentDaoImpl implements IStudentDao {
	
	}

在这里插入图片描述

3 分页

在这里插入图片描述
在这里插入图片描述

limitoffset代表偏移到哪个位置,rows代表往下数多少个
pageNo, pageSize -> 1,5 2,5 3,5
limit (pageNo-1)*pageSize ,pageSize

pageNolimit
10,5
25,5
310,5

在这里插入图片描述
在这里插入图片描述

分页常见的问题:

  1. 封装一个分页需要哪些信息
    ①当前页要展示的数据(可以用泛型)②总页数③当前页号④每页展示数据条数⑤
  2. 分页需要发送哪两条sql语句
SELECT id,name,age,gender FROM student LIMIT offset,pagesize
SELECT count(*) FROM student

Pageinfo类:

public class PageInfo{
     //当前页数据
     private List<Student> list;
     //总的页数   Math.ceil(总数量/pageSize)      
     private Integer totalPage;
     private Integer pageNo;
     private Integer pageSize;
}

//缺点是这个PageInfo只能封装Student,使用泛型就可以解决这个问题,这个T代表可以传递任何对象
public class PageInfo<T>{
    private List<T> list;
    private Integer totalPage;
    private Integer pageNo;
    private Integer pageSize;
}

public static void main(String[] args) {
    int totalCount = 12;
    int pageSize = 5;
    int totalPage = (int)Math.ceil((double)totalCount / pageSize);
    System.out.println(totalPage);// 3
}

在这里插入图片描述
在这里插入图片描述

4 代码

Day18_三层架构、分页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/542067.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

01、ArcGIS For JavaScript 4.29对3DTiles数据的支持

综述 Cesium从1.99版本开始支持I3S服务的加载&#xff0c;到目前位置&#xff0c;已经支持I3S的倾斜模型、3D Object模型以及属性查询的支持。Cesium1.115又对I3S标准的Building数据实现了加载支持。而ArcGIS之前一直没有跨越对3DTiles数据的支持&#xff0c;所以在一些开发过…

[附带黑子定制款鸽鸽版素材包]更改文件夹图标,更改系统音效,更改鼠标指针及样式。

更改文件夹图标 1.选择图片在线格式转换网站转换为ico格式 2.右键文件夹选择属性 3.点击自定义&#xff0c;点击更改图标超链接 4.点击预览选择生成的ico文件 5.点击打开&#xff0c;点击确定&#xff0c;点击应用 更改系统音效&#xff08;真爱粉强烈推荐&#xff09; 1…

【七 (4)FineBI FCP模拟试卷-电站数据分析】

目录 文章导航一、字段解释1、电站基础信息表2、电站事实表 二、需求三、操作步骤1、将新增一列日期12、以左关联的形式增加装机容量3、年度发电总量4、年度售电完成率4、发电量及发电效率5、年售电完成比、售电回款比、管理费用比、运维费用比5、总装机容量6、最近日期7、最近…

【PG-1】PostgreSQL体系结构概述

1. PostgreSQL体系结构概述 代码结构 其中&#xff0c;backend是后端核心代码&#xff0c;包括右边的几个dir: access&#xff1a;处理数据访问方法和索引的代码。 bootstrap&#xff1a;数据库初始化相关的代码。 catalog&#xff1a;系统目录&#xff08;如表和索引的元数据…

Golang | Leetcode Golang题解之第27题移除元素

题目&#xff1a; 题解&#xff1a; func removeElement(nums []int, val int) int {left, right : 0, len(nums)for left < right {if nums[left] val {nums[left] nums[right-1]right--} else {left}}return left }

人脸识别业务(基于腾讯人脸识别接口)

使用腾讯云人脸识别接口&#xff0c;基于优图祖母模型。 一、准备工作 人脸识别账号 申请腾讯云服务器账号&#xff0c;生成自己的秘钥。记录秘钥和秘钥ID。 创建人员库 记下人员库id 在配置文件application.yml中添加配置。 plateocr:SecretId: 秘钥IDSecretKey: 秘钥ser…

LeetCode34:在排序数组中查找元素的第一个和最后一个位置(Java)

目录 题目&#xff1a; 题解&#xff1a; 方法一&#xff1a; 方法二&#xff1a; 题目&#xff1a; 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&…

软考高级架构师:运筹方法(线性规划和动态规划)

一、AI 讲解 运筹学是研究在给定的资源限制下如何进行有效决策的学问。其中&#xff0c;线性规划和动态规划是两种重要的运筹方法&#xff0c;它们在解决资源优化分配、成本最小化、收益最大化等问题上有着广泛的应用。 线性规划 线性规划是一种数学方法&#xff0c;用于在满…

C语言 | Leetcode C语言题解之第27题移除元素

题目&#xff1a; 题解&#xff1a; int removeElement(int* nums, int numsSize, int val) {int left 0, right numsSize;while (left < right) {if (nums[left] val) {nums[left] nums[right - 1];right--;} else {left;}}return left; }

一个巧用委托解决的问题(C#)

个人觉得是委托应用的一个很好的例子&#xff0c;故做一下分享&#xff0c;希望能帮助到您&#xff0c;内容比较简单&#xff0c;大佬可以跳过。我是做桌面医疗软件开发的&#xff0c;前段时间在做一个需求。在签发检验项目医嘱时&#xff0c;调用第三方接口&#xff0c;然后带…

「51媒体网」汽车类媒体有哪些?车展媒体宣传

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 汽车类媒体有很多&#xff0c;具体如下&#xff1a; 汽车之家&#xff1a;提供全面的汽车新闻、评测、导购等内容。 爱卡汽车&#xff1a;同样是一个综合性的汽车信息平台&#xff0c;涵…

安达发|电子行业智能生产排程计划的实施

随着科技的不断发展&#xff0c;电子行业正面临着巨大的变革。在这个过程中&#xff0c;智能生产排程计划的实施成为了提高生产效率、降低成本的关键因素。本文将详细介绍电子行业智能生产排程计划的实施方法、优势以及可能遇到的挑战。 一、实施方法 1. 数据采集与分析&#x…

Java面试篇9——并发编程

并发编程知识梳理 提示&#xff0c;此仅为面试&#xff0c;若想对线程有跟完整了解&#xff0c;请点击这里 提示&#xff1a;直接翻到最后面看面试真题&#xff0c;上面的为详解 面试考点 文档说明 在文档中对所有的面试题都进行了难易程度和出现频率的等级说明 星数越多代表…

共轭梯度法 Conjugate Gradient Method (线性及非线性)

1. 线性共轭梯度法 共轭梯度法&#xff08;英语&#xff1a;Conjugate gradient method&#xff09;&#xff0c;是求解系数矩阵为对称正定矩阵的线性方程组的数值解的方法。 共轭梯度法是一个迭代方法&#xff0c;它适用于 1. 求解线性方程组&#xff0c; 2. 共轭梯度法也可…

TQ15EG开发板教程:在MPSOC上运行ADRV9009(vivado2018.3)

首先需要在github上下载两个文件&#xff0c;本例程用到的文件以及最终文件我都会放在网盘里面&#xff0c; 地址放在最后面。在github搜索hdl选择第一个&#xff0c;如下图所示 GitHub网址&#xff1a;https://github.com/analogdevicesinc/hdl/releases 点击releases选择版…

图解二叉树遍历方法-前序遍历、中序遍历、后序遍历

一、几个概念 二叉树&#xff08;binary tree&#xff09;&#xff1a;是 n&#xff08;n > 0&#xff09;个结点&#xff08;每个结点最多只有2棵子树&#xff09;的有限集合&#xff0c;该集合可为空集&#xff08;称为空二叉树&#xff09;&#xff0c;或由一个根节点和…

编译 c++ 编译的艮,一个编译回合下来 的需要换电脑!

研究这些ui 组件。 这的单独给他准备一台电脑了。 不是cmake 版本对不对。就是qt 版本不对。或者vs 版本太低。 sdk 没有包&#xff0c;编译包&#xff0c;需要组件&#xff0c;组件需要 qt5.5 但是 安装6.5.3 一个回和下来&#xff0c; 电脑坏了。随后旧项目 不能编译了&…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《风险感知的氢电耦合微网优化调度方法 》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

金航标Type-C 母座 卧贴——KH-TYPE-C-16P

产品名称&#xff1a;金航标Type-C 母座 卧贴——KH-TYPE-C-16P 概述&#xff1a;KH-TYPE-C-16P Type-C 母座 卧贴是一款高品质、高性能的连接器&#xff0c;可满足各种电子设备的连接需求。 应用领域&#xff1a; 智能手机、平板电脑、笔记本电脑、数码相机、音频设备等。它可…

C++11 数据结构2 线性表的链式存储,实现,测试

线性表的链式存储 --单链表 前面我们写的线性表的顺序存储(动态数组)的案例&#xff0c;最大的缺点是插入和删除时需要移动大量元素&#xff0c;这显然需要耗费时间&#xff0c;能不能想办法解决呢&#xff1f;链表。 链表为了表示每个数据元素与其直接后继元素之间的逻辑关系…