1、使用JdbcTemplate的execute()方法执行SQL语句

  1. jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");

2、如果是UPDATE或INSERT,可以用update()方法。

  1. jdbcTemplate.update("INSERT INTO USER VALUES('"
  2. + user.getId() + "', '"
  3. + user.getName() + "', '"
  4. + user.getSex() + "', '"
  5. + user.getAge() + "')");

3、带参数的更新

  1. jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id});
  1. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)", new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()});

4、使用JdbcTemplate进行查询时,使用queryForXXX()等方法

  1. int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");
  1. String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?", new Object[] {id}, java.lang.String.class);
  1. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");
  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. }

JdbcTemplate将我们使用的JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等等。spring大量使用Template Method模式来封装固定流程的动作,XXXTemplate等类别都是基于这种方式的实现。

    除了大量使用Template Method来封装一些底层的操作细节,spring也大量使用callback方式类回调相关类别的方法以提供JDBC相关类别的功能,使传统的JDBC的使用者也能清楚了解spring所提供的相关封装类别方法的使用。

JDBC的PreparedStatement

  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. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",
  6. new PreparedStatementSetter() {
  7. public void setValues(PreparedStatement ps) throws SQLException {
  8. ps.setString(1, id);
  9. ps.setString(2, name);
  10. ps.setString(3, sex);
  11. ps.setInt(4, age);
  12. }
  13. });
  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. });
  1. class UserRowMapper implements RowMapper {
  2. public Object mapRow(ResultSet rs, int index) throws SQLException {
  3. User user = new User();
  4. user.setId(rs.getString("user_id"));
  5. user.setName(rs.getString("name"));
  6. user.setSex(rs.getString("sex").charAt(0));
  7. user.setAge(rs.getInt("age"));
  8. return user;
  9. }
  10. }
  11. public List findAllByRowMapperResultReader() {
  12. String sql = "SELECT * FROM USER";
  13. return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper()));
  14. }

在getUser(id)里面使用UserRowMapper

  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. return (User) list.get(0);
  6. }

网上收集

org.springframework.jdbc.core.PreparedStatementCreator 返回预编译SQL   不能于Object[]一起用

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

1.增删改

org.springframework.jdbc.core.JdbcTemplate   类(必须指定数据源dataSource)

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

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

org.springframework.jdbc.core.PreparedStatementSetter 接口 处理预编译SQL

  1. public void setValues(PreparedStatement ps) throws SQLException {
  2. ps.setInt(index++,3);
  3. }

2.查询JdbcTemplate.query(String,[Object[]/PreparedStatementSetter],RowMapper/RowCallbackHandler)

org.springframework.jdbc.core.RowMapper   记录映射接口  处理结果集

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

org.springframework.jdbc.core.RowCallbackHandler  记录回调管理器接口 处理结果集

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

JdbcTemplate增删改查的更多相关文章

  1. Spring JdbcTemplate框架搭建及其增删改查使用指南

    Spring JdbcTemplate框架搭建及其增删改查使用指南 前言: 本文指在介绍spring框架中的JdbcTemplate类的使用方法,涉及基本的Spring反转控制的使用方法和JDBC的基 ...

  2. spring学习(四)spring的jdbcTemplate(增删改查封装)

    Spring的jdbcTemplate操作 1.Spring框架一站式框架 (1)针对javaee三层,每一层都有解决技术 (2)到dao 层,使用 jdbcTemplate 2.Spring对不同的 ...

  3. JdbcTemplate实现增删改查操作

    JdbcTemplate介绍 为了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定义了一个抽象层, 以此建立一个JDBC存取框架,Spring Boot Spring Data-JP ...

  4. SpringBoot2+Druid+JdbcTemplate+MySql实现增删改查

    1.配置pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...

  5. SpringMvc学习-增删改查

    本节主要介绍SpringMVC简单的增删改查功能. 1.查询 dao中的代码 public List<WeatherPojo> getAllWeather(){ String sql=&q ...

  6. 【java学习】spring mvc 公共dao的实现,定义基本的增删改查

    接口类: package com.blog.db.dao; import com.blog.util.Pagination; import java.util.List; public interfa ...

  7. springMVC实现增删改查

    首先需要准备好一张数据库表我这里用emp这张表:具体代码: /* SQLyog 企业版 - MySQL GUI v8.14 MySQL - 5.1.73-community ************* ...

  8. SpringMVC+SpringJdbc+SQLServer+EasyUI增删改查

    前言 前天用SpringJdbc连接了一把SQLServer,早上起来用SpringMVC+SpringJdbc+EasUI写了个增删改查的demo,主要是熟悉下SpringMVC相关知识点,如vie ...

  9. Rest架构下的增删改查

    首先还是要连接一下什么是Rest, REST是英文representational state transfer(表象性状态转变)或者表述性状态转移;Rest是web服务的一种架构风格;使用HTTP, ...

随机推荐

  1. python模拟http请求2

    发现了一个非常好用的第三方module:requests,模拟接口非常简单. 详细了解请移步:http://docs.python-requests.org/en/latest/ 非常不错 #!cod ...

  2. poj 2230 Watchcow(欧拉回路)

    关键是每条边必须走两遍,重复建边即可,因为确定了必然存在 Euler Circuit ,所以所有判断条件都不需要了. 注意:我是2500ms跑过的,鉴于这道题ac的code奇短,速度奇快,考虑解法应该 ...

  3. Android手动画柱状图的例子

    效果图如上,网上看到的例子,谨以此文记录一下,以后用到的地方再来翻翻. 核心技术是用Canvas和Paint画长方形. 源码地址:http://download.csdn.net/detail/abc ...

  4. STM32F407 外扩SRAM

    字节控制功能.支持高/低字节控制. 看看实现 IS62WV51216 的访问,需要对 FSMC进行哪些配置. 这里就做一个概括性的讲解.步骤如下: 1)使能 FSMC 时钟,并配置 FSMC 相关的  ...

  5. 修改linux主机名称

    linux修改主机名如下操作即可: [root@kel ~]# cat /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAM ...

  6. 线性方法用于Binary clssification

    到现在,我们已经学过三种线性方法:linear classification.Linear Regression.logistic Regression.这三种方法的核心都是,不同点在于:最小化的er ...

  7. bzoj 3218 a + b Problem(最小割+主席树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3218 [题意] 给n个格子涂白或黑色,白则wi,黑则bi的好看度,若黑格i存在: 1& ...

  8. Designing Evolvable Web API with ASP.NET 随便读,随便记 “The Internet,the World Wide Web,and HTTP”

    1982年,诞生了 Internet; 1989年,诞生了World Wide Web . "World Wide Web"的构造为主要由 三部分构成: resources 资源 ...

  9. Java8新特性 1——利用流和Lambda表达式操作集合

    Java8中可以用简洁的代码来操作集合,比如List,Map,他们的实现ArrayList.以此来实现Java8的充分利用CPU的目标. 流和Lambda表达式都是Java8中的新特性.流可以实现对集 ...

  10. VS2012编译可在WinXP兼容程序

    VS2012需要安装Update 1补丁 在Project的属性 选择 配置属性 - 常规 - 平台工具集 - Visual Studio 2012 - Windows XP (v110_xp) 在P ...