Spring:JdbcTemplate使用指南
Spring:JdbcTemplate使用指南
前言:
本文指在介绍Spring框架中的JdbcTemplate类的使用方法,涉及基本的Spring反转控制的使用方法和JDBC的基本概念。目标是使读者能够对JdbcTemplate快速地掌握和使用。
准备:
1. Spring的基本概念
Spring框架核心的思想就是建立一个Java对象的大工厂,用户只要给工厂一个指令,工厂就能将用户需要的对象根据配置文件组装好返还给用户。用户需要做的许多工作则可以写成简单的配置文件。
2. 丑陋的JDBC代码
|
Connection con= null; PreparedStatement pStmt=null; ResultSet rs = null; try{ con = ods.getConnection(); String sql = "select * from admin"; pStmt=con.prepareStatement(sql); rs=pStmt.executeQuery(); while(rs.next()) { } } catch(Exception ex) { try{ con.rollback(); }catch(SQLException sqlex){ sqlex.printStackTrace(System.out); } ex.printStackTrace(); }finally{ try{ rs.close(); pStmt.close(); con.close(); }catch(Exception } |
以上是常见的JDBC代码,简单的select语句也需要冗长的出错处理,并且每个函数都不断地重复同样的代码。
3. JdbcTemplate的作用
JdbcTemplate正是为了减少上述繁琐的代码而设计出来的。它是对JDBC的一种封装,抽象我们常用的一些方法。Simple and Stupid就是它的目标。下面是完成了刚才JDBC代码同样功能的JdbcTemplate的代码:
|
String sql = "select * from admin"; jdbcTemplate.query(sql,new RowCallbackHandler() public void processRow(ResultSet rs) throws } } ); |
环境搭建:
1. 数据库的配置
本文使用Oracle数据库,新建表admin:
|
create table admin ( |
2. Spring配置
JdbcTemplate的使用需要有DataSource的支持,所以在配置文件中,我们首先要配置一个OracleDataSource,然后在将这个DataSource配置到JdbcTemplate里。接着将JdbcTemplate配置进DAO层,最后将DAO配置进Model层。简要的关系如下:
|
模型层 |
|
数据访问层:UserDAO |
|
JdbcTemplate |
|
OracleDataSource |
<
!--[if !vml]-->
|
"http://www.springframework.org/dtd/spring-beans.dtd"> jdbc:oracle:thin:root/123@localhost:1521/XE class="org.springframework.jdbc.core.JdbcTemplate"> |
3. 环境配置,
如图:
使用方法:
1. 查找
多行查询:
|
class UserRowMapper implements RowMapper public Object mapRow(ResultSet rs,int index) { User u = new User(); u.setId(rs.getString("ID")); u.setName(rs.getString("Name")); u.setPassword(rs.getString("Password")); return u; } } public List select(String where) { List list; String sql = "select * from admin list = jdbcTemplate.query(sql,new return list; } |
List最终返回的是满足条件的User队列。
单行查询:
|
public User selectById(String id){ String sql = "select * from admin where final User u = new User(); final Object[] params = new Object[] jdbcTemplate.query(sql, params, new public void processRow(ResultSet rs) throws u.setId(rs.getString("ID")); u.setName(rs.getString("NAME")); u.setPassword(rs.getString("PASSWORD")); } }); return u; } |
2. 插入
|
public void insert(User u) { String sql = "insert into admin (ID,NAME,PASSWORD) Object[] params = new Object[] { u.getName(), u.getPassword() }; jdbcTemplate.update(sql,params); } |
admin_id_seq.nextval为Oracle设置好的序列,问号“?”被params里的数据依次替代,最终执行sql。
3. 修改
非常简单:
|
public void update(String how) { jdbcTemplate.update(how); } |
源代码:
User.class:
|
package Model; import java.util.List; import DAO.UserDAO; public class User { private String name; private String id; private String password; private UserDAO dao; public User() { } public User(String name, String { this.name = name; this.password = password; } public void setDao(UserDAO dao) { this.dao = dao; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) this.password = password; } public void getInfo(String id) { List list = dao.select("where id="+id); User u = (User) list.get(0); this.id=id; this.name = u.getName(); this.password = u.getPassword(); } public void insert() { dao.insert(this); } public void update(String how) { dao.update(how); } public void update() { dao.update("update admin set name='"+name+"', } public List selectWithTemp(String { return dao.select(where); } public void selectWithTemp() { dao.selectWithTemp(); } public User selectById(String id) { return dao.selectById(id); } public void insertUsers(List users) { dao.insertUsers(users); } } |
UserDAO.class :
|
package DAO; import java.util.List; import Model.User; public interface UserDAO { public void select(); public void test(); public void selectWithTemp(); public List select(String where); public void update(String how); public void insert(User u); public User selectById(String id); public int[] insertUsers(final List } |
UserDAOImp.class:
|
package DAO.Imp; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import import import import import import DAO.UserDAO; import Model.User; public class UserDAOImp implements private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate { this.jdbcTemplate = jdbcTemplate; } class UserRowMapper implements { public Object mapRow(ResultSet rs,int index) { User u = new User(); u.setId(rs.getString("ID")); u.setName(rs.getString("Name")); u.setPassword(rs.getString("Password")); return u; } } public void selectWithTemp() { String sql = "select * from admin"; jdbcTemplate.query(sql,new RowCallbackHandler() public void processRow(ResultSet rs) throws System.out.println("ID: "+rs.getString("ID")+" } } ); } public List select(String where) { List list; String sql = "select * from admin list = jdbcTemplate.query(sql,new return list; } public User selectById(String id) { String sql = "select * from admin where final User u = new User(); final Object[] params = new Object[] jdbcTemplate.query(sql,params, new public void processRow(ResultSet rs) throws u.setId(rs.getString("ID")); u.setName(rs.getString("NAME")); u.setPassword(rs.getString("PASSWORD")); } }); return u; } public void update(String how) { String sql = how; jdbcTemplate.update(sql); } public void insert(User u) { String sql = "insert into admin (ID,NAME,PASSWORD) Object[] params = new Object[] { u.getName(), u.getPassword()}; jdbcTemplate.update(sql,params); } } |
UserAction.class:
|
//测试类 public class UserAction { public static void main(String[] args) { Resource resource=new BeanFactory factory = new User user = (User) user.selectWithTemp(); } } |
版权声明:本文为博主原创文章,未经博主允许不得转载。
Spring:JdbcTemplate使用指南的更多相关文章
- Spring JdbcTemplate框架搭建及其增删改查使用指南
Spring JdbcTemplate框架搭建及其增删改查使用指南 前言: 本文指在介绍spring框架中的JdbcTemplate类的使用方法,涉及基本的Spring反转控制的使用方法和JDBC的基 ...
- Spring JDBCTemplate配置使用
一.开发环境 Windows 10 IntelliJ IDEA 2016.1 旗舰版 JDK1.8 二.项目和数据库结构 项目结构: 数据库(MySQL 5.5.39): /* Navicat MyS ...
- Spring boot参考指南
介绍 转载自:https://www.gitbook.com/book/qbgbook/spring-boot-reference-guide-zh/details 带目录浏览地址:http://ww ...
- (转)Spring JdbcTemplate 方法详解
Spring JdbcTemplate方法详解 文章来源:http://blog.csdn.net/dyllove98/article/details/7772463 JdbcTemplate主要提供 ...
- 《Spring MVC学习指南》怎么样?答:书名具有很大的欺骗性
2016年6月21日 最近,因为工作需要,我从网上买了一本<Spring MVC学习指南>,ISBN编号: 978-7-115-38639-7,定价:49.00元.此书是[美]Paul D ...
- [转]Spring JdbcTemplate 查询分页
原文:http://blog.csdn.net/xiaofanku/article/details/4280128 现在进行的项目由于数据库的遗留原因(设计的不堪入目)不能用hibernate.所以用 ...
- spring jdbcTemplate query
1. spring jdbcTemplate query需要实现mapRow方法 package com.cdv.apolloagent.jdbc.dao.impl; import java.sql. ...
- Spring JdbcTemplate 的使用与学习(转)
紧接上一篇 (JdbcTemplate是线程安全的,因此可以配置一个简单的JdbcTemplate实例,将这个共享的实例注入到多个DAO类中.辅助的文档) Spring DAO支持 http://ww ...
- Spring JdbcTemplate的queryForList(String sql , Class<T> elementType)易错使用--转载
原文地址: http://blog.csdn.net/will_awoke/article/details/12617383 一直用ORM,今天用JdbcTemplate再次抑郁了一次. 首先看下这个 ...
随机推荐
- 数据结构与算法之枚举(穷举)法 C++实现
枚举法的本质就是从全部候选答案中去搜索正确的解,使用该算法须要满足两个条件: 1.能够先确定候选答案的数量. 2.候选答案的范围在求解之前必须是一个确定的集合. 枚举是最简单.最基础.也是最没效率的算 ...
- web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!
本文转自:http://www.cnblogs.com/babosa/p/7355468.html 需求 问题:有没有flash播放RTSP的播放器?H5能不能支持RTSP播放? 答案:没见过,以后估 ...
- php总结7——文件函数库、序列化数据、文件包含
7.1 文件函数库 php用来操作文件的 1) fopen 代开文件或URL 格式:resource fopen(string $filename, string $mode) 'r' 只读方式 ...
- python数据分析之:数据清理,转换,合并,重塑(二)
一:移除重复数据 DataFrame经常出现重复行,就像下面的这样 In [7]: data=DataFrame({'k1':['one']*3+['two']*4,'k2':[1,1,2,3,3,4 ...
- Linux就该这么学--Shell脚本条件语句(一)
1.条件测试语句能够让Shell脚本根据实际工作灵活调整工作内容,例如判断系统的状态后执行指定的工作,或创建指定数量的用户,批量修改用户密码,这些都可以让Shell脚本通过条件测试语句完成. if条件 ...
- 利用wxpython显示OpenCV图像
核心代码 import wx, cv2 import numpy as np # Start with a numpy array style image I'll call "source ...
- BFC和haslayout(IE6-7)(待总结。。。)
支持BFC的浏览器(IE8+,firefox,chrome,safari) Block Formatting Context(块格式化上下文)是W3C CSS2.1规范中的一个慨念,在CSS3中被修改 ...
- 【python】用python脚本Paramiko实现远程执行命令、下载、推送/上传文件功能
Paramiko: paramiko模块,基于SSH用于连接远程服务器并执行相关操作. SSHClient: 用于连接远程服务器并执行基本命令 SFTPClient: 用于连接远程服务器并执行上传下载 ...
- Express的基本使用
前言 列表项目Express是一个简介而灵活的node.js Web应用框架提供的一系列强大特性帮助你创建各种 Web 应用,和丰富的HTTP工具. 正文 一个简单的express框架实例 ``` / ...
- 如何使用安信可 ESP 系列一体化开发环境【转】
本文转载自:http://wiki.ai-thinker.com/ai_ide_use 关于 Problems 报错 注意:Eclipse 只是一个代码编写工具,它并不能读取 makefile 里面的 ...