MyBatis
1、什么是MyBatis
MyBatis最早源自于Apache基金会的一个开源项目iBatis,2010年项目由Apache software foundation迁移Google Code,改名为MyBatis
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架,其使用简单的XML配置定义映射关系,将实体类对象映射成数据库中记录
2、MyBatis工作原理
1)加载配置
MyBatis将SQL的映射信息加载为一个个的MappedStatement对象(包括传入的参数映射配置,执行的sql语句,结果映射配置),将其存储在内存中
2)SQL解析
当API接口层收到调用请求时,会接收到传入SQL的ID和传入的参数对象(可以是Map,实体类或者基本数据类型),MyBatis会根据SQL的ID找到相对应的MappedStatement,然后根据传入的参数对象对MappedSatement进行解析,解析后可以得到最终要执行的sql语句和参数
3)SQL执行
将最终得到的sql语句和参数拿到数据库进行执行,得到操作数据库的结果
4)结果映射
将操作数据库的结果按照映射配置进行转换,可以转换为Map、实体类或者基本数据类型,将转换结果返回
3、MyBatis框架API
1)SqlSessionFactoryBuilder
此对象负责根据MyBatis主配置文件SqlMapConfig.xml构建SqlSessionFactory对象
2)SqlSessionFactory
每一个MyBatis的应用程序都以一个SqlSessionFactory对象为核心,此对象负责创建SqlSession对象
3)SqlSession
此对象包含所有执行sql语句操作的方法,用于执行已映射的sql语句
4、MyBatis配置文件
1)SqlMapConfig.xml(1个)
主配置文件,用于指定数据库连接参数
2)SqlMapper.xml(N个)
映射文件,用于定义SQL语句映射信息
5、MyBatis基本应用
1)搭建MyBatis技术环境
* 为工程添加MyBatis的开发包和数据库驱动包
* 在src下添加MyBatis的主配置文件SqlMapConfig.xml
* 配置SqlMapConfig.xml,指定数据库连接参数
* 利用MyBatis提供API,获取SqlSession对象
2)获取SqlSession对象
String path="主配置文件URL";
Reader reader=Resources.getResourceAsReader(path);
//构建SqlSessionFactory对象
SqlSessionFactoryBuilder ssfb=new SqlSessionFactoryBuilder();
SqlSessionFactory ssf=ssfb.build(reader);
//创建SqlSession对象
SqlSession ss=ssf.openSession();
3)利用SqlSession实现CURD操作
* 根据数据库表编写实体类
* 编写SqlMapper.xml映射文件,定义SQL操作和映射信息
* 获取SqlSession对象,执行增删改查操作
* 提交事务(DML)
* 释放SqlSession对象资源
4)返回Map类型查询结果
5)resultMap映射定义
在映射文件定义<select>操作时,如果查询结果集字段名和实体类的属性名不一致,则需要使用<resultMap>标签显示指定映射关系
注意:不一致的问题,如果结果集的字段名和实体类的属性名全部不一致,且在结果映射时定义为resultType,则不会创建实体对象,但是如果只是部分不一致,则会创建实体对象,并且自动关联名字一致的属性
6)Mapper映射器
Mapper映射器是开发者创建绑定映射语句的接口,映射器接口的实例对象可以冲SqlSession中获取
注意:Mapper接口名称必须和对应的映射文件中的namespace一致
Mapper接口中方法名必须和映射文件中SQL的ID一致