目录
整体架构与使用Demo
Mybatis的架构整体可以分为3层:
- 接口层
也就是和数据库进行交互,核心接口为SqlSession,一个SqlSession对应着一次数据库会话,那么其生命周期不是永久的,理论上每次访问数据库时都需要创建它。
形式分为两种,一种是使用Mapper接口,一种是基于Mybatis提供的Api;- Mybatis提供的Api
需要我们提供StatementId和查询参数,传递给SqlSession对象,提供SqlSession对象实现与数据库的交互;但是这种创建sqlSession的形式不符合面向接口编程的习惯。 - 使用Mapper接口:
Mybatis将配置文件中的每一个Mapper节点都抽象为一个Mapper接口,根据SqlSession.getMapper(XXXMapper.class),Mybatis将通过动态代理,生成一个Mapper实例。但当我们调用Mapper接口中的方法时,Mybatis会根据方法名和参数,确定StatementId,底层还是通过SqlSession来实现对数据库的操作。
- Mybatis提供的Api
- 数据处理层
- 配置解析
- 参数、结果集映射:java数据类型与jdbc数据类型的转换,包括查询阶段和结果返回阶段
- Sql解析:动态sql生成
- Sql执行
- 框架支持层
- 事务管理
- 连接池管理
- 缓存机制
使用Demo:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行SQL语句 (通过StatementId)
List list = sqlSession.selectList("com.example.mapper.personMapper.selectPersonByMap");
// 执行SQL语句(通过Mapper接口)
PersonMapper personMapper = sqlSession.getMapper(PersonMapper