1、加载配置
Mubatis将sql的映射加载为一个个的MappedStatement对象(包括传入的参数映射配置,执行的sql语句,结果映射配置),将其存储在内存中.
2、sql解析
当api接口层受到调用请求时,会接收到传入的sql的id和传入的参数对象(可以是Map,实体类和基本数据类型),myBatis会根据sql的id找到对应的MappedStatement,然后传人的参数对MappedStatement进行解析,解析后可以的到最终要执行的sql语句和参数
3、sql执行
将最总得到的sql语句和参数拿到数据路执行,得到执行结果
4、结果映射
将操作数据库的结果按照结果映射配置进行转换,可以转换为map,实体类或者基本数据类型,将结果返回 。
SqlSession:此组件包含所有执行sql语句操作的方法,用于执行已映射的sql语句.
1、SqlMapConfig.xml(1个)
主配置文件,用于指定数据库连接参数
2、SqlMapper.xml(多个)
映射文件,用于定义sql语句映射信息
Mybatis基本应用
1)搭建MyBaties技术环境
为工程添加mydaties的开发包和数据驱动包,
在src下添加myBaties的主配置文件sqlMapConfig.xml配置sqlMapConfig.xml,
指定数据库连接参数利用MyBatis提供Api,获取Sqlsession对象
2)获取SqlSession对象
String path=“主配置文件路径”
Reader reader=resource.getResourceAsReader(path);
//构建SqlSessionFactory对象
SqlSessionFactoryBuilder ssfb=new SqlSessionFactoryBuilder();
SqlSessionFactoryBuilder ssf=ssfb.build(reader);
//创建Sqlsession对象
Sqlsession ss=ssf.openSession();
3)利用sqlSession实现增删改查操作
根据数据库表编写实体类
编写sqlMapper.xml映射文件,定义sql操作和yings信息,
获取sqlSession对象,执行增删改查操作,提交事务(dml)
释放sqlsession对象资源
resultMap映射定义
在映射文件定义操作时,如果查询结果字段名和实体类的属性名不一致,则需呀使用标签显示指定映射关系
注意:如果结果集的字段名和实体类的属性名完全不一致,且在结果映射的时定义为resultType,则不会创建实体对象,但是如果只是部分不一致,则会创建实体对象,并且自动关联名字一致的属性
mapper映射器
用于绑定映射语句的接口,映射器接口的实例对象可以从SqlSession中获取。
注意:mapper接口名称必须和对应的映射文件中nameSpace保持一致。
mapper接口中方法名必须和映射文件中SQL的ID一致
spring与mybatis整合
spring与mybatis整合需要映入一个mybatis-spring.jar文件包,此包提供与整合相关的api
SqlSessionFactorybean为整合应用提供SqlSession对象
MapperFactoryBean:根据指定mapper接口生成对应实例对象
MapperScannerConfigurer:根据指定包批量扫描mapper接口生成对应的MapperFactoryBean
sqlsession通过sqlsessionfactory获取的 SqlSessionFactory又是通过SqlSessionFactoryBuilder构建生成
SqlSessionFactory在spring.xml中配置:
在使用MapperFactoryBean时,有一个Mapper接口就要定义一个对应的MapperFactoryBean,仅用于mapper接口较少时;
若接口较多,需要使用MapperScannerConfigurer组件.
定义MapperScannerConfigurer时,只需指定一个扫描包即可,basePackage用于指定Mapper接口所在的包,在这个包及其子包中的mapper接口豆浆被扫描到,注册对应的MapperFactoryBean对象,多个包自检可以使用逗号隔开。
注意:SqlSessionFactory属性可以不用指定,会以Autowried方式自动注入
如果指定的某个包下,并不完全是我们定义的Mapper接口,此时可以使MapperScannerConfigurer的两个属性缩小注册范围,一个annottionClass,一个markerInterface.
annotationClass:用于指定一个注解标记,当指定了annotationClass注解标记时,MapperScannerConfigure将只注册使用annotationClass注解标记的接口.
markerInterface:用于指定一个接口,当指定了markerInterface接口时,mapperScannerConfigurer将只注册继承自markerInterface接口的接口
动态sql设计mybatis框架中特性之一,在一些组合查询页面需要根据用户输入得条件生成不同的查询sql语句,在jdbc或者其他像是框架中需要在代码中拼接sql容易出错,mybatis可以解决这种问题
动态sql标签与jstl相似,他允许在xml中构建不同的sql语句,常用的sql标签有:
判断标签:if,choose
关键字标签:where,set,trim
循环标签:foreach
if标签是简单的条件判断逻辑,满足指定条件时追加if标签内的sql语句,不满足时不追加,使用格式如下:
if标签常用在where子句部分,根据不同情况住加入不同的sql语句。
choose标签的作用相当于jsva中的switch语句,基本上跟jstl中choose的作用和用法是一至的,通常与when和other搭配使用,使用格式如下:
where标签主要是用于简化语句中where部分的条件判断,where变迁可以在变迁所在的位子输出一个where关键字,而且可以将后面多余的and或者or关键字去除,使用格式如下:
deptno =#{deptno}
and salary > #{salary}
set标签主要是用在更新操作时,他的主要功能和where标签相似,组要是在标签所在位子输出一个set关键字,而且还可以去除内容结尾中无关的逗号,使用格式如下
update emp
ename = #{enmae},
salary = #{salary},
hiredate = #{hiredate}
trim标签的主要功能
1、可以在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀,与之对应的属性是prefix和suffix
2、可以把包含内容首部的某些内容过滤,即hulue,也可以把尾部的某些内容guolv,对应的属性是
prefixOverrides和suffixOverrides
《等价于where标签》
......
《等价于set标签》
....
foreach标签实现循环逻辑,可以进行一个集合的迭代,主要用在构建In条件中,使用格式如下:
如:
foreach标签允许指定一个集合,声明集合项和索引变量,变量可以用标签体内,他允许指定开放和关闭的字符串,在迭代项之间放置分隔符。
补充:在xml文件中处理特殊符号
第一种方式:采用xml转义字符
< < ' &apos;
> > " ";
& &; 空格  ;