Spring中JdbcTemplate的基础用法

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 }
原文地址:https://www.cnblogs.com/lwx521/p/7672885.html