当前位置: 首页 > 图灵资讯 > 技术篇> 跟老杜从零学MyBatis框架【一】MyBatis概述

跟老杜从零学MyBatis框架【一】MyBatis概述

来源:图灵教育
时间:2023-05-17 11:36:46

掌握MyBatiss系统

课程讲解从Mybatis的一些核心点和实战中的应用过渡到Mybatis的源代码,从表到内的代入架构思维。一步一步的案例,一码一练,学,嘴对嘴指导。从简单到深入,从实战到源代码,Mybatis的重点、难点和考点都被抓住了。

学习地址

1.MyBatis概述1.1 框架
  • 在文献中看到的framework被翻译成框架
  • Java常用框架:
  • SSM三大框架:Spring + SpringMVC + MyBatis
  • SpringBoot
  • SpringCloud
  • 等。。
  • 框架实际上是包装一般代码,提前写了一堆接口和类别,我们可以直接引入这些接口和类别(引入框架),基于这些现有的接口和类别开发,可以大大提高开发效率。
  • 框架通常以jar包的形式存在。(jar包中有class文件和各种配置文件。)
  • SSM三大框架的学习顺序:MyBatis、Spring、SpringMVC(只是建议)
1.2 三层架构

跟老杜从零学MyBatis框架【一】MyBatis概述_mybatis

  • 表现层(UI):直接与前端交互(一是接收前端ajax请求,二是将json数据返回前端)
  • 业务逻辑层(BLL):一是处理表现层转发的前端请求(即具体业务),二是将从持久层获取的数据返回表现层。
  • 数据访问层(DAL):CRUD直接操作数据库,并将获得的数据返回到上一层(即业务逻辑层)。
  • Java持久层框架:
  • MyBatis
  • Hibernate(JPA规范已经实现)
  • jOOQ
  • Guzz
  • Spring Data(JPA规范已经实现)
  • ActiveJDBC
  • ...
1.3 JDBC不足
  • 示例代码1:

 

// ...// sql语句写死在java程序String中 sql = "insert into t_user(id,idCard,username,password,birth,gender,email,city,street,zipcode,phone,grade) values(?,?,?,?,?,?,?,?,?,?,?,?)";PreparedStatement ps = conn.prepareStatement(sql);// 繁琐的赋值:想想这种规律的代码是否可以通过反射机制自动化。ps.setString(1, "1");ps.setString(2, "123456789");ps.setString(3, "zhangsan");ps.setString(4, "123456");ps.setString(5, "1980-10-11");ps.setString(6, "男");ps.setString(7, "zhangsan@126.com");ps.setString(8, "北京");ps.setString(9, "大兴区凉水河二街";ps.setString(10, "1000000");ps.setString(11, "16398574152");ps.setString(12, "A");// 执行SQLint count = ps.executeUpdate();// ...

 

  • 示例代码2:

 

// ...// sql语句写死在java程序String中 sql = "select id,idCard,username,password,birth,gender,email,city,street,zipcode,phone,grade from t_user";PreparedStatement ps = conn.prepareStatement(sql);ResultSet rs = ps.executeQuery();List<User> userList = new ArrayList<>();// 思考下面循环中的所有代码是否可以通过反射自动包装。while(rs.next()){    // 获取数据    String id = rs.getString("id");    String idCard = rs.getString("idCard");    String username = rs.getString("username");    String password = rs.getString("password");    String birth = rs.getString("birth");    String gender = rs.getString("gender");    String email = rs.getString("email");    String city = rs.getString("city");    String street = rs.getString("street");    String zipcode = rs.getString("zipcode");    String phone = rs.getString("phone");    String grade = rs.getString("grade");    // 创建对象    User user = new User();    // 赋值对象属性    user.setId(id);    user.setIdCard(idCard);    user.setUsername(username);    user.setPassword(password);    user.setBirth(birth);    user.setGender(gender);    user.setEmail(email);    user.setCity(city);    user.setStreet(street);    user.setZipcode(zipcode);    user.setPhone(phone);    user.setGrade(grade);    // 添加到集合    userList.add(user);}// ...

 

  • JDBC不足:
  • Java程序中写的SQL语句不灵活。如果你改变SQL,你必须改变Java代码。OCP违反开闭原则。
  • 传值繁琐。能自动化吗???
  • 把结果集包装成Java对象很麻烦。能自动化吗???
1.4 了解MyBatis
  • MyBatis本质上是JDBC的封装,CRUD是通过MyBatis完成的。
  • MyBatis负责三层架构中的持久层,属于持久层框架。
  • 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代码可以看到它的包结构包含:ibatis
  • ORM:对象关系映射
  • O(Object):Java虚拟机Java对象
  • R(Relational):关系数据库
  • M(Mapping):将Java虚拟机中的Java对象映射到数据库表中的一行记录,或将数据库表中的一行记录映射到Java虚拟机中的Java对象。
  • ORM图示
  • MyBatis属于半自动ORM框架。
  • Hibernate属于全自动ORM框架。
  • MyBatis框架特点:
  • 支持定制化 SQL、存储过程、基本映射和高级映射
  • 几乎所有的东西都被避免了 JDBC 手动设置参数并获取代码中的结果集
  • 支持XML开发和注释式开发。【为了保证SQL语句的灵活性,mybatis大多采用XML开发。】
  • 将接口和 Java 的 POJOs(Plain Ordinary Java Object,简单普通的Java对象)映射成数据库中的记录
  • 体积小,好学:两个jar包,两个XML配置文件。
  • 完全实现sql解耦合。
  • 提供基本的映射标签。
  • 提供高级映射标签。
  • 提供XML标签,支持动态SQL的编写。
  • ...