Mybatis框架复习随笔
Posted autism-dong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis框架复习随笔相关的知识,希望对你有一定的参考价值。
只是回想时的头脑风暴,具体配置需要查看官方文档,以下仅随意整理自己的思路,如有缺错请谅解
1.Mybatis是半自动化的ORM对象关系映射框架,省去了传统JDBC工作中繁琐的输入参数,输出结果与JavaPOJO类的手动映射,仅需在配置文件中进行配置,底层框架会通过读取xml文件,反射自动进行映射,实现功能
2.Mybatis配置流程(结合原理捋思路)回顾
配置文件中标签的使用导入约束文件,根据提示与标签语义进行配置,注意顺序
1>主配置文件中的配置:
<configuration>配置文件中的配置信息
<type aliases> 映射文件中输入输出映射不适用全限定类名,而对包中类起别名,默认不包含路径的类名为别名
<properties> 需要用到配置文件的配置(数据源jdbc四大信息的配置,使用${键名})
<settings><setting> 具体设置,诸如(延迟加载/缓存设置等)
<envirenment>工作环境
而mybatis中的工作环境包括 : 进行数据库交互-->数据源的配置-->数据库连接四要素(可通过配置properties配置文件实现灵活的存取)
事务的管理
除去主要的底层支持,就需要具体的sql语句,mapper的加载(将mapper.xml们加载到主配置文件,相关API只加载主配置文件即可)
<mappers><mappers>其中可以单个进行<mapper>配置, 也可以使用属性package一次性配置(但需要配置文件与接口在同一个包中)
2>mapper映射文件
使用动态代理生成DAO接口的实现类时,mapper的namespace与接口的全限定类名一致,而具体statement的id与接口中的方法名一致
OGNL 对象图导航语言
输入映射-->sql语句中#{a}中参数a对应于Java传入的参数,会将传入的Java对象转换为只有一个整体而内部封装多个信息的对象或Map
对于实际POJO对象 #{}中a是属性名
对于单个基本数据类型,#{}可任意取名字
对于多个参数,默认将这多个参数封装成一个Map对象,默认key为它的排列顺序-->在接口方法参数中使用注解,map的key为参数名,#{}中是参数名
遇到多参数-->多参数对应一个实体类-->使用该实体类封装
多参数对应多个实体类-->参数少,简单-->多参数+注解实现
-->封装一个Map -->创建VO类,将多参数设置为属性
*类似于Map中key对应的value为对象,要取出对象对应的属性--->键.属性名-->#{}可进一步点.
动态SQL mapper的sql语句中动态拼接sql
<if test="...>0"> ...使用传入参数的属性名,具体属性的属性使用点
where+if
choose+when+otherwise
for for适用于一个属性对于多个值in(,,,)的批量操作,for遍历数组 时用arrays,集合时使用list(直接的数组或集合以arrays,list为键值封装)
输出映射
反射生成输出对象,根据查询出的结果集字段,为其属性赋值
简单实体类映射直接resultType="类名"
实体类属性名与数据库字段不一致-->起别名
-->resultMap做输出结果集映射
resultMap中关联查询
--->关联查询,inner join合成一张表后映射
--->独立查询,分开两次查询(可延迟加载) --->第二个查询中输入参数由第一个查询查出来的某一字段提供
一对多collection , 多对一(一对一) assocation
3.配合API的执行流程
API操作配置文件以执行sql数据交互
配置文件需要被API读取来进行一系列操作
sql执行的核心为SqlSession,SqlSession的创建依赖于SqlSession工厂,而工厂的创建要读取到配置文件,解析xml,构造复杂所以采用建造者模式
利用Resource将主配置文件读取成流传递给SqlSessionFactoryBuilder,建造者就拥有了配置文件中的信息Configuration,接着将这些信息传递给SqlSessionFactory
openSession时创建Executor执行器(用于执行Sql语句的核心),Configuare,还有是否自动提交,默认为否
动态代理的Mapper-->sqlSession.getMapper(Dao接口)
根据接口名搜索到对应的namespace,根据对应的方法名搜索到对应的statement的id来实现拦截器,代理类等代理类的构建
以上是关于Mybatis框架复习随笔的主要内容,如果未能解决你的问题,请参考以下文章