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. 编译pure-ftpd时提示错误Your MySQL client libraries aren't properly installed

    如果出现类似configure: error: Your MySQL client libraries aren’t properly installed 的错误,请将mysql目录下的 includ ...

  2. Nginx & AWStats 安装、配置、使用

    —— 参考IBM文章:THIS , 不一样的指导顺序 —— 1. awstats分析nginx - access.log,网上资料大部分都是下载,然后配置.官网下载地址: http://awstats ...

  3. 【web】web欢迎页面执行servlet

    <!-- servlet名 --> <welcome-file-list> <welcome-file>Begin_page</welcome-file> ...

  4. [转] “error LNK2019: 无法解析的外部符号”之分析

    HiLoveS原文“error LNK2019: 无法解析的外部符号”之分析 最近在用VS 2008开发,初学遇到不少问题,最头疼的问题之一就是:LNK2019. 百度一下讲的并不够全面,反正都没解决 ...

  5. [Everyday Mathematics]20150206

    $$\bex \sen{fg}_{L^1}\leq C\sen{f}_{L^{r,\al}}\sen{g}_{L^{r',\al'}}, \eex$$ 其中 $$\bex f\in L^{r,\al} ...

  6. Gridview LookupEdit gridLookUpEdit z

    LookupEdit一般用法: 绑定数据源:                                 lookUpEdit.Properties.ValueMember = 实际要用的字段;  ...

  7. CodeForces 558E(计数排序+线段树优化)

    题意:一个长度为n的字符串(只包含26个小字母)有q次操作 对于每次操作 给一个区间 和k k为1把该区间的字符不降序排序 k为0把该区间的字符不升序排序 求q次操作后所得字符串 思路: 该题数据规模 ...

  8. HDU 4911 Inversion

    http://acm.hdu.edu.cn/showproblem.php?pid=4911   归并排序求逆对数. Inversion Time Limit: 2000/1000 MS (Java/ ...

  9. CABasicAnimation(CAKeyframeAnimation)keypath 取值

    - keyPath可以使用的key - #define angle2Radian(angle) ((angle)/180.0*M_PI) - transform.rotation.x 围绕x轴翻转 参 ...

  10. 【C++11】 lambda表达式

    i.e.int x = 10;int y = 20;int z = [&]{ x = x * x; y = y * y; return x + y;}(); 上面z后面以[]开头的为一个lam ...