《Pro Spring》学习笔记之SqlUpdate的使用

SqlUpdate是Spring提供的一个工具类,使用它我们可以完成Spring和JDBC的集成封装,更方便的进行数据库操作

数据库SQL

 

CREATE   TABLE  `test` (
  `testid` 
varchar ( 10 default   NULL ,
  `testname` 
varchar ( 10 default   NULL
) ENGINE
= InnoDB  DEFAULT  CHARSET = gb2312;

表中数据为:
1   name1
2   name2
3   name3
4   name4
5   name5

 

DAO接口:

package  ch8.sqlUpdate;

import  java.sql.Types;

import  javax.sql.DataSource;

import  org.springframework.jdbc.core.SqlParameter;
import  org.springframework.jdbc.object.SqlUpdate;


// 继承SqlUpdate,完成sql update操作
public   class  Update  extends  SqlUpdate  {
  
public Update(DataSource dataSource,String sql){
      
super(dataSource,sql);
      
this.declareParameter(new SqlParameter(Types.VARCHAR));
      
this.declareParameter(new SqlParameter(Types.VARCHAR));
  }

}



package  ch8.sqlUpdate;

import  java.sql.Types;

import  javax.sql.DataSource;

import  org.springframework.jdbc.core.SqlParameter;
import  org.springframework.jdbc.object.SqlUpdate;
// 继承SqlUpdate,完成sql delete操作
public   class  Delete  extends  SqlUpdate  {
    
public Delete(DataSource dataSource,String sql){
       
super(dataSource,sql);
       
this.declareParameter(new SqlParameter(Types.VARCHAR));
  }

}

 

 

package  ch8.sqlUpdate;

import  java.util.List;

public   interface  ITestDAO  {
  
public void updateUserByName(String newName,String oldName);
  
public void deleteUserByName(String name);
  
public List getAll();
}

 

 SqlUpdate子类实现

 

package  ch8.sqlUpdate;

import  java.sql.Types;

import  javax.sql.DataSource;

import  org.springframework.jdbc.core.SqlParameter;
import  org.springframework.jdbc.object.SqlUpdate;
// 继承SqlUpdate,完成sql delete操作
public   class  Delete  extends  SqlUpdate  {
    
public Delete(DataSource dataSource,String sql){
       
super(dataSource,sql);
       
this.declareParameter(new SqlParameter(Types.VARCHAR));
  }

}



package  ch8.sqlUpdate;

import  java.sql.Types;

import  javax.sql.DataSource;

import  org.springframework.jdbc.core.SqlParameter;
import  org.springframework.jdbc.object.SqlUpdate;


// 继承SqlUpdate,完成sql update操作
public   class  Update  extends  SqlUpdate  {
  
public Update(DataSource dataSource,String sql){
      
super(dataSource,sql);
      
this.declareParameter(new SqlParameter(Types.VARCHAR));
      
this.declareParameter(new SqlParameter(Types.VARCHAR));
  }

}

 

DAO实现类:

 

package  ch8.sqlUpdate;

import  java.sql.Connection;
import  java.sql.PreparedStatement;
import  java.sql.ResultSet;
import  java.sql.SQLException;
import  java.util.ArrayList;
import  java.util.List;

import  org.springframework.dao.DataAccessException;
import  org.springframework.jdbc.core.PreparedStatementCallback;
import  org.springframework.jdbc.core.PreparedStatementCreator;
import  org.springframework.jdbc.core.support.JdbcDaoSupport;
import  org.springframework.jdbc.object.SqlUpdate;

import  ch8.sqlUpdate.User;




public   class  TestDAOImpl  extends  JdbcDaoSupport  implements  ITestDAO  {
    
    
private Update sqlUpdate;
    
private Delete sqlDelete;
    
private final String sql="update test set testname=? where testname=?"//update SQL
    private final String delSql="delete from test where testname=?";

//  根据name把对应的数据记录删除
    public void deleteUserByName(String name) {
        sqlDelete
=new Delete(getDataSource(),delSql);
        sqlDelete.compile();
        sqlDelete.update(
new Object[]{name});
        
    }


    
//根据oldName把名称改为newName
    public void updateUserByName(String newName,String oldName) {
        sqlUpdate
=new Update(getDataSource(),sql); //构造SqlUpdate对象
        sqlUpdate.compile();
        sqlUpdate.update(
new Object[]{newName,oldName});
    }

 
    
//获得所有用户列表,以检查update和delete操作效果
    public List getAll() {
        
return (List)this.getJdbcTemplate().execute(
          
new PreparedStatementCreator(){
               
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException{
                  
return connection.prepareStatement("select * from test");
               }

              
          }
,new PreparedStatementCallback(){
              
public Object doInPreparedStatement(PreparedStatement ps) throws SQLException,DataAccessException{
                  List result
=new ArrayList();
                  ResultSet rs
=ps.executeQuery();
                  User t
=null;
                  
while(rs.next()){
                      t
=new User(rs.getString("testid"),rs.getString("testname"));
                      result.add(t);
                  }

                  
return result;
              }

              
          }
        
        );
    }

    

}

 

Domain对象

 

package  ch8.sqlUpdate;

public   class  User  {
  
private String name;
  
private String id;
public User(String name, String id) {

    
this.name = name;
    
this.id = id;
}

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 toString() {
    
    
return this.id+"--"+this.name;
}


}

 

测试代码:

 

package  ch8.sqlUpdate;

import  java.util.Iterator;
import  java.util.List;

import  org.springframework.context.ApplicationContext;
import  org.springframework.context.support.ClassPathXmlApplicationContext;

public   class  Test  {

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        ApplicationContext context
=new ClassPathXmlApplicationContext("ch8/sqlUpdate/applicationContext.xml");
        TestDAOImpl testDAOImpl
=(TestDAOImpl)context.getBean("testDAO");

        
        List result
=null;
        result
=testDAOImpl.getAll();
        System.out.println(
"old value");
        
for (Iterator iter = result.iterator(); iter.hasNext();) {
            User element 
= (User) iter.next();
            System.out.println(element);            
        }
    
        testDAOImpl.updateUserByName(
"name11","name1");//执行update(set testname=name11)
        
        System.out.println(
"new value");
        result
=testDAOImpl.getAll();
        
for (Iterator iter = result.iterator(); iter.hasNext();) {
            User element 
= (User) iter.next();
            System.out.println(element);            
        }

        
        testDAOImpl.deleteUserByName(
"name11");//执行deltet(testname=name11)
        System.out.println("value after delete");
        result
=testDAOImpl.getAll();
        
for (Iterator iter = result.iterator(); iter.hasNext();) {
            User element 
= (User) iter.next();
            System.out.println(element);            
        }
    
     }


}

 

测试结果:

old value
name2--2
name3--3
name4--4
name5--5
name1--1
new value
name2--2
name3--3
name4--4
name5--5
name11--1
value after delete
name2--2
name3--3
name4--4
name5--5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值