Spring中JdbcTemplate的基础用法
1、在DAO中使用JdbcTemplate
一般都是在DAO类中使用JdbcTimplate,在XML配置文件中配置好后,可以在DAO中注入即可。
在Spring配置文件中配置DAO一般分为4个步骤:
1、定义DataSource
2、定义JdbcTimplate
3、声明一个抽象的<bean>,以便所有的DAO复用配置JdbcTimplate属性的配置
4、配置具体的DAO
1 <!-- 配置事务管理器 --><!-- 扫描类包,将标注Spring注解的类自动转化Bean,同时完成Bean的注入 --> 2 <context:component-scan base-package="com.smart.dao"/> 3 4 <!-- 配置数据源 --> 5 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 6 destroy-method="close" 7 p:driverClassName="${jdbc.driverClassName}" 8 p:url="${jdbc.url}" 9 p:username="${jdbc.name}" 10 p:password="${jdbc.password}" /> 11 12 <!-- 配置Jdbc模板 --> 13 <!--JdbcTemplate 拥有几个可用于控制底层的JDBC API的属性 14 queryTimeout: 设置JdbcTimplate所创建的Statement查询数据时的最大超时时间,默认0 15 fetchSize: 设置底层的ResultSet每次从数据库返回的行数。该属性对程序的影响很大,如果设置过大, 16 因为一次性载入的数据都放到内存中,所以内存消耗很大;反之相反。默认为0,Oracle驱动程序的默认值为10 17 maxRows: 设置底层的ResultSet从数据库返回的最大行数,默认值为0。 18 ignoreWarnings:是否忽略SQL的警告信息。默认true,即所有的警告信息都被记录到日志中; 19 如果为false,则JdbcTemplate将抛出SQLWarningException. 20 --> 21 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" 22 p:dataSource-ref="dataSource" />
按照相同的方式可以方便的创建其他的DAO类,在Spring配置文件中定义JdbcTemplate并注入每个DAO中
1 package com.smart.dao; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.jdbc.core.JdbcTemplate; 5 import org.springframework.stereotype.Repository; 6 7 @Repository 8 public class TestDao { 9 private JdbcTemplate jdbcTemplate; 10 @Autowired 11 public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { 12 this.jdbcTemplate = jdbcTemplate; 13 } 14 public void initDb(){ 15 String sql = "create table test_user(user_id int primary key,user_name varchar(60))"; 16 jdbcTemplate.execute(sql); 17 } 18 }
2、更改数据
1 public void Insert(User user){ 2 String sql = "INSERT INTO test_user(user_id,user_name) VALUES(?,?)"; 3 /* 4 1、int update(String sql) 为不提供占位符的SQL语句提供便利 5 2、int update(String sql,Object[] args) 第二个参数定义了用于填充占位符的参数数组,即SQL语句中的? 6 3、int update(String sql,PreparedStatementSetter pss):PreparedStatementSetter是一个回调接口, 7 它定义了一个void setValues(PreparedStatement ps)接口方法。JdbcTemplate使用SQL语句创建出 8 PreparedStatement实例后,将调用接口执行参数绑定。 9 jdbcTemplate.update(sql,new PreparedStatementSetter(){ 10 public void setValues(PreparedStatement ps) throws SQLException{ 11 ps.setInt(1,user.getUserId()); 12 ps.setString(2,user.getUserName()); 13 } 14 }); 15 4、如下,在2的基础上添加了第三个参数数组,用于显式的指定每个占位符所对应的字段数据类型 16 */ 17 Object [] params = new Object[] {user.getUserId(),user.getUserName()}; 18 jdbcTemplate.update(sql,params,new int[]{Types.INTEGER,Types.VARCHAR}); 19 }
User.class
1 public class User implements Serializable{ 2 3 private int userId; 4 private String userName; 5 public int getUserId() { 6 return userId; 7 } 8 public void setUserId(int userId) { 9 this.userId = userId; 10 } 11 public String getUserName() { 12 return userName; 13 } 14 public void setUserName(String userName) { 15 this.userName = userName; 16 } 17 18 }