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再次抑郁了一次. 首先看下这个 ...
随机推荐
- ios何时使用self.
本文转载至 http://blog.csdn.net/lvxiangan/article/details/27204265 何时使用self.在网上搜索或者论坛里的回复大多都是简简单单的说这与 ...
- python 基础 6.1 异常处理方法
一. Excepthion 异常类 Excepthion 是所有的异常基础类(),对于python 的标准异常,我们列出如下,以做参考: 异常名称 ...
- jquery在网页实时显示时间;
1.定义一个显示时间的位置 <div id="shijian"> </div> 2.jquery代码 function showTime() { var c ...
- ms人物上线
在看MS人物上线 else if(gs2ms_add_player == pkt.cmd) { PlayerChannel* pPC = new PlayerChannel(this); //加到地图 ...
- Filebeat+ELK
Filebeat+ELK filebeat是logstash的升级版,从功能上来说肯定不如logstash,但是logstah比较耗费资源: filebeat安装 暂时依托于window系统 下载fi ...
- 九度OJ 1030:毕业bg (01背包、DP)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1814 解决:798 题目描述: 每年毕业的季节都会有大量毕业生发起狂欢,好朋友们相约吃散伙饭,网络上称为"bg" ...
- git拉取远程分支到本地分支或者创建本地新分支
git fetch origin branchname:branchname 可以把远程某各分支拉去到本地的branchname下,如果没有branchname,则会在本地新建branchname g ...
- BCH分叉是一次站队博弈
BCH分叉在即,很多人说BCH本次分叉实质是大佬间的斗争,主要是本次BCH分叉主要分为两大派别: 一派以BCH用户量最大的客户端Bitcoin ABC开发组为主,要在11月15日展开硬分叉升级,主要升 ...
- 扫盲--.net 程序集
前言:用了几天的时间把高级编程里面程序集一章看完了,原来自己只知道写代码,右键添加引用,从来也不知道操作的实质是什么,微软总是这个套路,鼠标点点就能把任务完成,这对新手友好但是对要通透了解程序执行和内 ...
- Python实现简易HTTP服务器
一.Python3 搭建简易HTTP服务器 python -m http.server 浏览器访问:http://localhost:8000 Python3 cgiserver python -m ...