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中使用单例模式编程
本文转载至 http://blog.csdn.net/remote_roamer/article/details/7107007 1. @implementation Singleton ...
- 性能测试--测试流程、APDEX、linux性能知识
测试流程.APDEX.linux性能知识 一.性能测试流程: 整体流程:收集需求-->搭建测试环境-->设计性能测试场景-->开发测试脚本-->执行测试-->收集数据-- ...
- python使用记录
#2017-7-17 1.用len()函数可以获得list元素的个数; len()可以获取字符串长度 2. list正向0开始索引,,逆向-1开始索引; 也可以把元素插入到指定的位置,比如索引号为1的 ...
- ABAP 给动态变量赋值
[转自 http://blog.csdn.net/forever_crazy/article/details/6544830] 需求: 有时写程序的时候,需要给某个动态变量 赋值操作,当字段比较多时, ...
- CentOS7的yum安装mysql
CentOS7的yum源中默认好像是没有mysql的.为了解决这个问题,我们要先下载mysql的repo源. 1. 下载mysql的repo源 $ wget http://repo.mysql.com ...
- String源码中hashCode算法
针对java中String源码hashcode算法源码分析 /** The value is used for character storage. */ private final char val ...
- koa-bodyparser返回413状态码的问题
413 Request Entity Too Large(请求实体太大) 数日前,我用 node.js 写的一个日志服务抛出了这个状态码-- 自己写的服务抛出了一个自己都不认识的状态码,这是最气的!( ...
- win8+sdk8+vs2012+freeglut+glew开发opengl
写给想要学习opengl的同学们. 刚开始学习opengl的时候,对于整个环境的搭建以及一些概念不太清晰,网上的资料又比较凌乱,因此在此总结一下,方便大家. 首先,是有一个windows系统,我用的是 ...
- smokeping再次部署遇到的问题记录
问题1: Can't locate Sys/Syslog.pm in @INC (@INC contains: /opt/smokeping_workspace/thirdparty/lib/perl ...
- 2013各大IT公司薪资标准
以此鼓励自己 :http://jinhua.19lou.com/forum-874-thread-115901362964023509-1-1.html 以下三个是老大级别的公司 [微软] 研 ...