Mybatis-01入门及原理
第一章:框架概述
1.1 什么是框架?
框架是整个或部分系统的可重用设计。简单的说,就是某种应用的半成品,在此基础上写自己的系统。
1.2 Mybatis
分层开发下的框架,是持久层框架。
mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,**使开发者只需要关注sql语句本身**,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。
Mybatis通过xml或者注解的方式将要执行的statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后mybatis框架执行sql并将结果映射为java对象并返回。
采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽jdbc api底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作。
[官方地址](http://mybatis.org/)
ORM:
Object Relatioal Mappging 对象关系映射,就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就可以实现操作数据库表。
[ORM资料](https://blog.csdn.net/songyuxinit/article/details/81331339)
[ORM资料](https://blog.csdn.net/cillyb/article/details/79464374)
第二章:Mybatis入门案例
2.1 入门案例
2.1.0 Maven工程引入坐标
<?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.itheima</groupId>
<artifactId>day01_eesy_01mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
<dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>[maven scope详解](https://blog.csdn.net/kimylrong/article/details/50353161)
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
</dependencies>
</project>
2.1.2 编写实体类 如:User
2.1.3 编写持久层接口 IUserDao
2.1.4 编写持久层接口的映射文件 IUserDao.xml
要求:必需与持久层接口再相同的包中,与持久层接口名称相同。[详解](https://blog.csdn.net/zyxwvuuvwxyz/article/details/80167312)

PS:该要求非必须,此处是为了Mybatis的自动扫描。
配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.dao.IUserDao">
<!--配置查询所有-->
<select id="findAll" resultType="com.itheima.domain.User">
select * from user
</select>
</mapper>
2.1.5 编写SqlMapConfig.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">
<!-- mybatis的主配置文件 -->
<configuration>
<!-- 配置环境 -->
<environments default="mysql">
<!-- 配置mysql的环境-->
<environment id="mysql">
<!-- 配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源(连接池) -->
<dataSource type="POOLED">
<!-- 配置连接数据库的4个基本信息 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<mapper resource="com/itheima/dao/IUserDao.xml"/>
</mappers>
</configuration>
2.1.6 测试
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for(User user : users){
System.out.println(user);
}
//6.释放资源
session.close();
in.close();
第三章 自定义Mybatis
本周目标:
简单理解Mybatis内部如何执行的,理解他的设计理念。
设计知识:
工厂模式,构建者模式,代理模式,反射,自定义注解,注解的反射,xml解析,数据库元数据等。
3.1 流程分析

3.1.2 分析
1. 获取总的配置文件就可以创建Connextion对象和映射配置文件的信息
2. 解析映射配置文件 就有了要执行的sql语句,以及封装的结果集的全限定类名
3.定义一个Map集合,key是全限定类名+方法名的一个唯一标识,value是Mapper对象,属性有封装的结果集的ClassPath和sql语句。
4.封装的结果集用到了反射
问题:怎么知道执行的是selectList方法。到时候分析一下源码看看。
3.1.2 详情

utils.Excutor:看完反射
default.DefaultSqlSession:动态代理
ps:看代码

浙公网安备 33010602011771号