一、宏观过程
- SqlSessionFactoryBuilder 创建 解析 xml 读取数据存入-> Configuration
- Configuration 创建SqlSessionFactory(I 包含默认实现类)
https://blog.csdn.net/hupanfeng/article/details/9068003?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160007090319724835855593%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=160007090319724835855593&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v3~pc_rank_v4-2-9068003.first_rank_ecpm_v3_pc_rank_v4&utm_term=mybatis&spm=1018.2118.3001.4187
二、configuration作用
- 读取配置文件,包括基础配置的xml文件和映射器的xml文件
- 初始化基础配置(mybatis别名等、重要类对象、插件、映射器、ObjectFactory和typeHandler)
- 提供单例,为创建SqlSessionFactory服务提供配置的参数
- 执行一些重要的对象方法,初始化配置信息
- 初始化信息包括
properties 全局参数
settings 设置
typeAliases 别名
typeHandler 类型处理器
ObjectFactory 对象
plugin 插件
environment 环境
DatabaseIdProvider 数据库标识
Mapper 映射器
三、映射器的内部组成
- MappedStatement :保留一个映射器节点(curd),同时包括配置的sql信息、sql中id缓存信息、输入类型、返回值类型等配置信息
- SqlSource :提供BoundSql对象,属于MappedStatement的属性
- BoundSql :建立SQL和参数,包含三个属性:sql paramterObject、parameterMappings
四、示例
数据库 表和实体类 -> id name state (这里省略)
import com.wyj.dao.UserDao;
import com.wyj.entity.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.BeforeClass;
import org.junit.Test;
import javax.annotation.Resources;
import java.io.Reader;
public class DaoTest{
private static SqlSessionFactory sqlSessionFactory;
@BeforeClass
public static void init(){
try{
//读取mybatis配置文件
Reader reader = org.apache.ibatis.io.Resources.getResourceAsReader("mybatis-config.xml");
//生成sqlSessionFactory对象
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
reader.close();
}catch (Exception e){
e.printStackTrace();
}
}
@Test
public void testSelectGetById(){
//生成sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
try{
UserDao userMapper = sqlSession.getMapper(UserDao.class);
//调用方法
User user = userMapper.getById(1);
System.out.println(user);
}finally {
sqlSession.close();
}
}
}