Spring:JdbcTemplate使用指南

bingjava

贡献于2011-05-11

字数:0 关键词: Spring JEE框架

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 e){e.printStackTrace();} } 以上是常见的 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 SQLException { } } ); 环境搭建: 1. 数据库的配置 本文使用 Oracle 数据库,新建表 admin: create table admin ( ID number(10) primary key, NAME varchar2(64), PASSWORD varchar2(64) ) 2. Spring 配置 JdbcTemplate 的使用需要有 DataSource 的支持,所以在配置文件中,我们首先要配置一 个 OracleDataSource,然后在将这个 DataSource 配置到 JdbcTemplate 里。接着将 JdbcTemplate 配置进 DAO 层,最后将 DAO 配置进 Model 层。简要的关系如下: 模型层 : User 数据访问层:UserDAO JdbcTemplate OracleDataSource jdbc:oracle:thin:root/123@localhost:1521/XE 3. 环境配置, 如图: 使用方法: 1. 查找 多行查询: class UserRowMapper implements RowMapper { public Object mapRow(ResultSet rs,int index) throws SQLException { 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 "+where; list = jdbcTemplate.query(sql,new RowMapperResultReader(new UserRowMapper())); return list; } List 最终返回的是满足条件的 User 队列。 单行查询: public User selectById(String id){ String sql = "select * from admin where id=?"; final User u = new User(); final Object[] params = new Object[] {id}; jdbcTemplate.query(sql, params, new RowCallbackHandler(){ public void processRow(ResultSet rs) throws SQLException { 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) values (admin_id_seq.nextval,?,?)"; 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; /** * Model 层 * * * @author 李嘉陵 * @since 2006-4-30 12:10:30 * @version 0.10a **/ public class User { private String name; private String id; private String password; private UserDAO dao; public User() { } public User(String name, String password) { 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+"', password='"+password+"' where id="+id); } public List selectWithTemp(String where) { 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; /** * DAO 层接口 * * * @author 李嘉陵 * @since 2006-4-30 8:40:56 * @version 0.10a **/ 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 users); } UserDAOImp.class: package DAO.Imp; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import org.springframework.jdbc.core.BatchPreparedStatementSetter; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowCallbackHandler; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.RowMapperResultReader; import DAO.UserDAO; import Model.User; /** * DAO 层的实现 * * * @author 李嘉陵 * @since 2006-4-30 8:41:26 * @version 0.10a **/ public class UserDAOImp implements UserDAO{ private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } class UserRowMapper implements RowMapper { public Object mapRow(ResultSet rs,int index) throws SQLException { 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 SQLException { System.out.println("ID: "+rs.getString("ID")+" Name: "+rs.getString("name")); } } ); } public List select(String where) { List list; String sql = "select * from admin "+where; list = jdbcTemplate.query(sql,new RowMapperResultReader(new UserRowMapper())); return list; } public User selectById(String id) { String sql = "select * from admin where id=?"; final User u = new User(); final Object[] params = new Object[] {id}; jdbcTemplate.query(sql,params, new RowCallbackHandler(){ public void processRow(ResultSet rs) throws SQLException { 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) values (admin_id_seq.nextval,?,?)"; 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 ClassPathResource("beans.xml"); BeanFactory factory = new XmlBeanFactory(resource); User user = (User) factory.getBean("user"); user.selectWithTemp(); } }

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 20 金币 [ 分享文档获得金币 ] 3 人已下载

下载文档

相关文档