文章目录
JdbcTemplate是Spring框架中的一个核心模块,用于简化JDBC编程,提供了一种简单的方式来访问数据库、执行SQL语句和处理ResultSet结果集。
1. 引入依赖和配置数据源
在使用JdbcTemplate之前,我们需要在项目中引入相关的依赖包,可以使用Maven进行管理,例如:
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.10</version></dependency>
在引入依赖包之后,我们需要在Spring配置文件中配置数据源和JdbcTemplate,例如:
<!-- 配置数据源 --><beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"><propertyname="driverClass"value="com.mysql.jdbc.Driver"/><propertyname="jdbcUrl"value="jdbc:mysql://localhost:3306/test"/><propertyname="user"value="root"/><propertyname="password"value="123456"/></bean><!-- 配置JdbcTemplate --><beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"><propertyname="dataSource"ref="dataSource"/></bean>
2. JdbcTemplate的基础操作,源代码参数解析
JdbcTemplate提供了一系列基础的操作方法,包括查询、更新、批量操作等。这些操作方法都是通过JdbcTemplate类提供的API来实现的。下面是一些常用的基础操作方法:
查询操作
publicList<Map<String,Object>>queryForList(String sql,Object... args)publicList<T>query(String sql,Object[] args,RowMapper<T> rowMapper)publicTqueryForObject(String sql,Object[] args,RowMapper<T> rowMapper)
queryForList
:执行SQL查询并返回一个List对象,每个元素为一个Map对象,表示一行记录。query
:执行SQL查询并返回一个List对象,每个元素为一个JavaBean对象。queryForObject
:执行SQL查询并返回一个单一的结果对象,通常用于查询单条记录。
更新操作
publicintupdate(String sql,Object... args)publicint[]batchUpdate(String... sql)
update
:执行SQL更新操作,返回受影响的行数。batchUpdate
:批量执行SQL更新操作,返回一个int数组,其中每个元素表示对应SQL语句所影响的行数。
批量操作
public<T>voidexecute(String sql,BatchPreparedStatementSetter pss)publicint[]batchUpdate(String sql,BatchPreparedStatementSetter pss)
execute
:执行批量更新操作,需要一个BatchPreparedStatementSetter对象作为参数,用于设置批量更新的参数。batchUpdate
:批量执行SQL更新操作,需要一个BatchPreparedStatementSetter对象作为参数,用于设置批量更新的参数。返回一个int数组,其中每个元素表示对应SQL语句所影响的行数。
PreparedStatement操作
public<T>Texecute(PreparedStatementCreator psc,PreparedStatementCallback<T> action)public<T>Texecute(String sql,PreparedStatementCallback<T> action)
execute
:执行指定的PreparedStatementCreator,用于生成预编译的SQL语句,然后执行PreparedStatementCallback回调函数来实现数据库的操作。execute
:执行指定的SQL语句,然后执行PreparedStatementCallback回调函数来实现数据库的操作。
3. 查询操作示例
JdbcTemplate提供了丰富的查询操作方法,包括基于Map、JavaBean或ResultSet结果集的查询方式。下面是一些常用的查询操作方法:
查询单条记录
// 按照主键值查询单条记录String sql ="SELECT * FROM user WHERE id = ?";User user = jdbcTemplate.queryForObject(sql,newObject[]{1},newBeanPropertyRowMapper<>(User.class));// 按照条件查询单条记录String sql ="SELECT * FROM user WHERE username = ?";User user = jdbcTemplate.queryForObject(sql,newObject[]{"Tom"},newBeanPropertyRowMapper<>(User.class));
查询多条记录
// 查询所有记录String sql ="SELECT * FROM user";List<User> userList = jdbcTemplate.query(sql,newBeanPropertyRowMapper<>(User.class));// 根据条件查询多条记录String sql ="SELECT * FROM user WHERE age > ?";List<User> userList = jdbcTemplate.query(sql,newObject[]{18},newBeanPropertyRowMapper<>(User.class));
查询单个字段
// 查询某个字段的值String sql ="SELECT COUNT(*) FROM user";Long count = jdbcTemplate.queryForObject(sql,Long.class);// 根据条件查询某个字段的值String sql ="SELECT AVG(age) FROM user WHERE sex = ?";Double avgAge = jdbcTemplate.queryForObject(sql,newObject[]{"male"},Double.class);
带分页的查询
// 查询记录总数String sql ="SELECT COUNT(*) FROM user WHERE age > ?";Long totalCount = jdbcTemplate.queryForObject(sql,newObject[]{18},Long.class);// 分页查询记录String sql ="SELECT * FROM user WHERE age > ? LIMIT ?, ?";List<User> userList = jdbcTemplate.query(sql,newObject[]{18, start, pageSize},newBeanPropertyRowMapper<>(User.class));
4. 更新操作示例
JdbcTemplate提供了多种方式来执行SQL更新操作,包括INSERT、UPDATE和DELETE三种类型的SQL语句。
INSERT操作
// 插入单条记录String sql ="INSERT INTO user (username, password, age, sex) VALUES (?, ?, ?, ?)";int result = jdbcTemplate.update(sql,newObject[]{"Tom","123456",20,"male"});// 插入多条记录String sql ="INSERT INTO user (username, password, age, sex) VALUES (?, ?, ?, ?)";List<Object[]> batchArgs =newArrayList<>();
batchArgs.add(newObject[]{"Tom","123456",20,"male"});
batchArgs.add(newObject[]{"Lucy","654321",18,"female"});int[] result = jdbcTemplate.batchUpdate(sql, batchArgs);
UPDATE操作
// 更新单条记录String sql ="UPDATE user SET age = ? WHERE id = ?";int result = jdbcTemplate.update(sql,newObject[]{21,1});// 更新多条记录String sql ="UPDATE user SET age = ? WHERE sex = ?";int[] result = jdbcTemplate.batchUpdate(sql,newBatchPreparedStatementSetter(){@OverridepublicvoidsetValues(PreparedStatement ps,int i)throwsSQLException{
ps.setInt(1,21);
ps.setString(2,"male");}@OverridepublicintgetBatchSize(){return2;}});
DELETE操作
// 删除单条记录String sql ="DELETE FROM user WHERE id = ?";int result = jdbcTemplate.update(sql,newObject[]{1});// 删除多条记录String sql ="DELETE FROM user WHERE sex = ?";int[] result = jdbcTemplate.batchUpdate(sql,newBatchPreparedStatementSetter(){@OverridepublicvoidsetValues(PreparedStatement ps,int i)throwsSQLException{
ps.setString(1,"male");}@OverridepublicintgetBatchSize(){return2;}});
5. 批量操作示例
JdbcTemplate提供了批量操作的功能,可以实现批量插入、批量更新和批量删除等多种操作。
批量插入
// 插入多条记录String sql ="INSERT INTO user (username, password, age, sex) VALUES (?, ?, ?, ?)";List<Object[]> batchArgs =newArrayList<>();
batchArgs.add(newObject[]{"Tom","123456",20,"male"});
batchArgs.add(newObject[]{"Lucy","654321",18,"female"});int[] result = jdbcTemplate.batchUpdate(sql, batchArgs);
批量更新
// 更新多条记录String sql ="UPDATE user SET age = ? WHERE sex = ?";int[] result = jdbcTemplate.batchUpdate(sql,newBatchPreparedStatementSetter(){@OverridepublicvoidsetValues(PreparedStatement ps,int i)throwsSQLException{
ps.setInt(1,21);
ps.setString(2,"male");}@OverridepublicintgetBatchSize(){return2;}});
批量删除
// 删除多条记录String sql ="DELETE FROM user WHERE sex = ?";int[] result = jdbcTemplate.batchUpdate(sql,newBatchPreparedStatementSetter(){@OverridepublicvoidsetValues(PreparedStatement ps,int i)throwsSQLException{
ps.setString(1,"male");}@OverridepublicintgetBatchSize(){return2;}});
6. PreparedStatement操作示例
JdbcTemplate提供了PreparedStatement操作的API,可以通过PreparedStatementCreator接口创建预编译的SQL语句,然后使用PreparedStatementCallback回调函数实现对数据库的操作。
// 创建预编译的SQL语句String sql ="INSERT INTO user (username, password, age, sex) VALUES (?, ?, ?, ?)";PreparedStatementCreator psc = con ->{PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1,"Tom");
ps.setString(2,"123456");
ps.setInt(3,20);
ps.setString(4,"male");return ps;};// 执行预编译的SQL语句
jdbcTemplate.execute(psc,PreparedStatement::execute);
版权归原作者 明月安 所有, 如有侵权,请联系我们删除。