前言:
本文指在介绍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 ; |
05 | con = ods.getConnection(); |
06 | String sql = "select * from admin" ; |
07 | pStmt = con.prepareStatement(sql); |
08 | rs = pStmt.executeQuery(); |
11 | } catch (Exception ex) { |
14 | } catch (SQLException sqlex) { |
15 | sqlex.printStackTrace(System.out); |
24 | } catch (Exception e) { |
以上是常见的JDBC代码,简单的select语句也需要冗长的出错处理,并且每个函数都不断地重复同样的代码。
3. JdbcTemplate的作用
JdbcTemplate正是为了减少上述繁琐的代码而设计出来的。它是对JDBC的一种封装,抽象我们常用的一些方法。Simple and Stupid就是它的目标。下面是完成了刚才JDBC代码同样功能的JdbcTemplate的代码:
1 | String sql = "select * from admin" ; |
3 | jdbcTemplate.query(sql, new RowCallbackHandler() { |
5 | public void processRow(ResultSet rs) throws SQLException { |
环境搭建:
1. 数据库的配置
本文使用Mysql数据库,新建表admin:
2 | `ID` bigint (20) unsigned NOT NULL auto_increment, |
3 | ` NAME ` varchar (100) NOT NULL , |
4 | ` PASSWORD ` varchar (200) NOT NULL , |
6 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
2. Spring配置
JdbcTemplate的使用需要有DataSource的支持,所以在配置文件中,我们首先要配置一个OracleDataSource,然后在将这个DataSource配置到JdbcTemplate里。接着将JdbcTemplate配置进DAO层,最后将DAO配置进Model层。简要的关系如下:
![Spring配置](https://i-blog.csdnimg.cn/blog_migrate/92114f46480244a51952a30c506f81ea.jpeg)
01 | <? xml version = "1.0" encoding = "UTF-8" ?> |
02 | <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" |
06 | class = "org.springframework.jdbc.datasource.DriverManagerDataSource" > |
07 | < property name = "driverClassName" value = "com.mysql.jdbc.Driver" /> |
09 | < property name = "username" value = "root" /> |
10 | < property name = "password" value = "111111" /> |
13 | < bean id = "jdbcTemplate" class = "org.springframework.jdbc.core.JdbcTemplate" > |
14 | < property name = "dataSource" > |
15 | < ref bean = "dataSource" /> |
19 | < bean id = "userDao" class = "com.zuidaima.dao.impl.UserDaoImpl" > |
20 | < property name = "jdbcTemplate" > |
21 | < ref bean = "jdbcTemplate" /> |
25 | < bean id = "user" class = "com.zuidaima.model.User" > |
27 | < ref bean = "userDao" /> |
3. 项目截图:
![框架搭建](https://i-blog.csdnimg.cn/blog_migrate/70a1e1278b11ca2c91bfa3c5b4eb6f12.jpeg)
使用方法:
1.查找
多行查询:
01 | class UserRowMapper implements RowMapper { |
03 | public Object mapRow(ResultSet rs, int index) throws SQLException |
09 | u.setId(rs.getString( "ID" )); |
11 | u.setName(rs.getString( "Name" )); |
13 | u.setPassword(rs.getString( "Password" )); |
21 | public List select(String where) |
27 | String sql = "select * from admin " +where; |
29 | list = jdbcTemplate.query(sql, new RowMapperResultReader( new UserRowMapper())); |
List最终返回的是满足条件的User队列。
单行查询:
01 | public User selectById(String id){ |
03 | String sql = "select * from admin where id=?" ; |
05 | final User u = new User(); |
07 | final Object[] params = new Object[] {id}; |
09 | jdbcTemplate.query(sql, params, new RowCallbackHandler(){ |
11 | public void processRow(ResultSet rs) throws SQLException { |
13 | u.setId(rs.getString( "ID" )); |
15 | u.setName(rs.getString( "NAME" )); |
17 | u.setPassword(rs.getString( "PASSWORD" )); |
2. 插入
01 | public void insert(User u) |
05 | String sql = "insert into admin (ID,NAME,PASSWORD) values (admin_id_seq.nextval,?,?)" ; |
07 | Object[] params = new Object[] { |
13 | jdbcTemplate.update(sql,params); |
admin_id_seq.nextval为Oracle设置好的序列,问号“?”被params里的数据依次替代,最终执行sql。
3. 修改
非常简单:
1 | public void update(String how) |
5 | jdbcTemplate.update(how); |
运行截图
![运行截图](https://i-blog.csdnimg.cn/blog_migrate/b6726d3f054dad1d11d0ba1a25f35823.jpeg)
数据库截图
![数据库截图](https://i-blog.csdnimg.cn/blog_migrate/6cf2e1b68a138b7b96bca92416412d37.jpeg)