`
xfbbsnet
  • 浏览: 93356 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

JdbcTemplate 资料(转)

阅读更多
使用JdbcTemplate的execute()方法执行SQL语句 :
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()方法。

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、带参数的更新

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

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()等方法

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

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


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);


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

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

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

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




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





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
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)
 
template.update("insert into web_person values(?,?,?)",Object[]);  

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

  或

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 

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   记录映射接口  处理结果集
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  记录回调管理器接口 处理结果集
template.query("select * from web_person where id=?",Object[],new RowCallbackHandler(){   
 public void processRow(ResultSet rs) throws SQLException {   
  person.setId(rs.getInt("id"));   
}); 
分享到:
评论

相关推荐

    Spirng-JdbcTemplate资料.docx

    Spring的JdbcTemplate是Spring框架为简化JDBC操作而设计的一个工具类库,它极大地降低了数据库访问的复杂性,使得开发者可以更加专注于业务逻辑,而不是繁琐的数据库连接管理和SQL语句的执行。JdbcTemplate通过一...

    JdbcTemplate所有jar包,文档

    JdbcTemplate是Spring框架中的一个核心组件,主要用于简化Java应用程序与数据库之间的交互。...在实际项目中,根据需求选择合适的方法进行数据访问,结合良好的文档资料,能够有效地提升开发质量和项目进度。

    spring学习资料

    本学习资料包含了Spring与Hibernate、JDBC的整合应用,这些都是Java后端开发的重要技术栈。 首先,让我们深入理解Spring框架。Spring的核心特性包括: 1. **依赖注入(Dependency Injection, DI)**:这是Spring最...

    spring-jdbc.rar_goldenw65_map25w_sellwof_spring-jdbc

    本资源“spring-jdbc.rar”包含的资料旨在帮助开发者理解并掌握Spring JDBC的基本原理和核心功能,从而在实际开发中更加高效地运用这一强大的工具。 一、Spring JDBC的概述 Spring JDBC通过一系列的抽象和模板类,...

    基于Java+Springboot+MySQL+Thymeleaf 架构的电影聚合系统源码+数据库+项目说明.zip

    3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 4、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于Java+...

    spring_integration_jdbc.rar_spring jdbc

    在本压缩包中,我们很可能会找到关于如何配置和使用Spring JDBC的相关资料。 1. **Spring JDBC概述** Spring JDBC的核心是`JdbcTemplate`和`SimpleJdbcTemplate`,这两个模板类极大地简化了数据库访问。它们提供了...

    spring学习:JDBC数据访问

    由于压缩包文件名称列表仅给出了"ch02",这可能是资料的章节编号或者目录结构,无法提供更具体的信息。如果"ch02"包含了相关源码或示例,那么它可能涵盖了上述JDBC数据访问的部分实践内容,如配置示例、使用示例或...

    FOP.rar_fop

    3. 使用Spring的JdbcTemplate或MyBatis等数据访问工具获取需要的数据。 4. 将数据转换为XML,然后用XSLT转换为XSL-FO格式。 5. 调用FOP API,将XSL-FO转换为所需的输出格式,如PDF。 6. 可能会涉及到文件的存储或...

    Spring技术内幕 学习笔记

    标题中的“Spring技术内幕 学习笔记”表明这是一份关于深入理解Spring框架核心机制的资料集合,主要关注Spring框架的内部工作原理和高级用法。描述中的“NULL”没有提供额外信息,但我们可以通过标签“源码”和...

    专题资料(2021-2022年)Java项目教学第一学期SSM框架讲义1Spring的基本应用.docx

    - Spring 作为一站式框架,提供了诸如 SpringMVC(Web 层)、Service 层的依赖注入以及 DAO 层的 JdbcTemplate 和与其他 ORM 框架(如 Hibernate)的集成。 1.1.2 Spring 的版本与目录结构 - Spring 有多个版本,如...

    spring mvc学习+数据分页+数据导入导出

    在本学习资料中,我们将深入探讨Spring MVC 3,这是一个广泛使用的版本,提供了许多改进和新特性。 首先,Spring MVC 3 提供了增强的注解支持,这使得开发者可以更方便地配置控制器和方法。`@Controller` 注解用于...

    Java-e-Jdbc-formacao-spring

    "Java-e-Jdbc-formacao-spring"可能是一个关于如何在Spring框架中使用Java Database Connectivity(JDBC)的培训或教程资料。Spring框架提供了对JDBC的强大支持,简化了数据库操作,并提供了事务管理、数据源配置...

    SpringBoot学习笔记完整教程

    8. **使用 JdbcTemplate 保存数据**:JdbcTemplate 是 Spring 提供的轻量级数据库访问工具,它可以更直接地操作 SQL。学习如何使用 JdbcTemplate 执行 SQL 语句,处理批量操作和事务控制。 9. **常用配置**:Spring...

    基于Springboot的美发管理系统(有报告) Javaee项目,springboot项目

    Spring Boot摒弃了传统的XML配置,转而采用自动化配置和Java配置,大大减少了繁琐的代码编写工作,提高了开发效率。 美发管理系统的实现,首先需要理解业务需求。该系统可能包括客户管理、预约管理、服务项目管理、...

    corejava_mysql:corejava_mysql笔记预习资料。需要源码的加扣扣849962874

    此外,了解Spring框架中的JdbcTemplate或MyBatis这样的ORM(Object-Relational Mapping)工具,可以进一步简化数据库操作,提高代码的可维护性。 在实际项目开发中,我们还会遇到诸如连接池(如C3P0、HikariCP)、...

    JdbcTemplateTool.zip

    又比如JdbcTemplate 可以帮忙把一个查询结果传化为一个对象列表,但是你需要查阅一些资料才知道要用 BeanPropertyRowMapper 。如果下次要用的时候又忘记了这个类,又要查一次或者翻以前的代码来看,其实完全可以提供...

    SpringBoot注解文档

    例如,如果你的项目中有JDBC相关的库,Spring Boot会自动配置数据源和JdbcTemplate。 3. `@ComponentScan`: 用于扫描指定包及其子包下的@Component、@Service、@Repository和@Controller等注解的类,将它们注册为...

    spring2.0技术手册.PDF

    Spring JDBC简化了JDBC操作,通过提供JdbcTemplate来避免直接处理JDBC API。Spring通过资源管理和异常处理,使代码更加简洁易读。此外,Spring还提供了对数据访问异常进行抽象的层次结构,并通过数据访问异常转换...

    王道训练营Java工程师 课程大纲1

    学员将深入理解Spring的IoC和AOP,SpringJdbcTemplate、事务管理和SpringMVC的工作流程。通过实际项目,巩固和提高SSM框架的使用能力。 整个课程体系覆盖了从Java基础到企业级应用开发的各个方面,旨在培养全面掌握...

Global site tag (gtag.js) - Google Analytics