Spring5-JdbcTemplate
1.概述
- Spring框架对JDBC进行封装,使用JdbcTemplate方便对数据库实现操作(增删改查)
- 配置bean文件
xml文件,配合德鲁伊连接池:
注意:新驱动器为com.mysql.cj.jdbc.Driver; url需加上时区
<!-- 数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
<property name="url" value="jdbc:mysql:///user_db?serverTimezone=UTC" />
<property name="username" value="root" />
<property name="password" value="root" />
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
</bean>
<!--开启组件扫描-->
<context:component-scan base-package="JDBC"></context:component-scan>
<!--JdbcTemplate对象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--注入dataSource,用set方法注入-->
<property name="dataSource" ref="dataSource"></property>
</bean>
- 实现方法:
创建service类,dao类,在dao中注入jdbcTemplate对象
在dao实现类中注入jdbcTemplate对象:
注入:
@Autowired
private JdbcTemplate jdbcTemplate;
2.JdbcTempla操作数据库
1.添加
- 对应数据库表目创建实体类
- 调用jdbcTemplate对象中的update方法实现添加操作:
update(String sql, Object... args)
- 参数1: sql语句
- 参数2: 可变参数, 设置sql语句值(对应添加对象)
eg.
public void add(Book book) {
//1 创建sql语句
String sql = "insert into t_book values(?,?,?)";
//2 调用方法实现
Object[] args = {book.getUsedId(), book.getUserName(), book.getUstatus()};
//将args传入下述也可
int update = jdbcTemplate.update(sql, args);
System.out.println(update);
}
2.修改
eg.类似于添加:
String sql = "update t_book set user_id=?,username=? where ustatus=?";
Object[] args = {book.getUsedId(), book.getUserName(), book.getUstatus()};
int update = jdbcTemplate.update(sql, args);
System.out.println(update);
3.删除
eg.类似于添加,基于id删除
public void delete(String id) {
String sql = "delete from t_book where user_id=?";
int update = jdbcTemplate.update(sql, id);
System.out.println(update);
}
4.查询
1).查询返回某个值
eg. 查询表中有多少记录,返回某个值
sql语言: SELECT COUNT(*) FROM t_book
将返回一个数字表示记录数
利用JdbcTemplate实现查询返回某个值代码(queryForObject)
jdbcTemplate.queryForObject(String sql, Class<T> requiredType)
- 参数1:sql语句
- 参数2:返回类型的Class (int-Integer.class ...)
- 返回2的Class类型
eg
public int selectCount() {
String sql = "select count(*) from t_book";
Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
return count;
}
2).查询返回对象
eg. 场景:查询图书的详情页面(一种对象)
利用JdbcTemplate实现查询返回对象(queryForObject)
jdbcTemplate.queryForObject(String sql, RowMapper<T> rowMapper, Object... args)
- 参数1:sql语句
- 参数2:RowMapper, 本身为一接口, 针对返回不同类型数据,使用这个接口的实现类可以完成数据封装.
eg.new BeanPropertyRowMapper<Book>(Book.class)
Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
- 参数3:sql语句值
- 返回2的Class类型
eg.
public Book findBookInfo(String id) {
String sql = "select * from t_book where user_id=?";
//调用方法实现
Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
return book;
}
3).查询返回集合
eg. 场景:查询图书列表分页(集合)
利用JdbcTemplate实现查询返回对象(queryForObject)
jdbcTemplate.queryForObject(String sql, RowMapper<T> rowMapper, Object... args)
- 参数1:sql语句
- 参数2:RowMapper.
List<Book> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
- 参数3:sql语句值(无)
eg.
public List<Book> findAllBook() {
String sql = "selet * from t_book";
List<Book> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
return list;
}
3.JdbcTemplate操作数据库(批量操作)
- 批量操作: 操作表里的多条记录
- 对上述增删改实现批量操作,运用列表实现操作
1).批量添加
jdbcTemplate.batchUpdate(String sql, List<Object[]> batchArgs
- 参数1:sql语句
- 参数2:List集合,添加多条记录数据
eg.源码
public void batchAddBook(List<Object[]> batchArgs) {
String sql = "insert into t_book values(?,?,?)";
//将list集合进行遍历,将数组值执行sql语句进行添加
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(Arrays.toString(ints));
}
实现:
List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {"100", "Spring", "good"};
Object[] o2 = {"200", "Maven", "bad"};
Object[] o3 = {"300", "Mysql", "no"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
bookService.batchAdd(batchArgs);
2.批量修改
jdbcTemplate.batchUpdate(String sql, List<Object[]> batchArgs
eg.
public void batchUpdateBook(List<Object[]> batchArgs) {
String sql = "update t_book set userid=?,username=? where ustatus=?";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(Arrays.toString(ints));
}
3.批量删除
jdbcTemplate.batchUpdate(String sql, List<Object[]> batchArgs
eg.
public void batchDeleteBook(List<Object[]> batchArgs) {
String sql = "delete from t_book where userid=?";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(Arrays.toString(ints));
}