前言:
本文指在介绍Spring框架中的JdbcTemplate类的使用方法,涉及基本的Spring反转控制的使用方法和JDBC的基本概念。目标是使读者能够对JdbcTemplate快速地掌握和使用。
原创不易,转载请注明出处:Spring JdbcTemplate框架搭建及其增删改查使用指南
代码下载地址:http://www.zuidaima.com/share/1724429678644224.htm
准备:
1. Spring的基本概念
Spring框架核心的思想就是建立一个Java对象的大工厂,用户只要给工厂一个指令,工厂就能将用户需要的对象根据配置文件组装好返还给用户。用户需要做的许多工作则可以写成简单的配置文件。
2. 丑陋的JDBC代码
01 |
Connection
con = null ; |
02 |
PreparedStatement
pStmt = null ; |
03 |
ResultSet
rs = null ; |
04 |
try { |
05 |
con
= ods.getConnection(); |
06 |
String
sql = "select
* from admin" ; |
07 |
pStmt
= con.prepareStatement(sql); |
08 |
rs
= pStmt.executeQuery(); |
09 |
while (rs.next())
{ |
10 |
} |
11 |
} catch (Exception
ex) { |
12 |
try { |
13 |
con.rollback(); |
14 |
} catch (SQLException
sqlex) { |
15 |
sqlex.printStackTrace(System.out); |
16 |
} |
17 |
ex.printStackTrace(); |
18 |
19 |
} finally { |
20 |
try { |
21 |
rs.close(); |
22 |
pStmt.close(); |
23 |
con.close(); |
24 |
} catch (Exception
e) { |
25 |
e.printStackTrace(); |
26 |
} |
27 |
} |
以上是常见的JDBC代码,简单的select语句也需要冗长的出错处理,并且每个函数都不断地重复同样的代码。
3. JdbcTemplate的作用
JdbcTemplate正是为了减少上述繁琐的代码而设计出来的。它是对JDBC的一种封装,抽象我们常用的一些方法。Simple and Stupid就是它的目标。下面是完成了刚才JDBC代码同样功能的JdbcTemplate的代码:
1 |
String
sql = "select
* from admin" ; |
2 |
3 |
jdbcTemplate.query(sql, new RowCallbackHandler()
{ |
4 |
5 |
public void processRow(ResultSet
rs) throws SQLException
{ |
6 |
7 |
} |
8 |
9 |
}
); |
环境搭建:
1. 数据库的配置
本文使用Mysql数据库,新建表admin:
1 |
CREATE TABLE `admin`
( |
2 |
`ID` bigint (20)
unsigned NOT NULL auto_increment, |
3 |
` NAME ` varchar (100) NOT NULL , |
4 |
` PASSWORD ` varchar (200) NOT NULL , |
5 |
PRIMARY KEY (`ID`) |
6 |
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 |
2. Spring配置
JdbcTemplate的使用需要有DataSource的支持,所以在配置文件中,我们首先要配置一个OracleDataSource,然后在将这个DataSource配置到JdbcTemplate里。接着将JdbcTemplate配置进DAO层,最后将DAO配置进Model层。简要的关系如下:
01 |
<? xml version = "1.0" encoding = "UTF-8" ?> |
02 |
<!DOCTYPE
beans PUBLIC "-//SPRING//DTD BEAN//EN" |
04 |
< beans > |
05 |
< bean id = "dataSource" |
06 |
class = "org.springframework.jdbc.datasource.DriverManagerDataSource" > |
07 |
< property name = "driverClassName" value = "com.mysql.jdbc.Driver" /> |
08 |
< property name = "url" value = "jdbc:mysql://localhost:3306/zuidaima_admin?useUnicode=true&characterEncoding=utf-8" /> |
09 |
< property name = "username" value = "root" /> |
10 |
< property name = "password" value = "111111" /> |
11 |
</ bean > |
12 |
13 |
< bean id = "jdbcTemplate" class = "org.springframework.jdbc.core.JdbcTemplate" > |
14 |
< property name = "dataSource" > |
15 |
< ref bean = "dataSource" /> |
16 |
</ property > |
17 |
</ bean > |
18 |
19 |
< bean id = "userDao" class = "com.zuidaima.dao.impl.UserDaoImpl" > |
20 |
< property name = "jdbcTemplate" > |
21 |
< ref bean = "jdbcTemplate" /> |
22 |
</ property > |
23 |
</ bean > |
24 |
25 |
< bean id = "user" class = "com.zuidaima.model.User" > |
26 |
< property name = "dao" > |
27 |
< ref bean = "userDao" /> |
28 |
</ property > |
29 |
</ bean > |
30 |
31 |
</ beans > |
3. 项目截图:
使用方法:
1.查找
多行查询:
01 |
class UserRowMapper implements RowMapper
{ |
02 |
03 |
public Object
mapRow(ResultSet rs, int index) throws SQLException |
04 |
05 |
{ |
06 |
07 |
User
u = new User(); |
08 |
09 |
u.setId(rs.getString( "ID" )); |
10 |
11 |
u.setName(rs.getString( "Name" )); |
12 |
13 |
u.setPassword(rs.getString( "Password" )); |
14 |
15 |
return u; |
16 |
17 |
} |
18 |
19 |
} |
20 |
21 |
public List
select(String where) |
22 |
23 |
{ |
24 |
25 |
List
list; |
26 |
27 |
String
sql = "select
* from admin " +where; |
28 |
29 |
list
= jdbcTemplate.query(sql, new RowMapperResultReader( new UserRowMapper())); |
30 |
31 |
return list; |
32 |
33 |
} |
List最终返回的是满足条件的User队列。
单行查询:
01 |
public User
selectById(String id){ |
02 |
03 |
String
sql = "select
* from admin where id=?" ; |
04 |
05 |
final User
u = new User(); |
06 |
07 |
final Object[]
params = new Object[]
{id}; |
08 |
09 |
jdbcTemplate.query(sql,
params, new RowCallbackHandler(){ |
10 |
11 |
public void processRow(ResultSet
rs) throws SQLException
{ |
12 |
13 |
u.setId(rs.getString( "ID" )); |
14 |
15 |
u.setName(rs.getString( "NAME" )); |
16 |
17 |
u.setPassword(rs.getString( "PASSWORD" )); |
18 |
19 |
} |
20 |
21 |
}); |
22 |
23 |
return u; |
24 |
25 |
} |
2. 插入
01 |
public void insert(User
u) |
02 |
03 |
{ |
04 |
05 |
String
sql = "insert
into admin (ID,NAME,PASSWORD) values (admin_id_seq.nextval,?,?)" ; |
06 |
07 |
Object[]
params = new Object[]
{ |
08 |
09 |
u.getName(), |
10 |
11 |
u.getPassword()
}; |
12 |
13 |
jdbcTemplate.update(sql,params); |
14 |
15 |
} |
admin_id_seq.nextval为Oracle设置好的序列,问号“?”被params里的数据依次替代,最终执行sql。
3. 修改
非常简单:
1 |
public void update(String
how) |
2 |
3 |
{ |
4 |
5 |
jdbcTemplate.update(how); |
6 |
7 |
} |
运行截图
数据库截图
Spring JdbcTemplate框架搭建及其增删改查使用指南,布布扣,bubuko.com
Spring JdbcTemplate框架搭建及其增删改查使用指南
原文:http://blog.csdn.net/yaerfeng/article/details/22650373