Spring | JdbcTemplate & Mysql 1

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层:<?XML:NAMESPACE PREFIX = O />

具体的代码如下:(连接数据库为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 proce***ow(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 proce***ow(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);
      }
}

 
 
发布了134 篇原创文章 · 获赞 61 · 访问量 22万+

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览