spring-boot-route(七)整合jdbcTemplate操做數據庫

在一部份內容中,咱們學習了Restful接口的編寫,及接口文檔的生成。咱們須要將接口數據進行持久化存儲,這一部分咱們主要學習幾種持久化框架將數據進行存儲。本部份內容中,咱們都將使用mysql爲例來作爲演示數據庫。java

在剛開始接觸數據庫操做的時候咱們都會使用JDBC來進行數據庫操做,可是每次都要建立鏈接,關閉鏈接很是麻煩,Spring將JDBC進行了簡易的封裝成了一個新的框架——JdbcTemplate。mysql

項目搭建

1 添加mysql依賴

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.11</version>
</dependency>

2. 添加jdbcTemplate依賴

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

3. 配置mysql

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/simple_fast?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&useAffectedRows=true&allowPublicKeyRetrieval=true
    username: root
    password: root

簡單操做數據庫

新建一張表student用來測試JdbcTemplate的經常使用功能。建表語句以下:git

CREATE TABLE `student` (
   `student_id` int(30) NOT NULL,
   `age` int(1) DEFAULT NULL COMMENT '年齡',
   `name` varchar(45) DEFAULT NULL COMMENT '姓名',
   `sex` int(1) DEFAULT NULL COMMENT '性別:1:男,2:女,0:未知',
   `create_time` datetime DEFAULT NULL COMMENT '建立時間',
   `status` int(1) DEFAULT NULL COMMENT '狀態:1:正常,-1:刪除',
   PRIMARY KEY (`student_id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='學生表'

對應的實體類以下:github

@Data
@NoArgsConstructor
@AllArgsConstructor
public class StudentBean implements Serializable {
    
    private static final long serialVersionUID = 4618004018169112427L;

    private Integer studentId;
    private Integer age;
    private String name;
    private Integer sex;
    private Date createTime;
    private Integer status;
}

JdbcTemplate提供了比較完善的數據庫操做API,平常開發中比較經常使用的API主要爲兩類,分別是spring

  • query與queryXXX
  • update與batchUpdate

JdbcTemplate的使用也很是簡單,哪兒須要使用注入便可sql

@Autowired
private JdbcTemplate jdbcTemplate;

1 查詢單個實體

public StudentBean getStudent(int status){
    String sql = "select * from student where status = ? limit 1";
    return jdbcTemplate.queryForObject(sql,new Object[]{status},new BeanPropertyRowMapper<>(StudentBean.class));
}

2 查詢List集合

public List<StudentBean> studentBeanList(int status){
    String sql = "select * from student where status = ?";
    return  jdbcTemplate.query(sql,new Object[]{status},new BeanPropertyRowMapper<>(StudentBean.class));
}

3. 刪除操做

public int deleteStudent(int status){
    String sql = "delete from student where status = 0";
    return jdbcTemplate.update(sql);
}

4. 更新操做

public int updateStudent(int studentId,String name){
    String sql = "update student set name = ? where student_id = ?";
    return jdbcTemplate.update(sql,new Object[]{name,studentId});
}

5. 插入操做

public int addStudent(){
    String sql = "insert into student(student_id,age,name,status) values(?,?,?,?)";
    return jdbcTemplate.update(sql,new Object[]{30,18,"Java旅途",0});
}

6. 批量插入

JdbcTemplate提供了批量插入的API,爲了減小與數據庫的操做,提升插入效率,將待插入的數據批量放在緩衝區,一次批量插入多條數據。數據庫

public int batchAddStudent(){

    // 構造list集合
    List<StudentBean> studentBeanList = new ArrayList<>();
    StudentBean studentBean = new StudentBean(31, 31, "Java旅途", 1, new Date(), 1);
    StudentBean studentBean1 = new StudentBean(32, 32, "javatrip", 1, new Date(), 1);
    studentBeanList.add(studentBean);
    studentBeanList.add(studentBean1);
    String sql = "insert into student values(?,?,?,?,?,?)";

    int[] ints = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
        @Override
        public void setValues(PreparedStatement ps, int i) throws SQLException {
            StudentBean student = studentBeanList.get(i);
            ps.setInt(1, student.getStudentId());
            ps.setInt(2, student.getAge());
            ps.setString(3, student.getName());
            ps.setInt(4, student.getSex());
            ps.setDate(5,new java.sql.Date(System.currentTimeMillis()));
            ps.setInt(6, student.getStatus());
        }

        @Override
        public int getBatchSize() {
            return studentBeanList.size();
        }
    });
    return ints.length;
}

上面只是演示了幾個簡單的例子,若是須要更詳細的用法能夠參考官方提供的JdbcTemplate API。JdbcTemplate對於初學者來講是比較容易上手的一個框架,使用起來也很是方便。可是也存在一些缺點,它是將sql硬編碼到java代碼中,若是須要修改sql,就須要從新編譯java代碼,不利於維護。微信

此是spring-boot-route系列的第七篇文章,這個系列的文章都比較簡單,主要目的就是爲了幫助初次接觸Spring Boot 的同窗有一個系統的認識。本文已收錄至個人github,歡迎各位小夥伴starapp

githubhttps://github.com/binzh303/spring-boot-route框架

點關注、不迷路

若是以爲文章不錯,歡迎關注點贊收藏,大家的支持是我創做的動力,感謝你們。

若是文章寫的有問題,請不要吝嗇,歡迎留言指出,我會及時覈查修改。

若是你還想更加深刻的瞭解我,能夠微信搜索「Java旅途」進行關注。回覆「1024」便可得到學習視頻及精美電子書。天天7:30準時推送技術文章,讓你的上班路不在孤獨,並且每個月還有送書活動,助你提高硬實力!

相關文章
相關標籤/搜索