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

    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM