Mybatis是什么
市面上常用的ORM持久层框架,底层是封装了JDBC
什么是ORM
ORM:Object Relational Mapper/对象关系映射
实现面向对象编程语言里不同类型系统的数据之间的转换。(可以理解为Java是中文,SQL是英语,ORM就是中间的翻译)
ORM框架
MyBatis , Hibernate …(这两个是国内常用的ORM框架)
MyBatis和Hibernate的对比
MyBatis与JDBC的区别
MyBatis实现
MyBatis核心组件
– 组件名 – | – 作用 – |
---|---|
SqlSession | 作为MyBatis工作的主要顶层API,和数据库交互的会话,完成必要数据库增删改查功能 |
Executor | MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护 |
StatementHandler | 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。 |
ParameterHandler | 负责对用户传递的参数转换成JDBC Statement 所需要的参数 |
ResultSetHandler | 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合 |
TypeHandler | 负责java数据类型和jdbc数据类型之间的映射和转换 |
MappedStatement | MappedStatement维护了一条SQL语句 |
SqlSource | 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回 |
BoundSql | 表示动态生成的SQL语句以及相应的参数信息 |
Configuration | MyBatis所有的配置信息都维持在Configuration对象之中 |
记住上面这些关键字,面试中问到MyBatis一定用的上!划重点!!
代码案例
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()){
User user = session.selectOne("com.sunfounder.testapp.UserMapper.getUser",1);
System.out.println("User:"+user);
}
}
我们将会通过上面的代码,了解MyBatis的初始化工作,以及MyBatis是如何执行一条查询语句的
获取数据配置源,创建SqlSession工厂
概述
SqlSessions 是由 SqlSessionFactory 实例创建的。SqlSessionFactory 对象包含创建 SqlSession 实例的所有方法。而 SqlSessionFactory 本身是由 SqlSessionFactoryBuilder 创建的,它可以从 XML、注解或手动配置 Java 代码来创建
底层实现调用链
org.apache.ibatis.session.SqlSessionFactoryBuilder.build(java.io.InputStream)
>org.apache.ibatis.session.SqlSessionFactoryBuilder.build(java.io