# 前言
在java程序员的世界里,最熟悉的开源软件除了 Spring,Tomcat,还有谁呢?当然是 Mybatis 了,今天楼主是来和大家一起分析他的原理的。
1. 回忆JDBC
首先,楼主想和大家一起回忆学习JDBC的那段时光:
package cn.think.in.java.jdbc;
public class JdbcDemo {
private Connection getConnection() {
Connection connection = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url = "jdbc:sqlserver://192.168.0.251:1433;DatabaseName=test";
String user = "sa";
String password = "$434343%";
connection = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
public UserInfo getRole(Long id) throws SQLException {
Connection connection = getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = connection.prepareStatement("select * from user_info where id = ?");
ps.setLong(1, id);
rs = ps.executeQuery();
while (rs.next()) {
Long roleId = rs.getLong("id");
String userName = rs.getString("username");
String realname = rs.getString("realname");
UserInfo userInfo = new UserInfo();
userInfo.id = roleId.intValue();
userInfo.username = userName;
userInfo.realname = realname;
return userInfo;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
connection.close();
ps.close();
rs.close();
}
return null;
}
public static void main(String[] args) throws SQLException {
JdbcDemo jdbcDemo = new JdbcDemo();
UserInfo userInfo = jdbcDemo.getRole(1L);
System.out.println(userInfo);
}
}
看着这么多 try catch finally 是不是觉得很亲切呢?只是现如今,我们再也不会这么写代码了,都是在Spring和Mybatis 中整合了,一个 userinfoMapper.selectOne(id) 方法就搞定了上面的这么多代码,这都是我们今天的主角 Mybatis 的功劳,而他主要做的事情,就是封装了上面的除SQL语句之外的重复代码,为什么说是重复代码呢?因为这些代码,细想一下,都是不变的。
那么,Mybatis 做了哪些事情呢?
实际上,Mybatis 只做了两件事情:
- 根据 JDBC 规范 建立与数据库的连接。
- 通过反射打通Java对象和数据库参