文章目录
一、Mybatis入门
mybatis的环境搭建
第一步:创建maven工程并导入坐标
第二步:创建实体类和dao的接口
第三步:创建Mybatis的主配置文件
SqlMapConifg.xml
第四步:创建映射配置文件
IUserDao.xml
环境搭建的注意事项:
第一个:创建IUserDao.xml 和 IUserDao.java时名称是为了和我们之前的知识保持一致。
在Mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper
所以:IUserDao 和 IUserMapper是一样的
第二个:在idea中创建目录的时候,它和包是不一样的
包在创建时:com.itheima.dao它是三级结构
目录在创建时:com.itheima.dao是一级目录
第三个:mybatis的映射配置文件位置必须和dao接口的包结构相同
第四个:映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
第五个:映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名
当我们遵从了第三,四,五点之后,我们在开发中就无须再写dao的实现类。
mybatis的入门案例
第一步:读取配置文件
第二步:创建SqlSessionFactory工厂
第三步:创建SqlSession
第四步:创建Dao接口的代理对象
第五步:执行dao中的方法
第六步:释放资源
注意事项:
不要忘记在映射配置中告知mybatis要封装到哪个实体类中
配置的方式:指定实体类的全限定类名
mybatis基于注解的入门案例:
把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句
同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。
明确:
我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式。不管使用XML还是注解配置。但是Mybatis它是支持写dao实现类的。
二、自定义Mybatis的分析
mybatis在使用代理dao的方式实现增删改查时做什么事呢?
只有两件事:
第一:创建代理对象
第二:在代理对象中调用selectList
自定义mybatis能通过入门案例看到类
class Resources
class SqlSessionFactoryBuilder
interface SqlSessionFactory
interface SqlSession
1.创建类和接口
创建Resources类
根据本class文件的类加载器找到资源路径,并生成输入流
创建SqlSessionFactoryBuilder类
构建者模式:把对象的创建细节隐藏,使使用者直接调用方法即可拿到对象。
根据输入流创建工厂构建者对象 用于创建SqlSessionFactory对象
创建SqlSessionFactory接口
工厂模式:解耦 降低类之间的依赖关系
使用一个工厂来提供方法生产SqlSession
创建SqlSession接口
这个类可以创建dao接口的代理对象,在里面声明两个方法 getMapper方法和close方法。
2.基于解析XML的查询所有
工具类中
工具类通过一个配置的输入流加载资源,返回一个Configuration对象 其中封装了数据库连接信息(driver url userpassword)。因此需要自定义一个Configuration配置类
加载dao配置文件的细节
配置Configuration类
工具类解析主配置文件 在工具类中每条dao.xml的信息被打包为Mapper mapper是cfg的成员
下面为sqlmap主配置文件
在工具类中每条dao.xml的信息被打包为Mapper 因此需要提供一个配置类Mapper 封装sql与结果类型
针对于xml工具类进行分析,主要是读取xml文件配置信息 修改Configuration类 由于每个dao可能进行多条sql语句 因此
此时已经通过xml工具类加载完资源了
3.基于注解配置的查询所有
修改主配置文件,加载映射的方式修改为加载类
创建一个Select类,定义注解
修改dao接口
4.创建两个默认实现类并分析类之间的关系
创建SqlSessionFactory接口的实现类DefaultSqlSessionFactory
修改SqlSessionFactoryBuilder中的build方法,并返回SqlSessionFactory的实现类
创建SqlSession接口的实现类DefaultSqlSession 并且创建另外一个工具类DataSourceutils 用于创建数据源
修改DefaultSqlSesion类中的方法,其实就是动态代理 参数3就是方法增强及执行操作返回数据集
创建代理对象的工具类MapperProxy类实现代理对象中的方法,构造函数中需要结果集mappers 和数据库连接conn
因为Executor工具类需要这两个参数
执行方法是通过构建key(类名.方法名) 得到mappers中对应的值mapper 通过传入mapper
conn给工具类Executor中对应的方法输出
三、总结
读取配置文件用到了Resource这个类,返回流信息,交给SqlSessionFactoryBuilder构建一个工厂对象,构建了一个SqlSessionFactory(实现类DefaultSqlSessionFactory),通过这个实现类去获取SqlSession对象,这个时候又创建了一个SqlSession的实现类DefaultSqlSession,这个实现类中的方法可以取创建接口的代理对象