MyBatis学习(一) --------- 框架概述


一、软件开发常用结构

1. 三层架构

三层架构 :

  • 界面层 : User Interface Layer,也叫做表示层、视图层。主要功能是接受用户的数据,显示请求的处理结果。使用 web 页面和用户交互,手机 app 也就是表示层的,用户在 app 中操作,业务逻辑在服务器端处理。
  • 业务逻辑层:Business Logic Layer,接收表示传递过来的数据,检查数据,计算业务逻辑,调用数据访问层获取数据。
  • 数据访问层:Data access layer,与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。

三层的处理请求的交互:

用户 ----> 界面 ----> 业务逻辑层 ----> 数据访问层 ----> DB数据库

为什么要使用三层 ?

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

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的缺陷

  1. 代码比较多,开发效率低
  2. 需要关注 Connection,Statement, ResultSet 对象创建和销毁
  3. 对 ResultSet 查询的结果,需要自己封装为List
  4. 重复的代码比较多
  5. 业务代码和数据库操作混在一起

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()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在森林中麋了鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值