JdbcTemplate和spring 实战

jopen 11年前

小嘴巴叽叽喳喳,不如直接来个demo,毕竟我不是搞业务的

applicationContext.xml

 

<?xml version ="1.0" encoding ="UTF-8"?> 
 
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 
 
 
<beans  default-autowire ="autodetect"> 
     
<bean id ="dataSource"  class ="org.apache.commons.dbcp.BasicDataSource">  
         
<property name ="driverClassName">  
             
<value>com.mysql.jdbc.Driver</value>  
         
</property>  
         
<property name ="url">  
             
<value>jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8&amp;characterSetResults=UTF-8</value> 
          
</property> 
         
<property name="username"> 
             
<value>root</value> 
         
</property> 
         
<property name="password"> 
             
<value></value> 
         
</property> 
         
<property name="maxActive"> 
             
<value>10</value> 
         
</property> 
         
<property name="maxIdle"> 
             
<value>2</value> 
         
</property> 
     
</bean> 
     
<bean id="TransactionManager"
         class
="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
         
<property name="dataSource"> 
             
<ref bean="dataSource" /> 
         
</property> 
     
</bean> 
     
<bean id ="JdbcTemplate"
         class 
="org.springframework.jdbc.core.JdbcTemplate"> 
         
<property name ="dataSource"> 
             
<ref bean ="dataSource"  /> 
         
</property> 
     
</bean> 
 
</beans> 

 pojo User.java

 

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

public class User {
    Integer id;
    String username;
    String password;

    
public Integer getId() {
        
return id;
    }


    
public void setId(Integer id) {
        
this.id = id;
    }


    
public String getUsername() {
        
return username;
    }


    
public void setUsername(String username) {
        
this.username = username;
    }


    
public String getPassword() {
        
return password;
    }


    
public void setPassword(String password) {
        
this.password = password;
    }

    
public  String toString()   {
        
return  ToStringBuilder.reflectionToString( this ,
        ToStringStyle.MULTI_LINE_STYLE);
    }
 
    
public   boolean  equals(Object o)   {
        
return  EqualsBuilder.reflectionEquals( this , o);
    }
 
    
public   int  hashCode()   {
        
return  HashCodeBuilder.reflectionHashCode( this );
    }
 
}

demo 代码 Test.java

 

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.jdbc.core.RowMapper;

public class Test {
    
static Log log = LogFactory.getLog(Test.class);

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        ClassPathResource res = new ClassPathResource("applicationContext.xml");
        XmlBeanFactory factory 
= new XmlBeanFactory(res);
        JdbcTemplate jdbcTemplate 
= (JdbcTemplate) factory
                .getBean(
"JdbcTemplate");
        
//使用JdbcTemplate的execute()方法执行SQL语句 
        jdbcTemplate.execute("desc USER");
        User user 
= new User();
        user.setId(
new Integer(1));
        
//带参数的更新 
        jdbcTemplate.update("delete from USER where id=?"new Object[] "1" });
        
//如果是UPDATE或INSERT,可以用update()方法。 
        jdbcTemplate.update("INSERT INTO USER VALUES('" + 
                user.getId() 
+ "', '"+ 
                user.getUsername() 
+ "', '" + 
                user.getPassword() 
+ 
                
"')");
        jdbcTemplate.update(
"UPDATE USER SET username = ? WHERE id = ?",
                
new Object[] "beauty9235""1" });
        
//使用JdbcTemplate进行查询时,使用queryForXXX()等方法
        int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");
        log.debug(
"total records : " + count);
        String name 
= (String) jdbcTemplate.queryForObject(
                
"SELECT username FROM USER WHERE id = ?"new Object[] "1" },
                java.lang.String.
class);
        log.debug(
"username : " + name);
        List rows 
= jdbcTemplate.queryForList("SELECT * FROM USER");
        Iterator it 
= rows.iterator();
        
while (it.hasNext()) {
            Map userMap 
= (Map) it.next();
            log.debug(userMap.get(
"id"+ " ");
            log.debug(userMap.get(
"username"+ " ");
            log.debug(userMap.get(
"password"+ " ");
        }

/*        JdbcTemplate 将我们使用的JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等等。spring大量使用Template Method模式来封装固定流程的动作,XXXTemplate等类别都是基于这种方式的实现。 
        除了大量使用Template Method来封装一些底层的操作细节,spring也大量使用callback方式类回调相关类别的方法以提供JDBC相关类别的功能,使传统的JDBC的使用者也能清楚了解spring所提供的相关封装类别方法的使用。
        JDBC的PreparedStatement 

*/

        jdbcTemplate.update(
                
"INSERT INTO USER(username,password) VALUES( ?, ?)",
                
new PreparedStatementSetter() {
                    
public void setValues(java.sql.PreparedStatement ps)
                            
throws SQLException {
                        ps.setString(
1"test");
                        ps.setString(
2"123");
                    }

                }
);

        
final User user01 = new User();
        jdbcTemplate.query(
"SELECT * FROM USER WHERE id = ?",
                
new Object[] "1" }new RowCallbackHandler() {

                    
public void processRow(ResultSet rs) throws SQLException {
                        user01.setId(
new Integer(rs.getInt("id")));
                        user01.setUsername(rs.getString(
"username"));
                        user01.setPassword(rs.getString(
"password"));

                    }

                }
);
        log.debug(user01);
        
class UserRowMapper implements RowMapper {    
            
public Object mapRow(ResultSet rs, int index) throws SQLException {    
                User user02 
= new User();    
           
                user02.setId(
new Integer(rs.getInt("id")));
                user02.setUsername(rs.getString(
"username"));
                user02.setPassword(rs.getString(
"password")); 
           
                
return user02;    
            }
    
        }
    
           
      
    }

}

小说明一下:

上次用的要加spring.jar,commons-dbcp-1.2.1.jar,log4j-1.2.8.jar,commons-pool-1.2.jar,commons-lang-2.4.jar等