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:看代码
posted @ 2020-02-10 21:11  sweetbetter  阅读(142)  评论(0)    收藏  举报