功能:与数据库进行交互
将statement id和查询参数传递给SqlSession对象,使用SqlSession对象完成和数据库的交互
上面的传统的方式虽然简单和实用,但是它不符合面向语言的概念和面向接口编程的习惯,因此,Mybatis增加了支持接口调用的方式
两种交互方式的代码演示:
/**
* 方式一:使用mybatis的传统API和数据库进行交互
*/
@Test
public void testTraditionalWay() throws Exception{
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession sqlSession = factory.openSession();
Student student = sqlSession.selectOne("com.demo.selectStudent",3);
sqlSession.commit();
sqlSession.close();
System.out.println(student);
}
2.使用Mapper接口
/**
* 方式二:基于Mapper接口和数据库进行交互
*/
@Test
public void testMapperInterface() throws Exception
{
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession sqlSession = factory.openSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
mapper.insert(new Student(3,"李四",1));
sqlSession.commit();
sqlSession.close();
}
数据处理层是Mybatis的核心层,它主要负责具体的SQL查找、SQL解析、SQL执行和执行结果处理等功能
动态 SQL 是 MyBatis 的强大特性之一。在 JDBC 或其它类似的框架中,开发人员通常需要手动拼接 SQL 语句。根据不同的条件拼接 SQL 语句是一件极其痛苦的工作。例如,拼接时要确保添加了必要的空格,还要注意去掉列表最后一个列名的逗号。而动态 SQL 恰好解决了这一问题,可以根据场景动态的构建查询。
动态SQL语句生成之后,MyBatis 将执行SQL语句,并将可能返回的结果集转换成List 列表。MyBatis 在对结果集的处理中,支持结果集关系一对多和多对一的转换,并且有两种支持方式,一种为嵌套查询语句的查询,还有一种是嵌套结果集的查询
框架支撑层是整个Mybatis框架的地基,负责最基础的功能支撑,包括
连接池管理
、事务管理
、配置加载
、缓存管理
,这些都是共用的组件,为上层的数据处理层提供最基础的支撑
SqlSession
:作为Mybatis工作的主要顶层API,表示和数据库交互的会话,完成与数据库的增删改查功能Executor
:Mybatis的执行器,真正的增删改查实际是Executor对象负责完成的,具体负责SQL语句的生成和查询缓存的维护StatementHandler
:封装了JDBC Statement操作,如设置参数、将Statement结果集转换成List集合ParameterHandler
:负责对用户传递的参数转换成JDBC Statement 所需要的参数ResultSetHandler
:负责将JDBC返回的ResultSet结果集对象转换成List类型的集合TypeHandler
:负责java数据类型和jdbc数据类型之间的映射和转换MappedStatement
:维护了一条SqlSource
:负责根据用户传递的parameterObject,动态生成SQL语句,将信息封装到BoundSql对象中,然后返回BoundSql
:表示动态生成的SQL语句及相应的参数信息Configuration
:Mybatis所有的配置信息都维持在Configuration对象之中