`
AILIKES
  • 浏览: 177558 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JdbcTemplate学习笔记

阅读更多

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

  1. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");
  2. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");  
  3. Iterator it = rows.iterator();  
  4. while(it.hasNext()) {  
  5.     Map userMap = (Map) it.next();  
  6.     System.out.print(userMap.get("user_id") + "\t");  
  7.     System.out.print(userMap.get("name") + "\t");  
  8.     System.out.print(userMap.get("sex") + "\t");  
  9.     System.out.println(userMap.get("age") + "\t");  
  10. }  

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

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

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

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

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.   
  3.  public void setValues(PreparedStatement ps) throws SQLException {  
  4.   ps.setInt(index++,3);  
  5. });  


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

相关推荐

    Java框架学习笔记04 ── Spring( JdbcTemplate)

    Spring对JDBC进行了封装,提供了JdbcTemplate类,该类使Spring框架数据抽象层的基类,还有一些更高层次的类继承该类。使用该类要导入几个必须的jar包,分别是spring-jdbc-4.0.0.RELEASE.jar、spring-orm-4.0.0....

    设计模式学习笔记(十五)命令模式及在Spring JdbcTemplate 中的实现.doc

    设计模式学习笔记(十五)命令模式及在Spring JdbcTemplate 中的实现.doc

    SpringBoot 学习笔记+完整教程

    * 使用 JdbcTemplate 保存数据 * 常用配置 * 静态资源处理 * 实现任务调度 * 普通类调用 Bean * 使用模板引擎 * 集成 JSP * 集成 servlet * 集成 Fliter 和 Linstener * 拦截器 HandlerInterceptor * 系统启动任务 ...

    Spring入门学习笔记|Spring学习.pdf

    Spring入门学习笔记,内容包括Spring介绍,Spring配置文件,Spring配置数据源,Spring的注解开发,Spring集成Junit,Spring的AOP,jdbcTemplate介绍,Spring控制事务流程,Spring集成web。

    Spring+SpringMVC基础学习笔记(b站课程学习笔记)

    Spring SpringMVC JdbcTemplate

    SpringBoot学习笔记完整教程

    Spring Boot 学习笔记,包括底层实现原理及代码实战,非常齐全,助你快速打通 Spring Boot 的各个环节。 1. Spring boot helloworld 2. Spring boot 返回 json 数据 3. Spring boot 使用其他 json 转换框架 4. ...

    Spring笔记之整合JdbcTemplate.doc

    spring提供了一个工具类JdbcTemplate,在类中对JDBC增删改查做了封装 JdbcTemplate: Spring 框架中提供一个ORM技术,对JDBC进行了封装 类似于我们之前的mybatis框架,...学习目标:了解该技术的使用、掌握单表的增删改查

    SpringBoot操作数据库JdbcTemplate-SB系列之005

    SpringBoot操作数据库JdbcTemplate--SB系列之005的配套项目代码。 环境: win11 工具: idea 2017 jdk: 1.8 数据库: mysql5.5  maven : 3.2.1 项目:maven 导入 首先介绍一下本人与本篇: 因为本篇之后其实...

    springboot-learn:SpringBoot学习笔记

    SpringBoot学习笔记 1,集成mybatis并使用替换的事务配置 2,多数据源配置 3,集成redis配置 4,使用jdbcTemplate和spring-data-jpa操作数据库 5,结合AOP实现参数验证 6,SpringBoot整合es基本操作 7,整合swagger-...

    spring学习笔记

    目录 1.1 Spring 框架学习路线:...........................................................................................................................4 1.2 Spring 框架的概述:...........................

    day01_eesy_01mybatis.zip

    学习笔记——mybatis的起步(1) 1.什么是框架? 他是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题。 使用框架的好处: 框架封装了很多的细节,使开发者可以使用极简的方式实现功能。大大提高...

    JAVA WEB学习课件及代码详解第二部分

    JAVA的J2EE WEB学习资料,其中包括了学习视频、讲义、笔记、以及练习代码等,适合刚接触JAVA同时需要搭建WEB平台的同学使用。 此为第一部分,包括以下课程内容: 1、day05_JDBC 2、day06_JDBC连接池&JDBCTemplate 3...

    springboot demo 合集(如何没有积分可以私信)

    Spring Boot干货系列,分享学习中整理的一些笔记和源码 博文对应源码 Spring boot干货系列:(一)优雅的入门篇:chapter1 Spring Boot干货系列:(二)配置文件解析:chapter2 Spring Boot干货系列:(三)启动原理...

Global site tag (gtag.js) - Google Analytics