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

    }

Springboot使用JdbcTemplate的使用

上一篇:真懂JavaScript吗


下一篇:WEB免费打印控件推荐