JdbcTemplate工具类的使用
1. JDBCTemplate的由来
原生的JDBC开发效率不高,而且我们需要时刻关注数据库连接的开与关,一不留神就出现内存溢出。
所以在此基础之上产生了很多个封装了jdbc操作的框架或者工具:JdbcTemplate,DBUtils,Hibernate,Mybatis,JPA等一堆关于数据库的操作。
JdbcTemplate 该工具是一个简单的jdbc封装工具类,性能好,开发效率高,学习成本低。
Spring组织开发的一个项目,Java工程师永远离不开Spring.
JdbcTemplate 只是对jdbc做一个简易的封装,MyBatis,JPA是框架,对jdbc做更深一层次的封装
2.用法
获取数据源:DataSource dataSource = JDBCPoolUtils.getDataSource();
得到一个jdbcTemplate对象,如果要得到该对象,必须传递一个 数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
// 执行SQL语句,完毕
int update = jdbcTemplate.update("update account set money=money-10 where name='Tom'");
不管是新增,修改,还是删除,都是使用update方法
3.查询的执行
1、queryForMap 结果是map集合,数据必须是一条,否则报错
2、queryForList 查询结果是list中有很多map
3、jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(Account2.class));
前提条件是:数据库中的表字段名和实体中的属性名完全一致才能使用。
4、如果属性和表中的字段有不一样的,可以使用如下方法:
List<Account> list = jdbcTemplate.query(sql, new RowMapper<Account>() {
@Override
public Account mapRow(ResultSet resultSet, int i) throws SQLException {
Account account = new Account();
account.setId(resultSet.getInt("id"));
account.setUsername(resultSet.getString("name"));
account.setMoney(resultSet.getInt("money"));
return account;
}
});
4.关于统计类:查询总记录数
@Test
public void test7(){
String sql = "select count(id) from emp";
Long total = template.queryForObject(sql, Long.class);
System.out.println(total);
}
}
5.批量操作
int[] arr={1,3};
String sql = "delete from account where id=?";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
// 可以通过PreparedStatement 给 占位符? 赋值
// 1 代表第一个问号
// i 代表的是每次循环的一个下表 从0开始,有多少次,就会循环多少次
preparedStatement.setInt(1,arr[i]);
}
@Override
public int getBatchSize() {
// 告诉我们的jdbcTemplate 我这次需要执行多少次
return arr.length;
}
});