第一部分:MyBatis初识
第1章.代理模式:
1.1.代理模式说明:
a.概念:
- 1.代理
就是帮别人做事情
,比如工厂的中介,中介负责为工厂招收工人,那么中介就是工厂的代理
;客户通过商家购买东西,商家向厂家购买货物,商家就是工厂的代理
- 2.在开发中
存在a类需要调用c类的方法,完成某一个功能,但是c禁止a调用。这时,可以在a和c之间创建一个b类代理,a类访问b类,b类访问c类。例如:登录的时候需要进行短信验证,这个时候代理就是中国移动的子公司来完成短信的发送功能
- 3.
代理模式就是为其他对象提供一种代理来控制这个对象的访问,在某些情况下一个对象不适合或不能直接引用另一个对象,而代理对象可以在客户类和目标对象直接起到中介的作用
- 4.功能增强:其中
目标对象实现真正的功能
,但是代理对象可以对目标对象的功能做进一步的扩充
b.代理模式的作用:
- 1.功能增强:在
原有的功能上增加额外的功能
- 2.控制访问:
代理类不让你访问目标类
c.代理模式的分类:
- 1.静态代理
- 2.动态代理
- Jdk动态代理
- CGLib动态代理(子类代理)
d.静态代理:
d1.静态代理的特点
- 1.目标对象和代理对象必须实现同一个接口;
- 2.目标对象必须实现接口;
- 3.代理对象在程序运行前就必须已经存在;
- 4.可以灵活的进行目标对象的切换,但是不可以灵活的进行功能的处理;
d2.举例说明静态代理实现:
1.2.三层架构:
a.三层架构介绍:
- 1.三层架构:
界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)
- 2.三层的职责:
界面层(表示层,视图层)
- :主要功能是接受用户的数据,显示请求的处理结果。使用 web 页面和用户交互,手机 app 也就是表示层的,用户在 app 中操作,业务逻辑在服务器端处理。
业务逻辑层
:接收表示传递过来的数据,检查数据,计算业务逻辑
,调用数据访问层获取数据。
数据访问层
:- 与数据库打交道。实现对数据的增、删、改、查。
将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库.
- 与数据库打交道。实现对数据的增、删、改、查。
b.三层对应的包
- 1.界面层:controller包(servlet)
- 2.业务逻辑层:service包(XXXService类)
- 3.数据访问层:dao包(XXXDao类)
c.为什么要使用三层?
- .结构清晰、耦合度低, 各层分工明确
- 可维护性高,可扩展性高
- 有利于标准化
- 开发人员可以只关注整个结构中的其中某一层的功能实现
- 有利于各层逻辑的复用
d.三层类中的交互
- 1.用户使用
界面层→业务逻辑层→数据访问层(持久层)→数据库(mysql)
e.三层对应的处理框架
- 1.界面层–servlet–
springmvc
(框架) - 2.业务逻辑层–service类–
spring
(框架) - 3.数据访问层–dao类–
mybatis
(框架)
1.3.常用框架:
a.MyBatis 框架:
- 1.MyBatis 是一个优秀的基于 java 的持久层框架,
内部封装了 jdbc,开发者只需要关注 sql 语句本身,而不需要处理加载驱动、创建连接、创建 statement、关闭连接,资源等繁杂的过程
; - 2.MyBatis
通过 xml 或注解
两种方式将要执行的各种 sql 语句配置起来,并通过 java 对象和 sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回;
b.Spring 框架:
- 1.Spring 框架为了解决软件开发的复杂性而创建的。Spring
使用的是基本的 JavaBean 来完成以前非常复杂的企业级开发
。Spring 解决了业务对象,功能模块之间的耦合,不仅在 javase,web 中使用, 大部分 Java 应用都可以从 Spring 中受益; - 2.Spring
是一个轻量级控制反转(IoC)和面向切面(AOP)的容器
;
c.SpringMVC 框架:
- 1.Spring MVC 属于 SpringFrameWork 3.0 版本加入的一个模块,
为 Spring 框架提供了构建 Web 应用程序的能力
。现在可以 Spring 框架提供的 SpringMVC 模块实现 web 应用开发,在 web 项目中可以无缝使用 Spring 和 Spring MVC 框架;
第2章.MyBatis:
2.1.JDBC编程:
a.JDBC操作流程
- 1.加载数据库驱动
- 2.通过驱动管理,获取数据库的连接
- 3.编写sql语句,使用?表示占位符
- 4.获取预处理statemennt,执行查询
- 5.设计传参
- 6.结果集处理
- 7.释放资源,关闭数据库连接
b.使用JDBC编程的回顾:
public void findStudent() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
//注册 mysql 驱动
Class.forName("com.mysql.jdbc.Driver");
//连接数据的基本信息 url ,username,password
String url = "jdbc:mysql://localhost:3306/springdb";
String username = "root";
String pw = "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.lose();
if(pstm != null)
pstm.close();
if(con != null)
con.close();
}catch(Exception e){
e.printStackTrace();
}
}
b.使用JDBC的缺陷
- 1.代码比较多,开发效率低
- 2.需要关注 Connection ,Statement, ResultSet 对象创建和销毁
- 3.对 ResultSet 查询的结果,需要自己封装为 List
- 4.重复的代码比较多些
- 5.业务代码和数据库的操作混在一起,
SQL语句写死在Java程序中,不灵活。改SQL的话就要改Java代码。违背开闭原则OCP
2.2.MyBatis概述:
a.ORM介绍:
a1.什么是ORM框架思想:
- 1.所谓的ORM是Dao层的一种编写思想,意思就是
对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping)
; - 2.ORM就是把
数据库表和实体类及实体类的属性对应起来
,然后我们在操作实体类就是相当于在操作数据库表
- O就是Object:Java虚拟机中的Java对象
- Rj就是Relation:关系型数据库
- M就是Map:将Java虚拟机中的Java对象映射到数据库表中一行记录,或是将数据库表中一行记录映射成Java虚拟机中的一个Java对象。
a2.ORM图示:
a3.ORM思想主张:
- 保存时,
把java对象数据直接保存到关系型数据库对应的表中
。 - 读取时,直
接把关系型数据库表中的数据读成java对象
。
这样,程序开发者能更专注于业务的开发,能培养开发者的面向对象思想,体验java面向对象开发的便捷。
- 4.基于ORM思想的框架有:较流行的是:hibernate,mybatis,JPAS
b.MyBatis下载
a.MyBatis历史:
- 1.MyBatis最初是Apache的一个开源项目iBatis,后来iBatis3.x正式更名为MyBatis
- 2.是一个
基于Java的持久层框架
。MyBatis本质上就是对JDBC的封装,通过MyBatis完成CRUD。 - 3.iBATIS提供的持久层框架包括SQL Maps(sql映射)和Data Access Objects(DAOs)
b. MyBatis框架解决的主要问题
- 1.MyBatis
减轻使用 JDBC 的复杂性
,不用编写重复的创建 Connetion , Statement ; 不用编写关闭资源代码。直接使用 java 对象,表示结果数据
。让开发者专注 SQL的处理
。 其他分心的工作由 MyBatis 代劳。 - 2.MyBatis 可以完成:
- 注册数据库的驱动,例如 Class.forName(“com.mysql.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() , Conenection.close()
c.MyBatis框架的结构:
- 1.mybatis配置:
SqlMapConfig.xml
,此文件作为mybatis的全局配置文件
,配置了mybatis的运行环境
等信息。mapper.xml
文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载
。
- 2.通过mybatis环境等配置信息
构造SqlSessionFactory即会话工厂
- 3.由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
- 4.
mybatis底层自定义了Executor执行器接口操作数据库
,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。 - 5.
Mapped Statement
也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id
。 - 6.
Mapped Statement
对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。 - 7.Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
d.MyBatis优点:
- 1.MyBatis 是
支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
- 2.MyBatis
避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
- 3.MyBatis可以用简单的XML或注解用于配置和原始映射【为了保证sql语句的灵活,所以mybatis大部分是采用XML方式开发。】
- 4.
将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录
- 5.体积小好学:两个jar包,两个XML配置文件
- 6.完全做到sql解耦合。
- 7.提供了基本映射标签。
- 8.提供了高级映射标签。
- 9.提供了XML标签,支持动态SQL的编写
…
2.3.和其它持久化层技术对比
a.持久层技术解决方案:
- 1.jdbc
- 2.DBUtils
- 3.JdbcTemplate(Spring5中有具体的讲解使用)
- 4.mybatis
b.Appache的DBUtils与Spring中的JdbcTemplate
- 1.DBUtils它和Spring中的JdbcTemplate很像,是对Jdbc的简单封装
- 2.JdbcTemplate是对Jdbc的简单封装的
- 3.[说明]
以上这些都不是框架
,是一种JDBC是规范
;Spring中的JdbcTemplate
和Appache的DBUtils
都只是工具类
c.持久层解决方案特点对比
c1.传统jdbc工具介绍:
- 1.
JDBC -> Dbutils ->jdbcTemplate
;使用这些工具类,功能简单,sql语句是编写在了java代码里面,耦合度较高,而框架是一个整体的解决方案
,所以就诞生了很多框架。
c2.MyBatis特点:
- 1.mybatis 是一个优秀的持久层框架,是java编写的
- 2.mybatis
内部封装了 jdbc
,使开发者只需要关注 sql 语句本身
,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。 - 3.mybatis 通过
xml 或注解的
方式将要执行的各种 statement配置
起来,并通过 java 对象和 statement 中sql 的动态参数进行映射
生成最终执行的 sql 语句,最后由 mybatis框架执行 sql 并将结果映射为 java 对象并返回
。 - 4.采
用 ORM 思想解决了
实体类和数据库映射的问题,对jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节
,使我们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作 - 5.MyBatis主要着力
点在于 POJO 与 SQL 之间的映射关系
。然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定 POJO
d.什么是POJO
- 1.POJO(Plain Ordinary Java Object)就是简单的Java对象,实际就是普通JavaBeans,不包含业务逻辑或持久逻辑
- 2.POJO
有一些private的参数作
为对象的属性。然后针对每个参数定义了get和set方法作为访问的接口
e.几个ORM层框架的优缺点:
- 1.Hibernate特点:
- 长难复杂SQL,对于Hibernate而言处理也不容易
- 内部自动生产的SQL,不容易做特殊优化。
- 基于全映射的全自动框架,大量字段的POJO进行部分映射时比较困难。 导致数据库性能下降
- 2.MyBatis
- 轻量级,性能出色
- SQL 和 Java 编码分开,功能边界清晰。Java代码专注业务、SQL语句专注数据
- 开发效率稍逊于HIbernate,但是完全能够接受
Hibernate框架就是一个全自动化的ORM。使用Hibernate框架的时候,不需要程序员手动编写SQL语句,SQL语句可以自动生成。所以Hibernate是一个完全的全自动化的ORM框架。半自动步枪和全自动突击步枪,一个精度准火力不足,一个火力猛精度不够。
第2部分:MyBatis入门程序
本文含有隐藏内容,请 开通VIP 后查看