`
zhangfeiii
  • 浏览: 43411 次
  • 性别: 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"));   
});  

分享到:
评论

相关推荐

    QQQ_(S+S+H)(Spring_JdbcTemplate_dao)_方式总结

    SSH整合JdbcTemplate_dao)_方式_总结

    Spring 通过连接mysql,通过JdbcTemplate和SimpleJdbcTemplate来操作数据库

    本代码总结了,spring通过JdbcTemplate和SimpleJdbcTemplate来操作数据库的各种方法。 本代码使用的maven project。

    Spring持久化模板总结

    总结对比了Spring对JDBCTemplate和SpringTemplate的整合使用方法,尤其JdbcDaoSupport和HibernateDaoSupport的使用方法

    Spring中文帮助文档

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    Spring3.X编程技术与应用,完整扫描版

    全书分3篇共21章,具体内容包括:Spring环境的安装与使用、JSP与JSTL简介、 Spring基础概念与工具、用SpringJdbcTemplate访问数据库、使用Mayen工程、Spring MVC编程、基于 MVC的资源共享网站设计、Spring的AOP编程...

    springtemplate总结

    springtemplate,简单操作,存储过程使用总结及例子

    spring.doc

    Spring的IOC总结: 20 3.5 依赖注入(DI) 20 3.5.1 使用构造器注入 20 3.5.2 使用属性setting方法进行注入 21 3.5.3 装配list集合 22 3.5.4 装配set集合 22 3.5.5 装配map 22 3.5.6 装配Properties 23 3.6 注解注入 ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...

    Spring.3.x企业应用开发实战(完整版).part2

    经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...

    Spring 2.0 开发参考手册

    6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点实施 7.2.3. AspectJ切入点表达式 7.2.4. ...

    Spring API

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    spring chm文档

    Spring Framework 开发参考手册 Rod Johnson Juergen Hoeller Alef Arendsen Colin Sampaleanu Rob Harrop Thomas Risberg Darren Davison Dmitriy Kopylenko Mark Pollack ...19.2. 使用Spring JMS ...

    Spring3.x企业应用开发实战(完整版) part1

    经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...

    springboot项目整合.zip

    第五篇:使用JdbcTemplate访问数据库] 第六篇:整合SpringDataJpa] 第七篇:整合Mybatis] 第八篇:通用Mapper与分页插件的集成] 第九篇:整合Lettuce Redis] 第十篇:使用Spring Cache集成Redis] 第十...

    spring学习笔记

    Spring的Ioc Spring的AOP , AspectJ Spring的事务管理 , 三大框架的整合 目录 1.1 Spring 框架学习路线:..........................................................................................................

    SpringBoot整合持久层技术之搭建并整合Spring Data JPA项目

    SpringBoot整合持久层技术进行一个项目的搭建,做一个练手,以前搞过但是都淡忘了,特意来总结一下。今天是JPA,后面陆续搭建MyBatis、JdbcTemplate等持久层技术,供大家相互学习。

    spring整合jdbc学习资料

    本人总结的传智博客上老师的JDBC视频资料的PPT.

Global site tag (gtag.js) - Google Analytics