`

jdbcTemplate

阅读更多

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. });  
分享到:
评论

相关推荐

    spring-jdbcTemplate实例工程

    《深入解析Spring JdbcTemplate》 Spring JDBC Template是Spring框架中用于简化JDBC操作的一个核心组件,它是Spring对JDBC API的封装,旨在提供一个更加简洁、健壮且可测试的数据库访问层。在这个实例工程中,我们...

    JdbcTemplate的事务控制.docx

    ### JdbcTemplate 的事务控制 #### 一、引言 在软件开发过程中,事务管理是非常重要的一个环节,尤其是在处理数据库操作时。事务能够确保一系列数据库操作要么全部成功,要么全部失败,从而保持数据的一致性和完整...

    打印JdbcTemplate执行sql

    这篇博客文章的标题"打印JdbcTemplate执行sql"主要涉及如何在使用`JdbcTemplate`时,追踪并打印出执行的SQL语句,这对于调试和性能分析非常有帮助。接下来,我们将深入探讨`JdbcTemplate`的工作原理以及如何实现SQL...

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

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

    spring自带的jdbcTemplate查询、插入预编译使用

    在Spring框架中,`jdbcTemplate`是一个非常重要的组件,它为数据库操作提供了便捷且安全的API,降低了SQL注入的风险。本篇文章将详细讲解`jdbcTemplate`的预编译使用,以及如何通过回调方法进行定制化的数据处理。 ...

    SpringJdbcTemplate封装工具类

    SpringJdbcTemplate是Spring框架中用于简化Java数据库访问的工具,它是Spring JDBC模块的核心。这个封装工具类的出现是为了提供一种更简洁、易于使用的接口来执行SQL操作,减轻开发者处理数据库连接、事务管理以及...

    Spring JdbcTemplate 常用方法整理

    Spring的JdbcTemplate是Spring框架中用于简化数据库操作的工具类,它是基于JDBC但又抽象出了一层,避免了直接与数据库驱动API交互,从而提高了代码的可读性和可维护性。本文将深入探讨Spring JdbcTemplate的常用方法...

    Spring Boot多数据源(JdbcTemplate)配置与使用

    `JdbcTemplate`是Spring框架提供的一个用于简化数据库操作的工具,它使得数据库访问更为简洁且不易出错。在本教程中,我们将深入探讨如何在Spring Boot项目中配置和使用多数据源以及JdbcTemplate。 首先,让我们...

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

    ### Spring中的JdbcTemplate #### JdbcTemplate概述 JdbcTemplate是Spring框架提供的一种用于简化JDBC编程的对象。通过封装原生的JDBC API,JdbcTemplate不仅提高了代码的可读性和可维护性,还帮助开发者避免了...

    springmvc整合JdbcTemplate框架

    在Java Web开发中,Spring MVC和JdbcTemplate是两个非常重要的组件。Spring MVC作为一个强大的MVC框架,负责处理HTTP请求、视图渲染以及业务逻辑的组织。而JdbcTemplate则是Spring提供的一个简单易用的数据库访问...

    Spring--JdbcTemplate.pdf

    标题中提到的"JdbcTemplate"是Spring框架中提供的一个用于简化数据库操作的JDBC抽象库。它是对Java标准数据库编程接口JDBC的一种封装,旨在简化JDBC编程,减少样板代码,使得开发者在使用Spring框架时能够更便捷地对...

    spring的jdbctemplate的crud的基类dao

    在Spring框架中,`JdbcTemplate` 是一个非常重要的组件,它提供了一种简化数据库操作的API,使得开发者能够更安全、高效地与数据库交互。在本文中,我们讨论了如何利用`JdbcTemplate`来实现一个基类DAO(Data Access...

    SpringBoot操作多数据源(JPA+JdbcTemplate)

    本篇文章将探讨如何在Spring Boot中利用JPA(Java Persistence API)和JdbcTemplate来实现多数据源的管理,同时使用HikariCP作为高效的数据源连接池。 首先,让我们理解一下关键概念: 1. **Spring Boot**: 它是...

    Spring JdbcTemplate调用Oracle存储过程实现CRUD

    使用 Spring JdbcTemplate 调用 Oracle 存储过程实现 CRUD 在本文中,我们将讨论如何使用 Spring JdbcTemplate 调用 Oracle 存储过程来实现 CRUD(Create、Read、Update、Delete)操作。我们将首先编写 Oracle 存储...

    spring的jdbcTemplate小案例

    在本文中,我们将深入探讨Spring框架中的一个核心组件——JdbcTemplate。JdbcTemplate是Spring提供的一种数据库操作工具,它简化了数据库访问,使开发者能够编写出更健壮、更易于维护的代码,避免了手动处理JDBC连接...

    spring mvc注解jdbctemplate

    在Spring MVC框架中,JdbcTemplate是一个非常重要的组件,它提供了对数据库操作的简化API,使得开发者可以更加方便地执行SQL语句,而无需过多关注事务管理、异常处理等底层细节。本文将深入探讨如何在Spring MVC中...

    JdbcTemplate

    **JdbcTemplate:Spring框架中的数据库操作利器** 在Java开发中,与数据库的交互是不可或缺的一环。Spring框架为简化这一过程提供了JdbcTemplate类,它基于Java Database Connectivity (JDBC) API,但通过一系列...

    基于注解的Spring JdbcTemplate

    **基于注解的Spring JdbcTemplate** 在Java世界中,Spring框架是企业级应用开发的首选。Spring JDBC模絫提供了一种简洁的方式来处理数据库操作,而`Spring JdbcTemplate`是这个模絫的核心组件。本教程将深入探讨...

Global site tag (gtag.js) - Google Analytics