Spring学习之JdbcTemplate

一、什么是JDBCTemplate

Spring使用模板方式封装jdbc数据库操作固定流程,并提供丰富callback回调接口功能,方便用户自定义加工细节,更好模块化jdbc操作,简化传统的JDBC操作的复杂和繁琐过程。

JDBCTemplate主要提供以下五类方法:

(1) execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;

jdbcTemplate.execute("CREATE TABLE t_user (user_id integer, name varchar(64))");

(2) update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;

jdbcTemplate.update("update t_user set username=? where id=?",user.getUsername(), user.getId());

(3)query方法及queryForXXX方法:用于执行查询相关语句;

int count = jdbcTemplate.queryForInt("select count(*) from t_user");List<String> nicknameList = jdbcTemplate.queryForList("select nickname from t_user", String.class);

(4)call方法:用于执行存储过程、函数相关语句。

JdbcTemplate类支持的回调类:

(1)预编译语句及存储过程创建回调

PreparedStatementCreator:通过回调获取JdbcTemplate提供的Connection,由用户使用该Conncetion创建相关的PreparedStatement;

CallableStatementCreator:通过回调获取JdbcTemplate提供的Connection,由用户使用该Conncetion创建相关的CallableStatement;

(2)预编译语句设值回调

PreparedStatementSetter:通过回调获取JdbcTemplate提供的PreparedStatement,由用户来对相应的预编译语句相应参数设值;BatchPreparedStatementSetter:;类似于PreparedStatementSetter,但用于批处理,需要指定批处理大小;

(3)自定义功能回调

ConnectionCallback:通过回调获取JdbcTemplate提供的Connection,用户可在该Connection执行任何数量的操作;StatementCallback:通过回调获取JdbcTemplate提供的Statement,用户可以在该Statement执行任何数量的操作;PreparedStatementCallback:通过回调获取JdbcTemplate提供的PreparedStatement,用户可以在该PreparedStatement执行任何数量的操作;CallableStatementCallback:通过回调获取JdbcTemplate提供的CallableStatement,用户可以在该CallableStatement执行任何数量的操作;

(4)结果集处理回调

RowMapper:用于将结果集每行数据转换为需要的类型,用户需实现方法mapRow(ResultSet rs, int rowNum)来完成将每行数据转换为相应的类型。RowCallbackHandler:用于处理ResultSet的每一行结果,,用户需实现方法processRow(ResultSet rs)来完成处理,在该回调方法中无需执行rs.next(),该操作由JdbcTemplate来执行,用户只需按行获取数据然后处理即可。ResultSetExtractor:用于结果集数据提取,用户需实现方法extractData(ResultSet rs)来处理结果集,用户必须处理整个结果集;

二、使用JDBCTemplate

这里先给出使用JDBCTemplate的一般步骤:

1.导入Spring的包和数据库驱动包2.选择一个数据源(DBCP, C3P0)3.导入数据源的包:DBCP4.在beans.xml中创建datasource数据源5.创建jdbc.propertier来设置数据库连接信息6.在beans.xml中导入相应的properties文件<context:property-placeholder location="jdbc.properties"/>7.写一个DAO,并且为这个DAO创建一个JdbcTemplate,通过JdbcTemplate对象可以方便的完成对数据的操作8.为Dao注入相应的DataSource并且创建JdbcTemplate@Resourcepublic void setDataSource(DataSource dataSource) {this.jdbcTemplate = new JdbcTemplate(dataSource);}9.完成数据对象的添加

首先需要把DataSource注册到JdbcTemplate之中。同时,为了支持对properties文件的支持,spring提供了类似于EL表达式的方式,把properties的文件参数引入到参数配置之中。

<?xml version="1.0" encoding="UTF-8"?><beans xmlns=""xmlns:xsi="" xmlns:aop=""xmlns:context=""xsi:schemaLocation=" "><!– 打开spring的Annotation支持 –><context:annotation-config /><!– 设定spring去哪些包中找Annotation –><context:component-scan base-package="com.spring" /><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName" value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></bean><!– 导入src目录下的jdbc.properties文件 –><context:property-placeholder location="jdbc.properties" /></beans>

配置文件jdbc.properties位于src目录下:

jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/spring_teachjdbc.username=rootjdbc.password=123a. 将DataSource注入到JDBCTemplate中:

@Resourcepublic void setDataSource(DataSource dataSource) {this.jdbcTemplate = new JdbcTemplate(dataSource);}b. 添加数据

public void add(User user, int gid) {jdbcTemplate.update("insert into t_user(username, password, nickname, gid) value(?, ?, ?, ?)",user.getUsername(), user.getPassword(),user.getNickname(), gid);}c.修改数据

又或者是后天的,我们不断学习,努力进取的路途中辛苦寻到的武器。

Spring学习之JdbcTemplate

相关文章:

你感兴趣的文章:

标签云: