1、使用JdbcTemplate的execute()方法执行SQL语句 Java代码 1. jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))"); jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))"); 2、如果是UPDATE或INSERT,可以用update()方法。 Java代码 1. jdbcTemplate.update("INSERT INTO USER VALUES('" 2. + user.getId() + "', '" 3. + user.getName() + "', '" 4. + user.getSex() + "', '" 5. + user.getAge() + "')"); jdbcTemplate.update("INSERT INTO USER VALUES('" + user.getId() + "', '" + user.getName() + "', '" + user.getSex() + "', '" + user.getAge() + "')"); 3、带参数的更新 Java代码 1. jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id}); jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id}); Java代码 1. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)", new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()}); jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)", new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()}); 4、使用JdbcTemplate进行查询时,使用queryForXXX()等方法 Java代码 1. int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER"); int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER"); Java代码 1. String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?", new Object[] {id}, java.lang.String.class); String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?", new Object[] {id}, java.lang.String.class); Java代码 1. List rows = jdbcTemplate.queryForList("SELECT * FROM USER"); List rows = jdbcTemplate.queryForList("SELECT * FROM USER"); Java代码 1. List rows = jdbcTemplate.queryForList("SELECT * FROM USER"); 2. Iterator it = rows.iterator(); 3. while(it.hasNext()) { 4. Map userMap = (Map) it.next(); 5. System.out.print(userMap.get("user_id") + "/t"); 6. System.out.print(userMap.get("name") + "/t"); 7. System.out.print(userMap.get("sex") + "/t"); 8. System.out.println(userMap.get("age") + "/t"); 9. } List rows = jdbcTemplate.queryForList("SELECT * FROM USER"); Iterator it = rows.iterator(); while(it.hasNext()) { Map userMap = (Map) it.next(); System.out.print(userMap.get("user_id") + "/t"); System.out.print(userMap.get("name") + "/t"); System.out.print(userMap.get("sex") + "/t"); System.out.println(userMap.get("age") + "/t"); } JdbcTemplate将我们使用的JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等等。spring大量使用Template Method模式来封装固定流程的动作,XXXTemplate等类别都是基于这种方式的实现。 除了大量使用Template Method来封装一些底层的操作细节,spring也大量使用callback方式类回调相关类别的方法以提供JDBC相关类别的功能,使传统的JDBC的使用者也能清楚了解spring所提供的相关封装类别方法的使用。 JDBC的PreparedStatement Java代码 1. final String id = user.getId(); 2. final String name = user.getName(); 3. final String sex = user.getSex() + ""; 4. final int age = user.getAge(); 5. 6. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)", 7. new PreparedStatementSetter() { 8. public void setValues(PreparedStatement ps) throws SQLException { 9. ps.setString(1, id); 10. ps.setString(2, name); 11. ps.setString(3, sex); 12. ps.setInt(4, age); 13. } 14. }); final String id = user.getId(); final String name = user.getName(); final String sex = user.getSex() + ""; final int age = user.getAge(); jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)", new PreparedStatementSetter() { public void setValues(PreparedStatement ps) throws SQLException { ps.setString(1, id); ps.setString(2, name); ps.setString(3, sex); ps.setInt(4, age); } }); Java代码 1. final User user = new User(); 2. jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?", 3. new Object[] {id}, 4. new RowCallbackHandler() { 5. public void processRow(ResultSet rs) throws SQLException { 6. user.setId(rs.getString("user_id")); 7. user.setName(rs.getString("name")); 8. user.setSex(rs.getString("sex").charAt(0)); 9. user.setAge(rs.getInt("age")); 10. } 11. }); final User user = new User(); jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?", new Object[] {id}, new RowCallbackHandler() { public void processRow(ResultSet rs) throws SQLException { user.setId(rs.getString("user_id")); user.setName(rs.getString("name")); user.setSex(rs.getString("sex").charAt(0)); user.setAge(rs.getInt("age")); } }); Java代码 1. class UserRowMapper implements RowMapper { 2. public Object mapRow(ResultSet rs, int index) throws SQLException { 3. User user = new User(); 4. 5. user.setId(rs.getString("user_id")); 6. user.setName(rs.getString("name")); 7. user.setSex(rs.getString("sex").charAt(0)); 8. user.setAge(rs.getInt("age")); 9. 10. return user; 11. } 12. } 13. 14. public List findAllByRowMapperResultReader() { 15. String sql = "SELECT * FROM USER"; 16. return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper())); 17. } class UserRowMapper implements RowMapper { public Object mapRow(ResultSet rs, int index) throws SQLException { User user = new User(); user.setId(rs.getString("user_id")); user.setName(rs.getString("name")); user.setSex(rs.getString("sex").charAt(0)); user.setAge(rs.getInt("age")); return user; } } public List findAllByRowMapperResultReader() { String sql = "SELECT * FROM USER"; return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper())); } 在getUser(id)里面使用UserRowMapper Java代码 1. public User getUser(final String id) throws DataAccessException { 2. String sql = "SELECT * FROM USER WHERE user_id=?"; 3. final Object[] params = new Object[] { id }; 4. List list = jdbcTemplate.query(sql, params, new RowMapperResultReader(new UserRowMapper())); 5. 6. return (User) list.get(0); 7. } public User getUser(final String id) throws DataAccessException { String sql = "SELECT * FROM USER WHERE user_id=?"; final Object[] params = new Object[] { id }; List list = jdbcTemplate.query(sql, params, new RowMapperResultReader(new UserRowMapper())); return (User) list.get(0); } 网上收集 org.springframework.jdbc.core.PreparedStatementCreator 返回预编译SQL 不能于Object[]一起用 Java代码 1. public PreparedStatement createPreparedStatement(Connection con) throws SQLException { 2. return con.prepareStatement(sql); 3. } public PreparedStatement createPreparedStatement(Connection con) throws SQLException { return con.prepareStatement(sql); } 1.增删改 org.springframework.jdbc.core.JdbcTemplate 类(必须指定数据源dataSource) Java代码 1. template.update("insert into web_person values(?,?,?)",Object[]); template.update("insert into web_person values(?,?,?)",Object[]); 或 Java代码 1. template.update("insert into web_person values(?,?,?)",new PreparedStatementSetter(){ 匿名内部类 只能访问外部最终局部变量 2. 3. public void setValues(PreparedStatement ps) throws SQLException { 4. ps.setInt(index++,3); 5. }); template.update("insert into web_person values(?,?,?)",new PreparedStatementSetter(){ 匿名内部类 只能访问外部最终局部变量 public void setValues(PreparedStatement ps) throws SQLException { ps.setInt(index++,3); }); org.springframework.jdbc.core.PreparedStatementSetter 接口 处理预编译SQL Java代码 1. public void setValues(PreparedStatement ps) throws SQLException { 2. ps.setInt(index++,3); 3. } public void setValues(PreparedStatement ps) throws SQLException { ps.setInt(index++,3); } 2.查询JdbcTemplate.query(String,[Object[]/PreparedStatementSetter],RowMapper/RowCallbackHandler) org.springframework.jdbc.core.RowMapper 记录映射接口 处理结果集 Java代码 1. public Object mapRow(ResultSet rs, int arg1) throws SQLException { int表当前行数 2. person.setId(rs.getInt("id")); 3. } 4. List template.query("select * from web_person where id=?",Object[],RowMapper); public Object mapRow(ResultSet rs, int arg1) throws SQLException { int表当前行数 person.setId(rs.getInt("id")); } List template.query("select * from web_person where id=?",Object[],RowMapper); org.springframework.jdbc.core.RowCallbackHandler 记录回调管理器接口 处理结果集 Java代码 1. template.query("select * from web_person where id=?",Object[],new RowCallbackHandler(){ 2. public void processRow(ResultSet rs) throws SQLException { 3. person.setId(rs.getInt("id")); 4. });