开篇:为什么 MyBatis 在国内比 JPA 更受欢迎?
用一个比喻来理解:JPA(Hibernate)像自动挡汽车,你告诉它"去北京",它自动帮你规划路线、加油、过收费站;MyBatis 像手动挡,你得自己换挡,但路线完全由你掌控。
国内互联网业务复杂度高,SQL 调优需求强烈,多表 JOIN 和复杂查询是常态。MyBatis 让开发者直接写 SQL,既保留了灵活性,又通过 ORM 映射省去了 JDBC 的繁琐操作。看一下对比就知道差距有多大:
// 原生 JDBC:30 行代码做一次查询
Connection conn = DriverManager.getConnection(url, user, pwd);
String sql = "SELECT id, title FROM article WHERE author_id = " + authorId;
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
List<Article> articles = new ArrayList<>();
while (rs.next()) {
Article a = new Article();
a.setId(rs.getInt("id"));
a.setTitle(rs.getString("title"));
articles.add(a);
}
// 还要 close...
// MyBatis:2 行搞定
ArticleMapper mapper = session.getMapper(ArticleMapper.class);
List<Article> articles = mapper.findByAuthor(authorId);
大约 14 分钟