一、MyBatis简介
01、使用JDBC编程
JDBC操作数据库的流程:
(1)主备数据库连接参数
(2)连接数据库
(3)编译SQL
(4)设计SQL参数
(5)执行SQL获取结果
(6)遍历结果集,封装数据到JavaBean
(7)关闭资源
使用JDBC的缺陷
1.代码比较多,开发效率低
2.需要关注Connection,Statement,ResultSet对象创建和销毁
3.对ResultSet查询的结果,需要自己封装为List
4.重复的代码比较多些
5.业务代码和数据库的操作混在一起
我们需要如何简化操作?
- 减少重复代码
- 松开Java代码与配置间的耦合
- 避免频繁打开和创建数据库链接,杜绝资源浪费
- 自动化工作
MyBatis框架为我们提供了解决思路
- 将配置丢入XML文件,与业务代码分离
- 通过配置文件白那些SQL,我们仅需要关注SQL语句,其余重复繁琐操作由框架代劳。
- 通过数据库连接池的使用减少资源开销
02、MyBatis历史
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
MyBatis是半自动的ORM框架。
半自动:Mybatis将 SQL的定义工作独立出来,让用户自定义,而 SQL的解析,执行等大量工作交由 Mybatis处理执行。
ORM:Object Relational Mapping——对象关系映射,是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。ORM框架提供了实体类与数据表的映射关系,通过映射文件的配置,实现对象的持久化。
03、MyBatis特性
-
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
-
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
-
MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录
-
MyBatis 是一个 半自动的ORM(Object Relation Mapping)框架
04、MyBatis下载
05、和其他持久层技术对比
JDBC:
•SQL 夹杂在Java代码中耦合度高
•代码重复度高,冗余且效率低下
•维护不易且实际开发需求中 SQL 有变化,频繁修改的情况多见
Hibernate:
•操作简便,开发效率高
•全自动框架导致灵活性低下,导致复杂SQL处理需绕开框架,且大量字段的 POJO 进行部分映射时比较困难
•反射操作多,数据库性能下降
MyBatis:
•轻量级,性能出色
•SQL 和 Java 编码分开,功能边界清晰。Java代码专注业务、SQL语句专注数据
•开发效率稍逊于HIbernate,但是完全能够接受
二、搭建MyBatis环境
01、开发环境及所需jar包
MyBatis所需环境:
Eclipse
MySQL版本:MySQL 8
MyBatis版本:MyBatis 3.5.8
将MyBatis安装包解压,得到如图目录:
其余开发中使用的jar包:
用于单元测试的jar包,其中junit依赖hamcrest-core包,而hamcrest-library包为hamcrest-core包做补充。
mysql8驱动包
mybatis包所依赖的包
02、创建工程并导入jar包
第一步:创建JavaWeb工程
第二步:导入jar包
选中所有jar包右键-build path...-add to Build Path
03、创建MyBatis核心配置文件
第一步:新建与src平级的文件夹resource,用来存放配置文件
第二步:新建mybatis-config.xml文件(文件名可自定义,大部分命名为:mybatis-config)
04、创建log4j配置文件
第一步:在resources目录下创建名为 log4j.properties文件
第二步:在 log4j.properties文件配置日志输出的方式
# 声明日志的输出级别及输出方式
log4j.rootLogger=DEBUG,stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# 定义日志的打印格式 %t 表示线程名称 %5p 日志级别 %msg日志信息
log4j.appender.stdout.layout.ConversionPattern=[%t] %5p - %msg \:%m%n
三、第一个MyBatis程序
01、案例背景
02、案例实施