JDBCTemplate是由Spring框架提供的对JDBC的简单封装方式,可以简化JDBC的开发
使用步骤:
1、导入jar包
2、创建JDBCTemplate对象,依赖于数据源DataSouroe
3、使用方法来完成CRUD的操作
*update() -- 执行DML语句
*queryForMap() -- 查询结果,将结果封装为map集合
*queryForList() -- 查询结果,将结果封装为List集合
*queryForObject() -- 查询结果,将结果封装为对象,一般用于查询聚合函数
*query() -- 查询结果,将结果封装为JavaBean对象。第二个参数为RowMapper,一般使用BeanPropertyRowMapper实现类,可以完成数据到JavaBean的自动封装,演示在下方text6和text7中
使用演示(JDBCTemplate对事务管理的操作在最后):
/** * JDBCTemplate演示 */ public class JDBCTemplateDemo2 { //获取template对象 private JdbcTemplate template = new JdbcTemplate(DruidUtils.getDataSource()); /** * 修改一条记录 */ @Test public void text1(){ //定义sql String sql = "update account set balance = ? where id = ?"; //执行sql int count = template.update(sql, 2333, 1); System.out.println(count); } /** * 添加一条记录 */ @Test public void text2(){ //定义sql String sql = "insert into account(name,balance) values(?,?)"; //执行sql int count = template.update(sql, "wu", 1024); System.out.println(count); } /** * 删除一条记录 */ @Test public void text3(){ //定义sql String sql = "delete from account where id = ?"; //执行sql int count = template.update(sql, 8); System.out.println(count); } /** * 查询一条结果,封装成map集合 * 注意:查询的结果集只能是一条,否则封装失败 */ @Test public void text4(){ //定义sql String sql = "select * from account where id = ?"; //执行sql Map<String, Object> map = template.queryForMap(sql, 1); System.out.println(map); } /** * 查询所有结果,封装成List */ @Test public void text5(){ //定义sql String sql = "select * from account"; //执行sql List<Map<String, Object>> maps = template.queryForList(sql); //打印结果 for (Map<String, Object> map : maps) { System.out.println(map); } } /** * 查询所有结果,封装成account对象的list集合 */ @Test public void text6(){ //定义sql String sql = "select * from account"; //执行sql List<Account> list = template.query(sql, new RowMapper<Account>() { @Override public Account mapRow(ResultSet rs, int i) throws SQLException { Account account = new Account(); int id = rs.getInt("id"); String name = rs.getString("name"); int balance = rs.getInt("balance"); account.setId(id); account.setName(name); account.setBalance(balance); return account; } }); for (Account account : list) { System.out.println(account); } } /** * 查询所有结果,封装成account对象的list集合2 */ @Test public void text7(){ //定义sql String sql = "select * from account"; //执行sql List<Account> list = template.query(sql, new BeanPropertyRowMapper<Account>(Account.class)); for (Account account : list) { System.out.println(account); } } /** * 查询总记录数 */ @Test public void text8(){ //定义sql String sql="select count(id) from account"; //执行sql Long total = template.queryForObject(sql, Long.class); System.out.println(total); } }
JDBCTemplate的事务管理示例:
public static void main(String[] args) throws SQLException { Connection conn = null; try { //创建JDBCTemplate对象 JdbcTemplate temp = new JdbcTemplate(DruidUtils.getDataSource()); //开启事务 TransactionSynchronizationManager.initSynchronization(); //这条语句不知道干啥用的,但开启事务需要带上,否则无法回滚事务 conn = DataSourceUtils.getConnection(temp.getDataSource()); //获取Connection对象 conn.setAutoCommit(false); //开启事务 //定义sql String sql1 = "update account set balance=balance - ? where id = ?"; String sql2 = "update account set balance=balance + ? where id = ?"; //执行sql temp.update(sql1, 500, 1); int i = 3/0; temp.update(sql2, 500, 2); //提交事务 conn.commit(); } catch (Exception e) { e.printStackTrace(); //回滚事务 conn.rollback(); } finally { DruidUtils.close(null,conn); } }
浙公网安备 33010602011771号