Springboot使用JdbcTemplate的使用
在spring-boot-starter-jdbc这个依赖包中一共分成四个部分。
- core,JdbcTemplate等相关核心接口和类
- datasource,数据源相关的辅助类
- object,将基本的jdbc操作封装成对象
- support,错误码等其他辅助工具
这里对JdbcTemplate这个类进行描述。JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。JdbcTemplate处理了资源的建立和释放。他帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果。
JdbcTemplate提供的方法
在JdbcTemplate中执行SQL语句的方法大致分为3类。
- execute,可以执行所有的sql语句,一般用来执行ddl语句
- update,用于执行insert、update、delete等dml语句
- queryXXX,用于DQL数据查询语句
execute方法
    @GetMapping("/api/jdbc-oper/createTable")
    public void createTable() {
        String sql = "create table product (id int primary key auto_increment,name varchar(64),description varchar(128))";
        jdbcTemplate.execute(sql);
    }
update方法
  @GetMapping("/api/jdbc-oper/addData")
    public void addData() {
        String sql = "insert into product(name) values(?)";
        Arrays.asList("Java编程思想", "Spring boot in action", "spark")
                .forEach(p -> {
                    jdbcTemplate.update(sql, p);
                });
    }
    @GetMapping("/api/jdbc-oper/updateData")
    public void updateData() {
        String sql = "update product set description='这是Java编程思想' where name ='Java编程思想'";
        jdbcTemplate.update(sql);
    }
    @GetMapping("/api/jdbc-oper/deleteData")
    public void deleteData() {
        String sql = "";
        jdbcTemplate.update(sql);
    }
queryXXX方法
查询一个字段的场景
    @GetMapping("/api/jdbc-oper/queryForInt")
    public void queryForInt() {
        String sql = "select count(*) from product";
        Integer totalNum = jdbcTemplate.queryForObject(sql, Integer.class);
        System.out.println(totalNum);
    }
查询一个普通列表的场景
    @GetMapping("/api/jdbc-oper/queryName")
    public void queryName() {
        String sql = "select name from product";
        List<String> names = jdbcTemplate.queryForList(sql, String.class);
        System.out.println(names);
    }
查询一个对象列表的场景
   @GetMapping("/api/jdbc-oper/queryProduct")
    public void queryProduct() {
        String sql = "select * from product";
        List<Product> productList = jdbcTemplate.query(sql, new RowMapper<Product>() {
            @Nullable
            @Override
            public Product mapRow(ResultSet resultSet, int i) throws SQLException {
                return Product.builder()
                        .id(resultSet.getInt(1))
                        .name(resultSet.getString(2))
                        .build();
            }
        });
        productList.forEach(product -> log.info("product:{}", product));
    }
批量操作的方法
 @GetMapping("/api/jdbc-oper/batchInsert")
    public void batchInsert() {
        String sql = "insert into product (name) values (?)";
        List<String> products = Arrays.asList("product1", "product2", "product3");
        jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
            @Override
            public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
                preparedStatement.setString(1, products.get(i));
            }
            @Override
            public int getBatchSize() {
                return products.size();
            }
        });
    }
    知行合一
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号