JdbcTemplate+参数+查询操作展示、更新操作展示、批量操作展示、PreparedStatement操作展示
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,例如:
<!-- 配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
<property name="user" value="root"/>
<property name="password" value="123456"/>
</bean>
<!-- 配置JdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
2. JdbcTemplate的基础操作,源代码参数解析
JdbcTemplate提供了一系列基础的操作方法,包括查询、更新、批量操作等。这些操作方法都是通过JdbcTemplate类提供的API来实现的。下面是一些常用的基础操作方法:
查询操作
public List<Map<String, Object>> queryForList(String sql, Object... args)
public List<T> query(String sql, Object[] args, RowMapper<T> rowMapper)
public T queryForObject(String sql, Object[] args, RowMapper<T> rowMapper)
queryForList
:执行SQL查询并返回一个List对象,每个元素为一个Map对象,表示一行记录。query
:执行SQL查询并返回一个List对象,每个元素为一个JavaBean对象。queryForObject
:执行SQL查询并返回一个单一的结果对象,通常用于查询单条记录。
更新操作
public int update(String sql, Object... args)
public int[] batchUpdate(String... sql)
update
:执行SQL更新操作,返回受影响的行数。batchUpdate
:批量执行SQL更新操作,返回一个int数组,其中每个元素表示对应SQL语句所影响的行数。
批量操作
public <T> void execute(String sql, BatchPreparedStatementSetter pss)
public int[] batchUpdate(String sql, BatchPreparedStatementSetter pss)
execute
:执行批量更新操作,需要一个BatchPreparedStatementSetter对象作为参数,用于设置批量更新的参数。batchUpdate
:批量执行SQL更新操作,需要一个BatchPreparedStatementSetter对象作为参数,用于设置批量更新的参数。返回一个int数组,其中每个元素表示对应SQL语句所影响的行数。
PreparedStatement操作
public <T> T execute(PreparedStatementCreator psc, PreparedStatementCallback<T> action)
public <T> T execute(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, new Object[]{1}, new BeanPropertyRowMapper<>(User.class));
// 按照条件查询单条记录
String sql = "SELECT * FROM user WHERE username = ?";
User user = jdbcTemplate.queryForObject(sql, new Object[]{"Tom"}, new BeanPropertyRowMapper<>(User.class));
查询多条记录
// 查询所有记录
String sql = "SELECT * FROM user";
List<User> userList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
// 根据条件查询多条记录
String sql = "SELECT * FROM user WHERE age > ?";
List<User> userList = jdbcTemplate.query(sql, new Object[]{18}, new BeanPropertyRowMapper<>(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, new Object[]{"male"}, Double.class);
带分页的查询
// 查询记录总数
String sql = "SELECT COUNT(*) FROM user WHERE age > ?";
Long totalCount = jdbcTemplate.queryForObject(sql, new Object[]{18}, Long.class);
// 分页查询记录
String sql = "SELECT * FROM user WHERE age > ? LIMIT ?, ?";
List<User> userList = jdbcTemplate.query(sql, new Object[]{18, start, pageSize}, new BeanPropertyRowMapper<>(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, new Object[]{"Tom", "123456", 20, "male"});
// 插入多条记录
String sql = "INSERT INTO user (username, password, age, sex) VALUES (?, ?, ?, ?)";
List<Object[]> batchArgs = new ArrayList<>();
batchArgs.add(new Object[]{"Tom", "123456", 20, "male"});
batchArgs.add(new Object[]{"Lucy", "654321", 18, "female"});
int[] result = jdbcTemplate.batchUpdate(sql, batchArgs);
UPDATE操作
// 更新单条记录
String sql = "UPDATE user SET age = ? WHERE id = ?";
int result = jdbcTemplate.update(sql, new Object[]{21, 1});
// 更新多条记录
String sql = "UPDATE user SET age = ? WHERE sex = ?";
int[] result = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setInt(1, 21);
ps.setString(2, "male");
}
@Override
public int getBatchSize() {
return 2;
}
});
DELETE操作
// 删除单条记录
String sql = "DELETE FROM user WHERE id = ?";
int result = jdbcTemplate.update(sql, new Object[]{1});
// 删除多条记录
String sql = "DELETE FROM user WHERE sex = ?";
int[] result = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setString(1, "male");
}
@Override
public int getBatchSize() {
return 2;
}
});
5. 批量操作示例
JdbcTemplate提供了批量操作的功能,可以实现批量插入、批量更新和批量删除等多种操作。
批量插入
// 插入多条记录
String sql = "INSERT INTO user (username, password, age, sex) VALUES (?, ?, ?, ?)";
List<Object[]> batchArgs = new ArrayList<>();
batchArgs.add(new Object[]{"Tom", "123456", 20, "male"});
batchArgs.add(new Object[]{"Lucy", "654321", 18, "female"});
int[] result = jdbcTemplate.batchUpdate(sql, batchArgs);
批量更新
// 更新多条记录
String sql = "UPDATE user SET age = ? WHERE sex = ?";
int[] result = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setInt(1, 21);
ps.setString(2, "male");
}
@Override
public int getBatchSize() {
return 2;
}
});
批量删除
// 删除多条记录
String sql = "DELETE FROM user WHERE sex = ?";
int[] result = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setString(1, "male");
}
@Override
public int getBatchSize() {
return 2;
}
});
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);
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfkikeg
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01