前段时间发现自己的的MyBatis的掌握的不好,很多细节地方没有理解到位。
最近有时间重新学习了一下,并整理了几篇博客。
一 Mybaits框架的由来
我们先来看下传统JDBC连接数据库的代码:
Public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//通过驱动管理类获取数据库链接
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");
//定义sql语句 ?表示占位符
String sql = "select * from test_user where username = ?";
//获取预处理statement
preparedStatement = connection.prepareStatement(sql);
//向数据库发出sql执行 查询,查询出结果集
resultSet = preparedStatement.executeQuery();
//遍历查询结果集
while (resultSet.next()) {
System.out.println(*********);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//释放资源
if (resultSet != null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
我们可以很容易看出,传统的JDBC代码有很多重复的内容,而且大部分是硬编码,效率低,系统不易维护。比如新增一个表时,所有的代码都要重写。(当然通过封装代码能够解决一部分问题,但仍不太好)
JDBC的设想:
1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。
设想:使用数据库连接池管理数据库连接。
2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。
3、向Statement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
设想:将sql语句及占位符号和参数全部配置在xml中。
4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。
设想:将查询的结果集,自动映射成java对象。
当当当,在以上这些设想的基础上,Mybatis这个伟大的框架就诞生了,Apache公司的顶级项目之一。
二 Mybatis工作原理
mybatis是一个持久层的框架。
mybatis一开始托管到goolecode下,再后来托管到github下。
官网:https://github.com/mybatis/mybatis-3 logo是非常可爱的小鸟@_@
mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。
mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)
最后来张图镇楼,讲的是Mybatis的原理(这些底层原理,懂不懂没关系,会用就行了。。)