Mybatis分析——自定义Mybatis


一、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,这个实现类中的方法可以取创建接口的代理对象

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值