Spring最重要的功能毫无疑问就是操作数据。数据库的百年城是互联网编程的基础,Spring为开发者提供了JDBC模板模式,那就是它自身的JdbcTemplate。Spring还提供了TransactionTemplate支持事务的模板。Spring并没有支持MyBatis,好在MyBatis社区开发了接入Spring的开发包,该包也提供了SqlSessionTemplate给开发者使用,该包还可以屏蔽SqlSessionTemplate这样的功能性代码,可以在编程中擦除SqlSessionTemplate让开发者直接使用接口编程,大大提高了编码的可读性。
一、传统JDBC代码的弊端
例如,下面的代码的作用是,通过JDBC读取数据库,然后将结果集以POJO的形式返回。
package com.ssm.chapter12.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.ssm.chapter12.pojo.Role; public class JdbcExample { public Role getRole(Long id) { Role role = null; // 声明JDBC变量 Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { // 注册驱动程序 Class.forName("com.mysql.jdbc.Driver"); // 获取连接 con = DriverManager.getConnection("jdbc:mysql://localhost:3306/chapter12", "root", "123456"); // 预编译SQL ps = con.prepareStatement("select id, role_name, note from t_role where id = ?"); // 设置参数 ps.setLong(1, id); // 执行SQL rs = ps.executeQuery(); // 组装结果集返回到POJO while (rs.next()) { role = new Role(); role.setId(rs.getLong(1)); role.setRoleName(rs.getString(2)); role.setNote(rs.getString(3)); } } catch (ClassNotFoundException | SQLException e) { // 异常处理 e.printStackTrace(); } finally { // 关闭数据库连接资源 try { if (rs != null && !rs.isClosed()) { rs.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (ps != null && !ps.isClosed()) { ps.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (con != null && !con.isClosed()) { con.close(); } } catch (SQLException e) { e.printStackTrace(); } } return role; } }