Spring JDBCTemplate(必须掌握)
概述:
Spring框架对JDBC的简单封装,提供了一个JDBCTemplate对象简化JDBC的开发
开发步骤:
-
导入JdbcTemplate的Jar包
-
创建JdbcTemplate对象,创建对象依赖于DataSource数据源
JDBCtemplate template = new JDBCTtemplate(new DataSource());
-
调用JDBCTemplate的方法来完成CRUD的操作
- update();执行DML语句,增删改
- queryForMap();查询结果将结果集封装成map集合,将列名作为key,将将值作为value将这条记录封闭为一个map集合
- 注意:这个方法查询的结果集长度只能是1,就是只能查询一条记录
- queryForList();查询结果将结果集封装成List集合
- 注意将每一条记录封装成一个Map集合,再将Map集合封装成List集合中
- query();查询结果,将结果封装为JavaBean对象
- query的参数:RowMapper
- 一般我们使用BeanPripertyRowMapper实现类,可以完成数据到JavaBean的自动封装
- new BeanPropertyRowMapper<类型>(类型.class);
- query的参数:RowMapper
- queryForObject():查询结果将结果封装为对象
- 一般用于聚合函数的查询
注意:Spring JDBCTemplate的开发只专注于Sql语句,Sql的执行,Sql执行结果的处理,不需要关注获取数据库连接对象和释放资源
/**
* 1.修改id为4记录的balance的金额为8888
* 2.添加一条记录
* 3.删除刚刚添加的记录
* 4.查询id为1的记录,将其封装成Map集合
* 5.查询所有记录,将其封装成List
* 6.查询总记录数
*/
package com.haikang.jdbcTemplate;
/**
* 1.修改id为4记录的balance的金额为8888
* 2.添加一条记录
* 3.删除刚刚添加的记录
* 4.查询id为1的记录,将其封装成Map集合
* 5.查询所有记录,将其封装成List
* 6.查询所有记录将其封装成Account对象(就是JavaBean类)
* 7.查询总记录数
*/
public class JdbcTemplate09 {
//1.Jar包
//2.创建数据源对象;配置基本属性
ComboPooledDataSource source = new ComboPooledDataSource();
//3.创建JdbcTemplate对象
JdbcTemplate jdbcTemplate = new JdbcTemplate(source);
@Test
// 1.修改id为4记录的balance的金额为8888
public void test01(){
//4.定义Sql语句
String sql = "update account set balance=? where id=?";
//5.执行Sql语句
int update = jdbcTemplate.update(sql, 1688888888, 1);
System.out.println(update);
}
@Test
//2.添加一条记录
public void test02(){
//4.定义Sql
String sql = "insert into account (name,balance) values(?,?)";
//执行sql语句
int update = jdbcTemplate.update(sql, "松竹", 168168);
System.out.println(update);
}
@Test
// 3.删除刚刚添加的记录
public void test03(){
//4.定义Sql
String sql = "delete from account where id=?";
//执行Sql
int update = jdbcTemplate.update(sql, 8);
System.out.println(update);
}
@Test
//4.查询id为1的记录,将其封装成Map集合
public void test04(){
//4.定义Sql
String sql = "select * from account where id=?";
//5.执行Sql
Map<String, Object> stringObjectMap = jdbcTemplate.queryForMap(sql, 1);
System.out.println(stringObjectMap);
//{id=1, name=明天, balance=1.688888888E9}
}
@Test
//5.查询所有记录,将其封装成List
public void test05(){
//4.定义Sql
String sql = "select * from account";
//5.执行Sql
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
for (Map<String, Object> map:
maps) {
System.out.println(map);
}
/**
* {id=1, name=明天, balance=1.688888888E9}
* {id=2, name=李四, balance=88888.0}
* {id=3, name=湛江, balance=88888.0}
* {id=4, name=雷州, balance=88888.0}
* {id=5, name=西安, balance=88888.0}
* {id=6, name=南宁, balance=88888.0}
* {id=9, name=宇瑞, balance=1.688888888E9}
* {id=11, name=松竹, balance=168168.0}
*/
}
@Test
//6.查询所有记录将其封装成Account对象(就是JavaBean类)
public void test06(){
//4.定义Sql语句
String sql = "select * from account";
//5.执行Sql
List<Account> lists = jdbcTemplate.query(sql, new RowMapper<Account>() {//自己实现RowMapper的方法
@Override
public Account mapRow(ResultSet resultSet, int i) throws SQLException {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
double aDouble = resultSet.getDouble(3);
Account account = new Account(id,name,aDouble);
return account;
}
});
for (Account list:
lists) {
System.out.println(list);
/**
* Account{id=1, name='明', balance=1.688888888E9}
* Account{id=2, name='李四', balance=88888.0}
* Account{id=3, name='湛江', balance=88888.0}
* Account{id=4, name='雷州', balance=88888.0}
* Account{id=5, name='西安', balance=88888.0}
* Account{id=6, name='南宁', balance=88888.0}
* Account{id=9, name='宇瑞', balance=1.688888888E9}
* Account{id=11, name='松竹', balance=168168.0}
*/
}
}
@Test
//6.查询所有记录将其封装成Account对象(就是JavaBean类)
public void test07(){
//4.定义Sql语句
String sql = "select * from account";
//5.执行Sql
List<Account> lists = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Account.class));
for (Account list:
lists) {
System.out.println(list);
/**
* Account{id=1, name='明', balance=1.688888888E9}
* Account{id=2, name='李四', balance=88888.0}
* Account{id=3, name='湛江', balance=88888.0}
* Account{id=4, name='雷州', balance=88888.0}
* Account{id=5, name='西安', balance=88888.0}
* Account{id=6, name='南宁', balance=88888.0}
* Account{id=9, name='宇瑞', balance=1.688888888E9}
* Account{id=11, name='松竹', balance=168168.0}
*/
}
}
@Test
//7.查询总记录数
public void test08(){
//4.定义Sql语句
String sql = "select count(?) from account";
//5.执行Sql
Integer total = jdbcTemplate.queryForObject(sql, new String[]{"id"},Integer.class);
System.out.println(total);
}
@Test
//7.查询总记录数
public void test09(){
//4.定义Sql语句
String sql = "select count(id) from account";
//5.执行Sql
Integer total = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(total);
}
}