欢迎关注头条号:Java小野猫
架构分析
- Configuration类:
- 得到数据源对象
- 加载其它的实体类映射文件:UserMapper.xml,使用DOM4J
- Mapper类只是一个实体类:POJO,用来封装数据
- SqlSession类:
- 生成了UserMapper接口的代理对象,JDK代理。
- 访问数据库:JDBC
- 封装查询的结果集,使用反射
使用到的技术
添加所需的所有依赖,做好准备工作。
pom.xml文件
pox.xml
自定义mybatis:Mapper封装数据类
分析映射配置:UserMapper.xml
步骤
- 创建包com.it.mybatis
- 创建实体类:Mapper包含4个属性:namespace,id,resultType,sql
- 重写toString()方法,方便后期测试看到封装的结果
- 生成get和set方法
- 一个Mapper对象代表一条要操作的查询语句对象
代码
Mapper
自定义mybatis:设计Configuration的基本属性
- 设计Configuration的基本属性
- 产生get和set方法
- 产生toString()方法
分析
sqlMapConfig.xml文件
- 创建loadSqlMapConfig()方法,它的作用:
- 解析sqlMapConfig.xml配置文件,给Configuration中的属性赋值
- 解析UserMapper.xml配置文件,给Mapper中的属性赋值
- 在构造方法中调用方法: loadSqlMapConfig()
- 作用:使用dom4j解析sqlMapConfig.xml文件,给数据库有关的属性赋值
- 从类路径加载/sqlMapConfig.xml配置文件,创建输入流
- 使用dom4j得到文档对象
- 使用XPath读取所有property元素
- 遍历每个property元素,读取它的name和value属性值
- 判断name的字符串,如果与类中的属性名相同,则赋值到相应属性中
4.Configuration解析实体类映射文件
解析UserMapper.xml并且封装到Mapper类中
- 创建新的方法loadMapper(Document document),将当前的文档对象传递给方法
- 读取<mapper>中的resource属性值
- 通过resource读取它对应的XML文件
- 得到namespace,id,resultType,sql的值,封装成Mapper对象
- 在loadSqlMapConfig()中调用此方法
loadMapper(Document document)方法开发步骤
作用:进一步解析其它的XML文件,给mappers属性赋值
- 读取mapper中的resource属性值
- 使用XPath读取所有mapper元素
- 遍历每个mapper元素
- 读取mapper的resource属性值
- 通过resource读取它对应的XML文件,得到namespace,id,resultType,sql的值
- 使用类对象,读取输入流下面resource,注:要加上/
- 创建文档对象
- 读取根元素mapper
- 读取namespace属性
- 读取根元素下的一个select标签
- 得到id,resultType,sql内容
- 封装成Mapper对象
- 创建一个自定义的Mapper对象,封装上面三个属性
- 再封装namespace属性
- 将封装好的mapper对象添加到this的mappers属性中,其中键是namespace+"."+id,值是自定义的mapper对象。
代码
Configuration
核心组件SqlSession:编写getMapper方法
步骤
得到SQL语句和返回类型
- 得到Configuration中Map集合
- 实例化Configuration对象
- 通过Configuration得到Mapper对象的集合
- 得到Map中的键:类全名.方法名
- 通过方法对象->得到声明的接口->得到名称:即类全名 com.it.dao.UserMapper
- 获取当前执行的方法名称:findAllUsers
- 通过类全名+方法名得到键
- 得到Mapper中相应的属性
- 通过类全名+"."+方法名,从mappers中得到映射的mapper对象
- 从mapper中获取查询的sql语句
- 从mapper中获取返回值类型resultType
- 通过反射将上面的resultType字符串转成类对象,供后面的方法使用
得到Connection对象访问数据库
- 通过Configuration得到数据源,通过数据源得到连接对象
- 调用List queryForList(Connection connection, String sql, Class clazz)方法
- 参数:连接对象,SQL语句,结果集的类型。 直接创建一个List集合,添加3个User对象到集合中,暂时不访问数据库。
- 返回封装好的集合
私信头条号,发送:“资料”,获取更多“秘制” 精品学习资料
如有收获,请帮忙转发,您的鼓励是作者最大的动力,谢谢!