1、什么是框架
框架是整个或者部分系统的可重用设计,表现为一组抽象的构件 以及 构件实例间的交互的方法。
另外一种定义认为,框架是可被应用开发者定制的应用骨架。
前者是从应用方面而后者是从目的方面给出的定义。
简而言之,框架就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单的说就是使用别人搭好的舞台,开始你的表演。而且,框架一般是成熟的,不断升级的软件。
他就是一套解决方案,不同的框架解决的是不同的问题。Mybatis——> 持久层 ,SpringMVC——>表像层
2、什么是三层架构
DAO层_数据访问层
Service层_服务层
Controller层_控制层
- 表现层——> 用于展示数据==> SpringMVC表现层框架
- 业务层——> 处理业务需求
- 持久层——> 完成持久化的工作 ——> 和数据库交互==> Mybatis持久层框架
- 持久化 就是将程序的数据在持久状态和瞬时状态转化的过程
- 内存:断电即失
- 持久化方式: 数据库(JDBC)持久化,<—— io文件的持久化
- 为什么要持久化
- 有一些对象,不能让他丢掉
- 内存太贵——价格高昂
3、持久层的解决方案
- JDBC技术
- Connection 连接
- PreparedStatement
- ResultSet
- Spring 的 Jdbc Template
- Spring中对jdbc 的简单封装
- Apache 的DBUtils
- 他和Spring 的Jdbc Template很像,也是对JDBC 的简单封装
以上都不是框架,JDBC是一种规范,Spring的 Jdbc Template 和 Apache 的DBUtils 都是工具类
- 他和Spring 的Jdbc Template很像,也是对JDBC 的简单封装
4、Mybatis 框架概述
Mybatis 是一个优秀的基于 Java 的持久层框架,它内部封装了 jdbc,是开发者只需要关注SQL语句本身,而不需要花费大量的精力 去处理加载驱动,创建连接,创建statement 等 繁杂的过程
mybatis 通过 XML 或者 注解 的方式将要执行的 各种statement 配置起来 ,并通过 java 对象 和 statement 中的SQL的动态参数进行映射 生成最终的执行的SQL 语句,最后由mybatis 框架执行SQL 并将结果映射为 java 对象并返回。
采用 ORM 思想 解决了实体 和数据库 映射 的问题,实现了对结果级的封装 ,对jdbc 进行了封装,屏蔽了 jdbc api 底层的访问细节,使我们不用 与 JDBC API 打交道,就可以完成对数据库的持久化操作。
ORM : `Object Relational Mappging 对象关系映射
简单的说就是把数据库表 和实体类 以及 实体类的属性 对应起来,让我们可以通过操作实体类来实现操作数据库表
实体类中的属性 和 数据库表 的字段名称保持一致。当然后期也可以 不需要 使实体类中的属性 和 数据库表 的字段 保持一致,需要借助
(1)SQL中起别名的方式 (2)结果集映射ResultMap
5、Mybatis入门
环境搭建_——> 导入 mybatis ——> 编写代码 ——> 测试 —— > 工具类 ——> 配置文件 ——> 实体类 ——> 接口 —— > Mapper.xml ——> 测试类 ——> Meven 解决资源导出问题
新建项目
文档结构
pom.xml 中导入mybatis依赖
<?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>org.example</groupId>
<artifactId>day_lswMybatis</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- 父工程-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!-- 导入依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-reflect</artifactId>
<version>2.13.3</version>
</dependency>
</dependencies>
<properties>
<!-- 设置默认编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
mybatis-config.xml 文件约束
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--核心配置文件-->
<configuration>
<!-- 引入外部配置文件 -->
<properties resource="db.properties"/>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--配置连接数据库的基本信息-->
<property name="driver" value="${driver}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
</dataSource>
</environment>
</environments>
<!-- 每一个Mapper.xml 都需要在mybatis 核心配置文件中注册 -->
<mappers>
<mapper class="com.lsw.dao.UserDao" />
</mappers>
</configuration>
db.properties文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/eesy_mybaits?useSSL=true&useUnicode=true&characterEncoding=UTF-8"
username=root
password=root
编写工具类
创建工厂,方便复用sqlSessionFactory
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
实体类
public class User {
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
private int id;
private String name;
private String pwd;
}
UserDao接口
public interface UserDao {
List<User> getListUser();
}
Mapper 数据映射文件
实现POJO与SQL之间的映射关系
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--核心配置文件-->
<mapper namespace="com.lsw.dao.UserDao">
<select id="getListUser" resultType="com.lsw.pojo.User">
select * from user;
</select>
</mapper>
测试类
public class Test {
@org.junit.Test
public void getUserById(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> user = mapper.getListUser();
for(User u : user){
System.out.println(u);
}
//关闭工厂
sqlSession.close();
}
}