mybatis概述
MyBatis 主要帮助开发人员屏蔽底层重复性的原生 JDBC代码。 MyBatis 通过映射配置文件或相应注解将 ResultSet 映射为 Java 对象,其映射规则可以嵌套其他映射规则以及子查询,从而实现复杂的映射逻辑,也可以实现 对多、多对多映射以及双向映射。
相较于 Hibernate, MyBatis 更加轻量级,可控性也更高,在使用 MyBatis 时我们直接在映射配置文件中编写待执行的原生 SQL 语句,这就给了我们直接优化 SQL 语句的机会,让 SQL语句选择合适的索引,能更好地提高系统的性能,比较适合大数据量、高并发等场景。
JDBC概述
JDBC Java 与数据库交互的统 API,jdbc有一套标准格式化的操作来与数据库互动。
- 注册数据库驱动 ,明确指定数据库 URL 地址、数据库用户名、密码等连接信息
- 通过 DriverManager 打开数据库连接
- 通过数据库连接创建 Statement 对象
- 通过 Statement 对象执行 SQL 语句,得到 ResultSet 对象
- 通过 ResultSet 读取数据,并将数据转换成 JavaBean 对象
- 关闭 ResultSet Statement 对象以及数据库连接,释放相关资源。
//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//输入url、用户名、密码创建连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai", "root", "123456");
//sql查询语句
String sql = "select * from account where name='" + "zhangsan" + "' and password = '" + "123" + "';";
Statement statement = connection.createStatement();
//执行查询语句
ResultSet resultSet = statement.executeQuery(sql);
//结果遍历
while (resultSet.next()) {
Object id = resultSet.getObject("id");
Object name = resultSet.getObject("name");
Object password = resultSet.getObject("password");
Object balance = resultSet.getObject("balance");
System.out.println(id + "-" + name + "-" + password + "-" + balance);
}
//关闭资源
resultSet.close();
statement.close();
connection.close();
其中除了sql ,返回对象,查询类型等关键信息变化,大部门操作都是相同的。为了消除重复的代码,ORM框架应运而生,我们所要学习的就是mybatis如何优雅的屏蔽大部分重复代码。
mybatis整体架构
首先用《mybatis技术内幕》里的流程图来给大家看下。我们只要搞清几个组件的功能大概就可以搞懂整个流程干了什么了。
调用流程先通过SqlSession , Executor 组件 然后 通过 StatementHandler 里面的ParameterHandler处理 访问数据库后 通过ResultSetHandler处理result 最后返回StatementHandler来得到结果。这样流程是否就清晰了呢?