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再次抑郁了一次. 首先看下这个 ...
随机推荐
- 【Android开发-5】界面装修,五大布局你选谁
前言:假设要开一家店,门店装修是非常重要的事情.有钱都请专门的建筑设计公司来设计装修,没钱的仅仅能自己瞎折腾.好不好看全凭自己的感觉.像Android开发.在移动端大家看到的界面视觉不咋滴,一般连打开 ...
- python 基础 7.6 sys 模块
一.sys 模块 sys 模块主要功能是获取参数 [root@www pythonscripts]# cat 2.py #!/usr/bin/python #coding=utf-8 im ...
- 兔子的晚会 2016Vijos省选集训 day1
兔子的晚会 (xor.c/pas/cpp)============================= 很久很久之前,兔子王国里居住着一群兔子.每到新年,兔子国王和他的守卫总是去现场参加晚会来欢庆新年. ...
- 解决因 gtx 显卡而导致的 google chrome 颜色显示不正常。色彩变淡发白,其实很简单
笔者因为换了用 gtx 1050 显卡替换了原来的集显. 导致chrome浏览器渲染颜色变淡而且泛白. 查了下肯能是因为换了显卡,没换高清显示器. 导致chrome自动启用了 dispaly p3 d ...
- EasyNVR无插件IPC摄像机直播方案前端构建之:区分页面是自跳转还是分享依据
区分分享还是跳转 对于前端一些页面的展示,通常有两种方式:通过入口链接一步步进入,或是通过分享链接直接进入:对于这两种方式的区别是什么?在进行前端书写时又应该如何处理? 以EasyNVR为例来进行说明 ...
- 九度OJ 1028:继续畅通工程 (最小生成树)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3140 解决:1338 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有 ...
- var foo = "11"+2+"1"; console.log(foo); //1121 好多文章答案写错了,我发下给初学的朋友看到,以免一开始就学错了
体会加一个字符串'1' 和 减去一个字符串'1'的不同 var foo = "11"+2-"1"; console.log(foo); //111 consol ...
- 在tomcat下直接访问Html报错,说找不到资源(404)
今天由于工作需要,想把一个html直接放到tomcat(干净的tomcat,没有做过任何修改.)下进行访问,然后根据经验就直接在webapps下创建了个文件夹test,然后把需要的test.html拷 ...
- FI模块与SD、MM的接口配置方法
[转自 http://blog.itpub.net/195776/viewspace-1023910/] 1 FI/SD 借口配置FI/SD通过tcode VKOA为billing设置过帐科目,用户可 ...
- C++三种继承方式
一.三种继承方式 继承方式不同,第一个不同是的是派生类继承基类后,各成员属性发生变化.第二个不同是派生类的对象能访问基类中哪些成员发生变化.表格中红色标注.