JdbcTemplate增删改查

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

Java代码  

  1. 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() + "‘)");

3、带参数的更新

Java代码  

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

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

Java代码  

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

Java代码  

  1. 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. }

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

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

Java代码  

  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

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

网上收集

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

Java代码  

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

1.增删改

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

Java代码  

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

Java代码  

  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

Java代码  

  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   记录映射接口  处理结果集

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

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

JdbcTemplate增删改查

时间: 2024-10-12 00:34:08

JdbcTemplate增删改查的相关文章

JdbcTemplate(增删改查以及以注释实现增删改查)

JdbcTemplate介绍 为了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定义了一个抽象层, 以此建立一个JDBC存取框架,Spring Boot Spring Data-JPA. 作为 SpringJDBC 框架的核心, JDBC 模板的设计目的是为不同类型的JDBC操作提供模板方法. 每个模板方法都能控制整个过程,并允许覆盖过程中的特定任务. 通过这种方式,可以在尽可能保留灵活性的情况下,将数据库存取的工作量降到最低. JdbcTemplate方法介绍 execute

JdbcTemplate增删改查案例

架包 <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.0.RELEASE</version> </d

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

Spring的jdbcTemplate操作 1.Spring框架一站式框架 (1)针对javaee三层,每一层都有解决技术 (2)到dao 层,使用 jdbcTemplate 2.Spring对不同的持久化都进行了封装 (1)jdbcTemplate  对  jdbc 进行封装 3.jdbcTemplate 使用和 dbutils 使用很相似,都是对数据库进行 crud 操作 4.使用jdbcTemplate 实现增删改查操作 增加: 1.导入 jdbcTemplate 相关jar 包 一定要导

JdbcTemplate实现增删改查操作

JdbcTemplate介绍 为了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定义了一个抽象层, 以此建立一个JDBC存取框架,Spring Boot Spring Data-JPA. 作为 SpringJDBC 框架的核心, JDBC 模板的设计目的是为不同类型的JDBC操作提供模板方法. 每个模板方法都能控制整个过程,并允许覆盖过程中的特定任务. 通过这种方式,可以在尽可能保留灵活性的情况下,将数据库存取的工作量降到最低. JdbcTemplate方法介绍 JdbcTem

BootStrap DataTables Spring MVC简单增删改查实例

1 <!DOCTYPE html> 2 <%@ page contentType="text/html;charset=gbk" language="java" %> 3 <%@page isELIgnored="false" %> 4 <meta name="viewport" content="width=device-width, initial-scale=1&quo

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

接口类: package com.blog.db.dao; import com.blog.util.Pagination; import java.util.List; public interface PublicDao<T> { public void setMapper(Class t); public void setTableName(String tn); public List<T> queryList(Pagination pagination); public

springMVC实现增删改查

首先需要准备好一张数据库表我这里用emp这张表:具体代码: 1 /* 2 SQLyog 企业版 - MySQL GUI v8.14 3 MySQL - 5.1.73-community 4 ********************************************************************* 5 */ 6 /*!40101 SET NAMES utf8 */; 7 8 create table `emp` ( 9 `empno` double , 10 `en

Python 模拟SQL对文件进行增删改查

1 #!/usr/bin/env python 2 # _*_ coding:UTF-8 _*_ 3 # __auth__: Dalhhin 4 # Python 3.5.2,Pycharm 2016.3.2 5 # 2017/05/15 6 7 import sys,os 8 9 def where(dbfile,where_list): #条件是一个list 10 11 def and_or_where(sub_where_list): 12 '''获取and或同时含有and.or关键字的条

【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建

数据库的创建和sql语句增删改查 1. 加载驱动. 2. 连接数据库. 3. 操作数据库. 创建表: create table person( _id integer primary key, name varchar(20), age integer ); 添加: insert into person(name, age) values('lisi', 19); 删除: delete from person where _id = 1; 修改: update person set name =