目录
- 一、软件开发常用结构
- 1. 三层架构
- 2. 常用框架
- 二、框架概述
- 1. 定义
- 2. 框架解决的问题
- 3. JDBC编程
- 4. 使用JDBC的缺陷
- 5. MyBatis 框架概述
- 三、MyBatis 解决的主要问题
一、软件开发常用结构
1. 三层架构
三层架构 :
- 界面层 : User Interface Layer,也叫做表示层、视图层。主要功能是接受用户的数据,显示请求的处理结果。使用 web 页面和用户交互,手机 app 也就是表示层的,用户在 app 中操作,业务逻辑在服务器端处理。
- 业务逻辑层:Business Logic Layer,接收表示传递过来的数据,检查数据,计算业务逻辑,调用数据访问层获取数据。
- 数据访问层:Data access layer,与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。
三层的处理请求的交互:
用户 ----> 界面 ----> 业务逻辑层 ----> 数据访问层 ----> DB数据库
为什么要使用三层 ?
- 结构清晰、耦合度低,各层分工明确
- 可维护性高,可拓展性高
- 有利于标准化
- 开发人员可以只关注整个结构中的其中某一层功能实现
- 有利于各层逻辑的复用
2. 常用框架
常见的 J2EE 中开发框架
- MyBatis 框架 :
MyBatis 是一个优秀的基于 Java 的持久层框架,内部封装了JDBC,开发者只需要关注 sql 语句本身,而不需要处理加载驱动、创建连接、创建 statement、关闭连接,资源等繁杂的过程。MyBatis 通过 xml 或注解两种方式将要执行的各种 sql 语句配置起来,并通过 Java 对象和 sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 MyBatis 框架执行 sql 并将结果映射为 Java 对象并返回。
- Spring 框架 :
Spring 框架为了解决软件开发的复杂性而创建的。Spring 使用的是基本的 JavaBean 来完成以前非常复杂的企业级开发。Spring 解决了业务对象,功能模块之间的耦合,不仅在 Java Web 中使用,大部分 Java 应用都可以从 Spring 中受益。Spring 是一个轻量级控制反转(loC)和面向切面(AOP)的容器。
- SpringMVC 框架
Spring MVC 属于 SpringFrameWork 3.0 版本加入的一个模块,为 Spring 框架提供了构建 Web应用程序的能力。现在可以 Spring 框架提供的 SpringMVC 模块实现 web 应用开发,在 web 项目中可以无缝使用 Spring 和 Spring MVC 框架。
二、框架概述
1. 定义
框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种认为,框架是可被应用开发者定制的应用骨架、模板。简单的说,框架其实是半成品软件,就是一组组件,供你使用完成你自己的系统。从另一个角度来,说框架一个舞台,你在舞台上做表演。在框架基础上加入你要完成的功能。框架安全的,可复用的,不断升级的软件。
2. 框架解决的问题
框架要解决的最重要的一个问题是技术整合,在 J2EE 的 框架中,有着各种各样的技术,不同的应用,系统使用不同的技术解决问题。需要从 J2EE 中选择不同的技术,而技术自身的复杂性,有导致更大的风险。企业在开发软件项目时,主要目的是解决业务问题。 即要求企业负责技术本身,又要求解决业务问题。这是大多数企业不能完成的。框架把相关的技术融合在一起,企业开发可以集中在业务领域方面。另一个方面可以提供开发的效率。
3. JDBC编程
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
//注册 mysql 驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//连接数据的基本信息 url ,username,password
String url = "jdbc:mysql://localhost:3306/MyDataBase";
String username = "root";
String password = "123456";
//创建连接对象
conn = DriverManager.getConnection(url, username, password);
//保存查询结果
List<Student> stuList = new ArrayList<>();
//创建 Statement, 用来执行 sql 语句
stmt = conn.createStatement();
//执行查询,创建记录集,
rs = stmt.executeQuery("select * from student");
while (rs.next()) {
Student stu = new Student();
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
stu.setAge(rs.getInt("age"));
//从数据库取出数据转为 Student 对象,封装到 List 集合
stuList.add(stu);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
//关闭资源
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
4. 使用JDBC的缺陷
- 代码比较多,开发效率低
- 需要关注 Connection,Statement, ResultSet 对象创建和销毁
- 对 ResultSet 查询的结果,需要自己封装为List
- 重复的代码比较多
- 业务代码和数据库操作混在一起
5. MyBatis 框架概述
MyBatis 本是 apache 的一个开源项目 iBatis, 2010 年这个项目由 apache software foundation 迁移到了 google code,并且改名为 MyBatis 。2013 年 11 月迁移到 Github。iBATIS 一词来源于 “Internet” 和 “abatis” 的组合,是一个基于 Java 的持久层框架。iBATIS 提供的持久层框架包括 SQL Maps 和 Data Access Objects(DAOs)
三、MyBatis 解决的主要问题
减轻使用 JDBC 的复杂性,不用编写重复的创建 Connetion , Statement ; 不用编写关闭资源代码。直接使用 java 对象,表示结果数据。让开发者专注 SQL 的处理。 其他分心的工作由MyBatis 代劳。
MyBatis 可以完成 :
- 注册数据库的驱动,例如
Class.forName("com.mysql.cj.jdbc.Driver")
- 创建 JDBC 中 必须使用的 Connection 、Statement 、ResultSet 对象
- 从 xml 中获取 sql ,并执行 sql 语句,把 ResultSet 结果转换为 Java 对象
List<Student> list = new ArrayLsit<>();
ResultSet rs = state.executeQuery(“select * from student”);
while(rs.next){
Student student = new Student();
student.setName(rs.getString(“name”));
student.setAge(rs.getInt(“age”));
list.add(student);
}
- 关闭资源
ResultSet.close(), Statement.close(), Connection.close()