Java学习日记(day20)

一、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接口

二、三层架构

  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();
    
}

@Service
public class StudentServiceImpl implements IStudentService {
    private IStudentDao studentDao = new StudentDaoImpl();
    private ITeacherDao teacherDao = new TeacherDaoImpl();
    
}

public class StudentDaoImpl implements IStudentDao {

}

三、分页

limit 中offset代表偏移到哪个位置,rows代表往下数多少个

pageNo, pageSize 1,5 2,5 3,5

limit (pageNo-1)*pageSize ,pageSize

pageNo limit

1 0,5

2 5,5

3 10,5

分页常见的问题:

  1. 封装一个分页需要哪些信息
  2. 分页需要发送哪两条sql语句
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
}

 

UserServlet.selectByPage
com.mysql.cj.jdbc.ClientPreparedStatement: select id,name,password from users limit 0,5
com.mysql.cj.jdbc.ClientPreparedStatement: select count(*) from users
PageInfo{list=[User{id=1, name='lisi', password='123'}, User{id=2, name='wangwu', password='123'}, User{id=3, name='dshfi', password='123'}, User{id=4, name='hweiohwi', password='12'}, User{id=5, name='12ih', password='23'}], totalPage=3, pageNo=1, pageSize=5}
UserServlet.selectByPage
com.mysql.cj.jdbc.ClientPreparedStatement: select id,name,password from users limit 5,5
com.mysql.cj.jdbc.ClientPreparedStatement: select count(*) from users
PageInfo{list=[User{id=6, name='23hih', password='hio'}, User{id=7, name='hidosfhi', password='23'}, User{id=8, name='dhfih', password='34'}, User{id=9, name='ihdsfoih', password='23423'}, User{id=10, name='hdifh', password='232'}], totalPage=3, pageNo=2, pageSize=5}
UserServlet.selectByPage
com.mysql.cj.jdbc.ClientPreparedStatement: select id,name,password from users limit 10,5
com.mysql.cj.jdbc.ClientPreparedStatement: select count(*) from users
PageInfo{list=[User{id=11, name='12hihi', password='iff'}, User{id=12, name='dhsfii', password='1212'}], totalPage=3, pageNo=3, pageSize=5}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值