springboot整合jdbc

对于数据访问层,无论是 SQL(关系型数据库) 还是 NOSQL(非关系型数据库),Spring Boot 底层都是采用 Spring Data 的方式进行统一处理。

Spring Data 官网

样例

1. 新建项目

增加web模块,jdbc api模块,mysql driver模块

  	    <!--   jdbc     -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!--  mysql      -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

2. yml配置文件连接数据库

spring:
  datasource:
    username: root
    password: 18170021
    url: jdbc:mysql://localhost:3306/books?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver

3. 测试类

我们可以看到他默认给我们配置的数据源为 : class com.zaxxer.hikari.HikariDataSource

class Springboot07DataApplicationTests {

    @Autowired
    DataSource dataSource;
    @Test
    void contextLoads() {
        System.out.println(dataSource.getClass());

        Connection connection = null;
        try {
            connection = dataSource.getConnection();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        System.out.println(connection);

    }

}

JdbcTemplate

有了数据源(com.zaxxer.hikari.HikariDataSource),然后可以拿到数据库连接(java.sql.Connection),有了连接,就可以使用原生的 JDBC 语句来操作数据库;即使不使用第三方第数据库操作框架,如 MyBatis等,Spring 本身也对原生的JDBC 做了轻量级的封装,即JdbcTemplate。

JdbcTemplate方法

  • execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
  • update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
  • query方法及queryForXXX方法:用于执行查询相关语句;
  • call方法:用于执行存储过程、函数相关语句。

测试方法

@RestController
public class JDBCController {

    @Autowired
    JdbcTemplate jdbcTemplate;
    //没有实体类,数据库中的东西怎么获取  map

    @GetMapping("/bookList")
    public List<Map<String,Object>> bookList(){
        String sql = "select * from book";
        return jdbcTemplate.queryForList(sql);
    }

    @GetMapping("/addBook")
    public String addBook(){
        String sql = "insert into book(recID,title,book_type,price) values('B00003','概率论与数理统计','数学类',35.5) ";
        jdbcTemplate.update(sql);
        return "update - ok";
    }

    @GetMapping("/updateBook/{id}")
    public String updateBook(@PathVariable("id") String id){

        String sql = "update book set title=?,book_type=?,price=? where recID=?";

        Object[] objects = new Object[4];
        objects[0] = "概率论与数理统计";
        objects[1] = "数学类";
        objects[2] = 33.2;
        objects[3] = id;

        jdbcTemplate.update(sql,objects);
        return "update - ok";
    }

    @GetMapping("deleteBook/{id}")
    public String deleteBook(@PathVariable("id") String id){

        String sql = "delete from book where recId=?";
        jdbcTemplate.update(sql,id);
        return "delete - ok";
    }

}

posted @ 2021-01-12 16:11  iucbjb  阅读(49)  评论(0)    收藏  举报