一、 原生态JDBC存在的问题?
public class Query{
public static void main(String[] args){
Connecton conn = null;
Statmenet stmt = null;
ResultSet rs = null;
class.forName("com.mysql.cj.jdbc.driver");
conn = DriverManager.getConnection(url,username,pwd);
String sql = "select * from s_user where ID=";
stmt = conn.createStatement();
rs = stmt.executeQuery();
while(rs.next()){
}
// finally 释放资源
}
}
public static <T> List<T> executeQuery(String sql,class className){
}
//输入sql语句
//输入类对象是通过配置⽂件(全限定类名)
- 数据库频繁的连接和关闭,耗费数据库资源(使用数据库连接池)
连接池:DBCP C3P0 DRUID - 查询结果封装的问题(反射+配置文件)
- SQL语句硬编码问题(mapper.xml)
二、mybatis框架运行原理
2.1 运行原理
核心:配置文件
- 全局配置文件(数据库连接信息,别名设置,加载外部配置文件,插件,加载映射文件)
- 映射文件(sql语句,查询结果的封装方式,动态sql)
详解:
- SqlSessionFactoryBuilder: 构造者模式,创建SqlSessionFactory;
build(InputStream),加载一个全局配置文件,从而生成SqlSessionFactory工厂对象。 - SqlSessionFactory: 工厂,用于生产SqlSession,会话工厂
- SqlSession: 会话,他是mybatis为开发人员提供的开发接口
- executor: 执行器
2.2 总结原理
- mybatis的核心是配置文件,配置文件分为全局配置文件和映射文件,全局配置文件只能有一个,
而映射文件是有多个的(每张表对应一个映射文件)。全局配置⽂件配置数据库连接池信息、事务
信息、插件信息、别名、加载映射文件。而映射文件中包含sql语句,输⼊参数,输出结果类型。 - mybatis通过SqlSessionFactoryBuilder来加载配置文件,生成会话工厂SqlSessionFactory。
- 通过工厂对象来创建会话SqlSession。
- SqlSession本身并不直接去操作数据库,他是开发人员的标准,开发人员通过调用其定义的方法来
操作执行器。 - Exector执行器,分为基本执行器和缓存执行器。
- 执行器调用MapperStatement对象,该对象中包含了sql语句,输入参数,输出结果。
新手小白!欢迎留言交流~~!