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);
        }
    }

 

posted on 2021-03-26 09:44  时寒很苦恼  阅读(710)  评论(0)    收藏  举报