`
zhangfeiii
  • 浏览: 44818 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring 的 JDBCTemplate使用总结

阅读更多
1、使用JdbcTemplate的execute()方法执行SQL语句
Java代码
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代码
jdbcTemplate.update("INSERT INTO USER VALUES('"  
            + user.getId() + "', '"  
            + user.getName() + "', '"  
            + user.getSex() + "', '"  
            + user.getAge() + "')");  

jdbcTemplate.update("INSERT INTO USER VALUES('"            + user.getId() + "', '"            + user.getName() + "', '"            + user.getSex() + "', '"            + user.getAge() + "')");

3、带参数的更新
Java代码
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代码
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代码
int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");  

int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");


Java代码
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代码
List rows = jdbcTemplate.queryForList("SELECT * FROM USER");  

List rows = jdbcTemplate.queryForList("SELECT * FROM USER");


Java代码
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");   
}  

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代码
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);   
                          }   
                      });  

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代码
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"));   
                         }   
                     });  

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代码
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()));   
}  

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代码
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);   
}  

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代码
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {   
return con.prepareStatement(sql);   
}  

public PreparedStatement createPreparedStatement(Connection con) throws SQLException {   return con.prepareStatement(sql);  }

1.增删改
org.springframework.jdbc.core.JdbcTemplate 类(必须指定数据源dataSource)
Java代码
template.update("insert into web_person values(?,?,?)",Object[]);  

template.update("insert into web_person values(?,?,?)",Object[]);


Java代码
template.update("insert into web_person values(?,?,?)",new PreparedStatementSetter(){ 匿名内部类 只能访问外部最终局部变量   
  
public void setValues(PreparedStatement ps) throws SQLException {   
   ps.setInt(index++,3);   
});  

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代码
public void setValues(PreparedStatement ps) throws SQLException {   
ps.setInt(index++,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代码
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);  

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代码
template.query("select * from web_person where id=?",Object[],new RowCallbackHandler(){   
public void processRow(ResultSet rs) throws SQLException {   
   person.setId(rs.getInt("id"));   
});  

分享到:
评论

相关推荐

    基于注解的Spring JdbcTemplate

    本教程将深入探讨如何使用基于注解的Spring JdbcTemplate进行数据库操作,特别适合初学者入门学习。 ### 1. Spring JdbcTemplate简介 Spring JdbcTemplate提供了一个面向对象的接口,用于执行SQL查询、更新和存储...

    Spring JdbcTemplate 常用方法整理

    总结起来,Spring JdbcTemplate是Spring框架中用于数据库操作的重要组件,它简化了JDBC的使用,提供了丰富的API来处理各种数据库操作。通过`JsonBean.java`和`JdbcUtils.java`,我们可以看到如何在实际项目中定义...

    使用Spring JDBCTemplate进行增删改查curd操作

    总结来说,Spring JdbcTemplate通过提供一套简单易用的API,极大地简化了数据库操作,同时保证了代码的健壮性和安全性。无论是在简单的CRUD操作还是复杂的事务处理中,它都是Spring开发中不可或缺的工具。通过熟练...

    spring的jdbcTemplate小案例

    总结来说,Spring的JdbcTemplate提供了简洁、强大的API,使得数据库操作变得更加简单和安全。通过使用它,我们可以避免手动管理数据库连接,减少潜在的资源泄露问题,同时增强代码的可读性和可维护性。通过结合...

    spring jdbcTemplate 源码

    总结来说,Spring JDBCTemplate通过提供一套高级API,有效地降低了数据库操作的复杂性,提高了代码的可维护性和安全性。在实际项目中,结合Spring的其他数据访问组件,如Hibernate或MyBatis,可以构建出强大且灵活的...

    Spring 学习 JdbcTemplate,模板模式,回调

    本主题将深入探讨Spring框架中的JdbcTemplate组件,以及模板模式和回调机制的概念。 **1. Spring JdbcTemplate** JdbcTemplate是Spring提供的一个用于简化数据库操作的API,它是Spring对JDBC(Java Database ...

    spring jdbcTemplate

    总结,Spring JdbcTemplate提供了一个优雅的JDBC操作接口,使得我们在处理数据库交互时,可以专注于业务逻辑,而不必深陷于繁琐的JDBC语法。在实际项目中,结合图书馆系统Demo的实践,我们可以更好地理解和掌握...

    spring jdbcTemplate 注入到servlet

    总结来说,`Spring JdbcTemplate`是一个强大的工具,它将JDBC的操作进行了抽象和封装,提高了开发效率并降低了出错的可能性。在Servlet中注入并使用`JdbcTemplate`,可以使得Web应用的数据库操作更加简洁、灵活。

    4.Spring中的JdbcTemplate,Spring中的的事务,

    通过本章节的学习,您应该能够掌握如何使用JdbcTemplate进行基本的数据库操作,以及如何在Spring中配置和使用声明式事务来管理复杂的业务流程。这些技能对于开发基于Spring框架的应用程序至关重要。

    jdbcTemplate分页彻底解决,使用游标滚动

    在Java的Spring框架中,`JdbcTemplate`是一个非常重要的组件,它提供了数据库操作的简单抽象,使得开发者可以方便地执行SQL语句而无需编写复杂的DAO(数据访问对象)层。在处理大量数据时,传统的分页方法可能会导致...

    Spring:JdbcTemplate使用指南

    总结,Spring的JdbcTemplate是数据库操作的利器,它极大地简化了SQL操作,提供了事务管理,同时也有效地防止了SQL注入问题。通过灵活的参数绑定和结果集映射,我们可以方便地构建各种复杂的数据库交互逻辑。了解并...

    Spring JdbcTemplate整合使用方法及原理详解

    Spring JdbcTemplate 整合使用方法及原理详解 Spring JdbcTemplate 是 Spring 框架中的一部分,提供了一个简单的方式来与数据库进行交互。它可以帮助开发者快速地执行数据库操作,无需关心底层的 JDBC 详细实现。...

    Spring JdbcTemplate&声明式事务1

    总结起来,Spring JdbcTemplate简化了数据库操作,而声明式事务管理则使事务处理更加便捷。通过这两个工具,开发者可以更专注于业务逻辑,而不是底层的数据库操作和事务管理细节。结合使用,它们为基于Spring的应用...

    spring的jdbctemplate的crud的基类dao

    总结来说,`Spring`的`JdbcTemplate`和基于它的基类DAO设计是面向数据库操作的一种良好实践。它简化了与数据库的交互,提供了易于理解和使用的API,使得开发者能够更加专注于业务逻辑,而不是底层的数据库操作。通过...

    day4-Spring JdbcTemplate & 声明式事务.md

    总结而言,JdbcTemplate为开发者提供了一个便捷的方式来处理数据库操作,而声明式事务管理则使得事务控制变得更加简单、灵活。通过结合使用这两种技术,我们可以构建出高效、健壮的企业级应用程序。

    Spring的getBean和JdbcTemplate

    总结来说,Spring的`getBean`方法是DI机制的关键,它帮助我们从容器中获取和使用Bean;而`JdbcTemplate`则简化了数据库操作,提供了强大的安全性和易用性。在实际开发中,合理利用这两个工具,可以极大地提高代码的...

    JdbcTemplate操作总结

    总结起来,JdbcTemplate是Spring框架中一个强大的数据库操作工具,它通过提供一套模板方法简化了SQL的执行和结果处理,同时具备事务管理和安全性。通过合理配置和恰当的使用,可以大大提高开发效率,降低出错概率,...

    Spring SpringMvc JdbcTemplate NamedParameterJdbcTemplate

    这个链接可能包含详细的解释和示例代码,帮助你深入学习如何在实际项目中使用Spring、Spring MVC、JdbcTemplate和NamedParameterJdbcTemplate。 总结一下,本话题涵盖了Spring框架的核心组件,特别是其在数据库操作...

    设计模式学习笔记(十五)命令模式及在Spring JdbcTemplate 中的实现.doc

    JdbcTemplate 是 Spring 对 JDBC 的轻量级抽象,它简化了数据库访问,同时避免了直接编写大量的模板代码。JdbcTemplate 提供了多种模板方法,如 `update()`, `query()`, `execute()` 等,这些方法实际上扮演了命令...

Global site tag (gtag.js) - Google Analytics