参考资料
Demo获取
Gitee:https://gitee.com/ccuni/mybatis-learn-quick-get-start
运行环境
- windows10
- jdk8
- IDEA 2021.6 专业版
- mysql 5.7
- log4j 1.2.17
- lombok 1.18.22
- mybatis3.5.0
- junit 4.13.2
学习目标
- 理解数据持久化的概念和ORM原理
- 理解MyBatis的概念以及优点特性
- 搭建MyBatis环境
- 了解MyBatis与JDBC的区别与联系
- 理解核心类的作用域和生命周期
- 掌握全局配置文件结构内容
一、框架式开发
1.1 传统开发与框架开发
传统Web项目(Servlet+JSP+JDBC)缺点
-
DAO层:JDBC操作繁琐、冗长
-
Action层:每一个请求要一个Servlet(或者一个Servlet内嵌 if … else 语句)需要手动处理请求、转发等
-
整个项目耦合度高(action与service、service与dao)、缺乏统一管理
解决办法:框架
特点:
优势
- 不用考虑公共、细节问题
- 专心在业务实现上
- 结构统一,易于维护
- 新手易上手
劣势
- 必须遵守框架约定
- 用精准需要研读底层源码
- 技术更新、淘汰快
1.2 web后端框架
主流框架一 Struct + JPA
Struts
- MVC设计模式的实现
- 拦截器
- 可变可重用的标签
JPA
- ORM,简化数据库操作
- DAO层
主流框架二 SSM
Spring
- 依赖注入容器 / AOP实现
- 声明式事务
- 简化 Java EE 应用
- 粘合剂,将许多部分组装到一起
Spring MVC (action层)
- 结构最清晰的MVC Model2实现
- 高度可配置,支持多种视图技术
- 定制化开发
MyBatis
- 半自动化的ORM实现
- DAO层
- 动态SQL
1.3 web后端框架开发区别总结
- Servlet 用
SpringMVC
替代(控制层) - JDBC 用
MyBatis
替代(数据库层) - 整个项目缺乏管理 VS 用
Spring
管理 - Jar 包和项目构建用
Maven
管理 SpringBoot
敏捷开发
相关概念:
-
持久化是程序结构在瞬时状态和持久状态间转化的过程
-
ORM,全称Object Relational Mapping,即对象关系映射,是一种程序设计技术,用于实现面向对象编程里不同类型的数据之间的转换。
1.4 MyBatis 框架优缺点
优点
- 与JDBC相比,减少了50%以上的代码量
- 最简单的持久化框架,小巧并简单易学
- SQL代码从程序代码中彻底分离,可重用
- 提供XML标签,支持编写动态SQL
- 提供映射标签,支持对象与数据库的ORM字段映射
缺点
- SQL语句编写工作量大,对开发人员有一定要求
- 数据库移值性差
二、搭建 MyBatis 开发环境
使用 MyBatis的开发步骤
- 创建 Maven项目,导入 MyBatis依赖
- 编写MyBatis核心配置文件
configuration.xml
- 创建实体类 - POJO(自动生成)
- DAO层-接口 + 对应的SQL映射文件(mapper.xml)
- 创建测试类
- 读取核心配置文件 MyBatis - config.xml
- 创建SqlSessionFactory对象,读取配置文件
- 创建SqlSession对象
- 调用mapper文件进行数据操作
2.1 创建 Maven 项目导入所需依赖
项目结构
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.uni</groupId>
<artifactId>MyBatisFastUse</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- Mysql 连接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<!-- 日志管理 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- lombok 自动生成无参、有参构造、get、set方法-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.0</version>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!-- 指定 Maven 项目编译 java 下的 xxxxMapper.xml -->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>