Spring框架学习【JdbcTemplate封装Jdbc】

本文详细介绍了Spring中JdbcTemplate如何封装Jdbc,包括数据源配置、JdbcTemplate的使用、工作流程以及Statement、PreparedStatement和CallableStatement的处理方法。通过示例展示了JdbcTemplate的插入、更新和查询操作,并探讨了其核心方法execute的实现。
摘要由CSDN通过智能技术生成

1.Spring中使用JdbcTemplate封装对Jdbc的支持,使用Spring JdbcTeamplate的例子如下:

(1).假设如下SQL表中有数据username=test1,passwd=test1,address=test1 :

[java] view plaincopyprint?
  1. CREATE TABLE `login` (   
  2.   `username` varchar(10) default NULL,   
  3.   `passwd` varchar(10) default NULL,   
  4.   `address` varchar(10) default NULL   
  5. ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;  

(2).Spring配置文件中添加关于数据源和JdbcTeamplate的配置如下:

[xhtml] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >   
  3. <beans>   
  4. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">   
  5.    <property name="driverClassName">   
  6.      <value>com.mysql.jdbc.Driver</value>   
  7.    </property>   
  8.    <property name="url">   
  9.      <value>jdbc:mysql://localhost:3306/javaee</value>   
  10.    </property>   
  11.    <property name="username">   
  12.      <value>root</value>   
  13.    </property>   
  14.    <property name="password">   
  15.      <value>1234</value>   
  16.    </property>   
  17. </bean>   
  18. <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">   
  19.    <property name="dataSource">   
  20.      <ref local="dataSource"/>   
  21.    </property>   
  22. </bean>   
  23. <bean id="personDAO" class="SpringJDBCSupport.ReadData.PersonDAO">   
  24.   <property name="jdbcTemplate">   
  25.     <ref local="jdbcTemplate"/>   
  26.   </property>   
  27. </bean>   
  28. </beans>  

(3).Java持久化对象如下:

[java] view plaincopyprint?
  1. package SpringJDBCSupport.ReadData;   
  2. import com.mysql.jdbc.Driver;   
  3. public class Person {   
  4.   private String name;   
  5.   private String password;   
  6.   private String address;   
  7.   public Person(){   
  8.   }   
  9.   public Person(String name,String password,String address){   
  10.       this.name=name;   
  11.       this.password=password;   
  12.       this.address=address;   
  13.   }   
  14. public String getAddress() {   
  15.     return address;   
  16. }   
  17. public void setAddress(String address) {   
  18.     this.address = address;   
  19. }   
  20. public String getName() {   
  21.     return name;   
  22. }   
  23. public void setName(String name) {   
  24.     this.name = name;   
  25. }   
  26. public String getPassword() {   
  27.     return password;   
  28. }   
  29. public void setPassword(String password) {   
  30.     this.password = password;   
  31. }   
  32. public String toString(){   
  33.     return this.getName()+"-"+this.getPassword()+"-"+this.getAddress();   
  34. }   
  35. }  

(4).使用JdbcTeamplate的DAO如下:

[java] view plaincopyprint?
  1. package SpringJDBCSupport.ReadData;   
  2. import java.sql.PreparedStatement;   
  3. import java.sql.ResultSet;   
  4. import java.sql.SQLException;   
  5. import java.sql.Types;   
  6. import java.util.List;   
  7. import org.springframework.jdbc.core.BatchPreparedStatementSetter;   
  8. import org.springframework.jdbc.core.JdbcTemplate;   
  9. import org.springframework.jdbc.core.RowCallbackHandler;   
  10. public class PersonDAO {   
  11.   private JdbcTemplate jdbcTemplate;   
  12. public JdbcTemplate getJdbcTemplate() {   
  13.     return jdbcTemplate;   
  14. }   
  15. public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {   
  16.     this.jdbcTemplate = jdbcTemplate;   
  17. }   
  18. public int insertPersonUseUpdate(Person person){   
  19.     String sql="insert into login values(?,?,?)";   
  20.     Object[] params=new Object[]{   
  21.             person.getName(),   
  22.             person.getPassword(),   
  23.             person.getAddress()   
  24.     };   
  25.     return this.getJdbcTemplate().update(sql,params);   
  26. }   
  27. public int insertPersonUseExecute(Person person){   
  28.     String sql="insert into login values(?,?,?)";   
  29.     Object[] params=new Object[]{   
  30.             person.getName(),   
  31.             person.getPassword(),   
  32.             person.getAddress()   
  33.     };   
  34.     int[] types=new int[]{   
  35.             Types.VARCHAR,   
  36.             Types.VARCHAR,   
  37.             Types.VARCHAR   
  38.     };   
  39.     return this.getJdbcTemplate().update(sql,params,types);   
  40. }   
  41. public int[] updatePersonUseBatchUpdate( final List persons){   
  42.     String sql="insert into login values(?,?,?)";   
  43.     BatchPreparedStatementSetter setter=null;   
  44. //使用匿名内部类,实现BatchPreparedStatementSetter接口,实现批量更新   
  45.     setter=new BatchPreparedStatementSetter(){   
  46.         public int getBatchSize(){   
  47.             return persons.size();   
  48.         }   
  49.         public void setValues(PreparedStatement ps,int index) throws SQLException{   
  50.             Person person=(Person)persons.get(index);   
  51.             ps.setString(1,person.getName());   
  52.             ps.setString(2,person.getPassword());   
  53.             ps.setString(3,person.getAddress());   
  54.         }   
  55.     };   
  56.     return this.getJdbcTemplate().batchUpdate(sql,setter);   
  57. }   
  58. public Person getPersonByRowCallbackHandler(String username){   
  59.     String sql="select * from login where username=?";   
  60.     final Person person=new Person();   
  61.     final Object params[]=new Object[]{username};   
  62. //使用匿名内部类,实现RowCallbackHandler接口,即实现查询结果集的RowMapping   
  63.     this.getJdbcTemplate().query(sql,params,new RowCallbackHandler(){   
  64.         public void processRow(ResultSet rs)throws SQLException{   
  65.             person.setName(rs.getString("username"));   
  66.             person.setPassword(rs.getString("passwd"));   
  67.             person.setAddress(rs.getString("address"));   
  68.         }   
  69.     });   
  70.     return person;   
  71. }   
  72. }  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值