Spring提供的JDBC抽象框架coredatasourceobjectsupport四个不同的包组成.
org.springframework.jdbc.core包里定义了提供核心功能的类,其中包含了一个用语JdbcTemplateDAO基础类.我就是用这个基础类来实战连接Mysql数据库的.
对于没有Spring的日子的代码,这样的代码用来把记录集存储到一个对象中:
Object vo = new Object();
 vo.setXX(rs.getXType(fieldName1));
vo.setYY(rs.getYType(fieldName2));
Spring,提供了这样一个接口RowMapper,其方法是public Object mapRow(ResultSet rs,int  index),来完成这样的工作.
对于:
while(rs.next()) {
Object vo = new Object();
vo.setXX(rs.getXType(fieldName1)); vo.setYY(rs.getYType(fieldName2));
……
results.add(vo);
}
Spring中用new RowMapperResultReader(new RowMapper())来取代.
这样,JDBC中的查询过程,就被如下一句话所取代:
JdbcTemplate.query(sql,params,new RowMapperResultReader(new RowMapper()));
这个JdbcTemplatequery()方法封装了对JDBC底层API的调用,以及一些回调方法. 回调方法也是Spring框架的一种基本方法.
程序中使用了DAO来封装了对数据库的操作……JdbcTemplate的使用需要有一个DataSource的支持,所以在配置文件中,我们首先要配置一个SpringDriverManagerDataSource,然后将这个DataSource配置到JdbcTemplate里.接着将JdbcTemplate配置到DAO层.最后将DAO配置到Model层:
具体的代码如下:(连接数据库为Mysql)
.cn.zhd.DAO
UserDAO接口:
package cn.zhd.DAO;
import cn.zhd.Model.User;
import java.util.List;
public interface UserDAO {
     public void selectWithTemp();
     public List select(String where);
     public void update(String how);
     public void insert(User u);
     public User selectById(String id);
     public void insertBatchData(final List<User> user);
}
DAO接口实现类
package cn.zhd.DAO.Imp;
 
import cn.zhd.DAO.UserDAO;
import cn.zhd.Model.User;
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;
 
 
public class UserDAOImp implements UserDAO{
     private JdbcTemplate jt;
 
     public JdbcTemplate getJt() {
            return jt;
     }
    
     public void setJt(JdbcTemplate jt) {
            this.jt = jt;
     }
    
     //Inner Class提供一个RresultSet中的row的映射对象
     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";
            System.out.println("Id"+"\t"+"Name"+"\t"+"Password");
            jt.query(sql,new RowCallbackHandler(){//一个实现了回调接口的类
                   //此方法为回调方法,每读取一行ResultSet被调用一次,它采用的是Statement, not a PreparedStatement
                   public void processRow(ResultSet rs) throws SQLException{
                         
                          System.out.println(rs.getString("Id")+"\t"+rs.getString("Name")+"\t"+rs.getString("Password"));
                   }
 
            });
           
     }
     //多行查询
     public List select(String where){
            List list=null;
            String sql="select * from admin"+”\t”+where;//这里不能少”\t”,教训
            list=jt.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};
            jt.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"));
                          System.out.println(rs.getString("Name")+"\t"+rs.getString("Password"));
                   }
            });
            return u;
     }
     public void update(String how){
            String sql=how;
            jt.update(sql);
     }
     //将插入数据封装为一个对象作为参数传递给JdbcTemplate
     public void insert(User u){
            String sql="insert into admin(id,name,password) values(null,?,?)";
            Object[] params=new Object[]{u.getName(),u.getPassword()};
            jt.update(sql,params);
     }
//批量插入数据
     public void insertBatchData(final List<User> user){
            String sql="insert into admin(id,name,password) values(null,?,?)";
            BatchPreparedStatementSetter setter=new BatchPreparedStatementSetter(){
                   public int getBatchSize(){
                          return user.size();
                   }
                   // PreparedStatement 设置value
                   public void setValues(PreparedStatement ps,int index){
                          User u= user.get(index);
                          try{
                                 ps.setString(1,u.getName());
                                 ps.setString(2,u.getPassword());
                                
                          }catch(SQLException e){
                                 e.printStackTrace();
                          }
                   }
            };
            jt.batchUpdate(sql, setter);
     }
}
 
Model
 
cn.zhd.Model.User.java
package cn.zhd.Model;
import java.util.List;
import cn.zhd.DAO.UserDAO;
 
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();
      }
      //id查询
      public User selectById(String id){
             return dao.selectById(id);
      }
      //批量插入数据
      public void insertBatchData(final List<User> user){
             dao.insertBatchData(user);
      }
}