1. 三层架构

  1. 界面层: 和用户打交道的, 接收用户的请求参数, 显示处理结果的。(jsp html servlet)<br /> 业务逻辑层: 接收了界面层传递的数据,计算逻辑,调用数据库,获取数据<br /> 数据访问层: 就是访问数据库, 执行对数据的查询,修改,删除等等的。<br /> ps:界面层又称表示层、视图层)

1)三层对应的包

  1. 界面层: controller servlet)<br /> 业务逻辑层: service 包(XXXService类)<br /> 数据访问层: dao包(XXXDao类)<br />

2)三层中类的交互

  1. 用户使用界面层--> 业务逻辑层--->数据访问层(持久层)-->数据库(mysql)<br /> ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21675987/1633738781544-266cfdf3-8419-45d0-ab1f-67361deba7d7.png#clientId=ua383b6af-7f86-4&from=paste&height=79&id=u593a87cd&margin=%5Bobject%20Object%5D&name=image.png&originHeight=92&originWidth=650&originalType=binary&ratio=1&size=25167&status=done&style=none&taskId=u40bff44a-1a2c-4ad9-9282-6e64be6bfe1&width=560)<br />

3)三层对应的处理框架

  1. 界面层---servlet---springmvc(框架)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/21675987/1633739116990-87439649-66ae-48d9-9286-2ff2422f2445.png#clientId=ua383b6af-7f86-4&from=paste&height=147&id=u7aa9d5c8&margin=%5Bobject%20Object%5D&name=image.png&originHeight=163&originWidth=800&originalType=binary&ratio=1&size=59732&status=done&style=none&taskId=u81551ef0-4111-4e4e-9d60-3f9e263c56e&width=721)<br /> 业务逻辑层---service类--spring(框架)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/21675987/1633739093086-0cfa4491-f66f-4ff1-97dd-42836fab4cf7.png#clientId=ua383b6af-7f86-4&from=paste&height=136&id=u23634ca7&margin=%5Bobject%20Object%5D&name=image.png&originHeight=152&originWidth=808&originalType=binary&ratio=1&size=47163&status=done&style=none&taskId=u831ceca4-6dfa-4c6e-855d-0041eb9b77d&width=723.991455078125)<br /> 数据访问层---dao类--mybatis(框架)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/21675987/1633739060419-52dd89c1-8c1f-4011-a10c-fb50ab496aac.png#clientId=ua383b6af-7f86-4&from=paste&height=154&id=ua57d8365&margin=%5Bobject%20Object%5D&name=image.png&originHeight=169&originWidth=800&originalType=binary&ratio=1&size=59892&status=done&style=none&taskId=u500d3d11-4644-4332-a43c-1a6a68a0b9c&width=726.991455078125)

4)为什么要使用三层

  • 结构清晰、耦合度低, 各层分工明确
  • 可维护性高,可扩展性高
  • 有利于标准化
  • 开发人员可以只关注整个结构中的其中某一层的功能实现
  • 有利于各层逻辑的复用

2、框架

1)什么是框架

  1. 框架其实是半成品软件,就是一组组件,供你使用完成你自己的系统。框架是一个舞台, 一个模版。
模版 框架是一个模块

- 规定了好一些条款,内容。
- 加入自己的东西

- 框架中定义好了一些功能。这些功能是可用的。
- 可以加入项目中自己的功能, 这些功能可以利用框架中写好的功能。
  • 框架是一个软件,半成品的软件,定义好了一些基础功能, 需要加入你的功能就是完整的。
  • 基础功能是可重复使用的,可升级的。

    2) 框架特点

    1. 框架一般不是全能的, 不能做所有事情
      2. 框架是针对某一个领域有效。 特长在某一个方面,比如mybatis做数据库操作强,但是他不能做其它的。
      3. 框架是一个软件

      3)JDBC回顾

      image.pngimage.png
      使用 JDBC 的缺陷
  • 代码比较多,开发效率低

  • 需要关注 Connection ,Statement, ResultSet 对象创建和销毁
  • 对 ResultSet 查询的结果,需要自己封装为 List
  • 重复的代码比较多些
  • 业务代码和数据库的操作混在一起

    4)mybatis框架

    image.png
    mybatis是 MyBatis SQL Mapper Framework for Java (sql映射框架)
    1)sql mapper :sql映射
    可以把数据库表中的一行数据 映射为 一个java对象。
    一行数据可以看做是一个java对象。操作这个对象,就相当于操作表中的数据
    2) Data Access Objects(DAOs) : 数据访问 , 对数据库执行增删改查。

    3)mybatis提供了哪些功能:
    1. 提供了创建Connection ,Statement, ResultSet的能力 ,不用开发人员创建这些对象了
    2. 提供了执行sql语句的能力, 不用你执行sql
    3. 提供了循环sql, 把sql的结果转为java对象, List集合的能力

    1. while (rs.next()) {
    2. Student stu = new Student();
    3. stu.setId(rs.getInt("id"));
    4. stu.setName(rs.getString("name"));
    5. stu.setAge(rs.getInt("age"));
    6. //从数据库取出数据转为 Student 对象,封装到 List 集合
    7. stuList.add(stu);
    8. }

    4.提供了关闭资源的能力,不用你关闭Connection, Statement, ResultSet

    开发人员做的是: 提供sql语句
    最后是: 开发人员提供sql语句—mybatis处理sql—-开发人员得到List集合或java对象(表中的数据)

    总结:
    mybatis是一个sql映射框架,提供的数据库的操作能力。增强的JDBC,
    使用mybatis让开发人员集中精神写sql就可以了,不必关心Connection,Statement,ResultSet
    的创建,销毁,sql的执行。