spring-boot-route(七)整合jdbcTemplate操作數(shù)據(jù)庫

在一部分內(nèi)容中,我們學(xué)習(xí)了Restful接口的編寫蔑滓,及接口文檔的生成郊酒。我們需要將接口數(shù)據(jù)進行持久化存儲遇绞,這一部分我們主要學(xué)習(xí)幾種持久化框架將數(shù)據(jù)進行存儲。本部分內(nèi)容中燎窘,我們都將使用mysql為例來做為演示數(shù)據(jù)庫摹闽。

在剛開始接觸數(shù)據(jù)庫操作的時候我們都會使用JDBC來進行數(shù)據(jù)庫操作,但是每次都要創(chuàng)建連接褐健,關(guān)閉連接非常麻煩付鹿,Spring將JDBC進行了簡易的封裝成了一個新的框架——JdbcTemplate。

項目搭建

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

簡單操作數(shù)據(jù)庫

新建一張表student用來測試JdbcTemplate的常用功能蚜迅。建表語句如下:

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 '創(chuàng)建時間',
   `status` int(1) DEFAULT NULL COMMENT '狀態(tài):1:正常谁不,-1:刪除',
   PRIMARY KEY (`student_id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='學(xué)生表'

對應(yīng)的實體類如下:

@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提供了比較完善的數(shù)據(jù)庫操作API坐梯,日常開發(fā)中比較常用的API主要為兩類,分別是

  • query與queryXXX
  • update與batchUpdate

JdbcTemplate的使用也非常簡單刹帕,哪兒需要使用注入即可

@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吵血,為了減少與數(shù)據(jù)庫的操作,提高插入效率偷溺,將待插入的數(shù)據(jù)批量放在緩沖區(qū)蹋辅,一次批量插入多條數(shù)據(jù)。

public int batchAddStudent(){

    // 構(gòu)造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對于初學(xué)者來說是比較容易上手的一個框架,使用起來也非常方便。但是也存在一些缺點褒傅,它是將sql硬編碼到j(luò)ava代碼中硫麻,如果需要修改sql,就需要重新編譯java代碼樊卓,不利于維護拿愧。

此是spring-boot-route系列的第七篇文章,這個系列的文章都比較簡單碌尔,主要目的就是為了幫助初次接觸Spring Boot 的同學(xué)有一個系統(tǒng)的認(rèn)識浇辜。本文已收錄至我的github,歡迎各位小伙伴star唾戚!

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

點關(guān)注柳洋、不迷路

如果覺得文章不錯,歡迎關(guān)注叹坦、點贊熊镣、收藏,你們的支持是我創(chuàng)作的動力募书,感謝大家绪囱。

如果文章寫的有問題,請不要吝嗇莹捡,歡迎留言指出鬼吵,我會及時核查修改。

如果你還想更加深入的了解我篮赢,可以微信搜索「Java旅途」進行關(guān)注齿椅。回復(fù)「1024」即可獲得學(xué)習(xí)視頻及精美電子書启泣。每天7:30準(zhǔn)時推送技術(shù)文章涣脚,讓你的上班路不在孤獨,而且每月還有送書活動寥茫,助你提升硬實力遣蚀!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市坠敷,隨后出現(xiàn)的幾起案子妙同,更是在濱河造成了極大的恐慌,老刑警劉巖膝迎,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粥帚,死亡現(xiàn)場離奇詭異,居然都是意外死亡限次,警方通過查閱死者的電腦和手機芒涡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門柴灯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人费尽,你說我怎么就攤上這事赠群。” “怎么了旱幼?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵查描,是天一觀的道長。 經(jīng)常有香客問我柏卤,道長冬三,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任缘缚,我火速辦了婚禮勾笆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘桥滨。我一直安慰自己窝爪,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布齐媒。 她就那樣靜靜地躺著蒲每,像睡著了一般。 火紅的嫁衣襯著肌膚如雪里初。 梳的紋絲不亂的頭發(fā)上啃勉,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天忽舟,我揣著相機與錄音双妨,去河邊找鬼。 笑死叮阅,一個胖子當(dāng)著我的面吹牛刁品,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浩姥,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼挑随,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了勒叠?” 一聲冷哼從身側(cè)響起兜挨,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎眯分,沒想到半個月后拌汇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡弊决,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年噪舀,在試婚紗的時候發(fā)現(xiàn)自己被綠了魁淳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡与倡,死狀恐怖界逛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情纺座,我是刑警寧澤息拜,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站净响,受9級特大地震影響该溯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜别惦,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一狈茉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掸掸,春花似錦氯庆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至羽莺,卻和暖如春实昨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盐固。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工荒给, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刁卜。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓志电,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蛔趴。 傳聞我的和親對象是個殘疾皇子挑辆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,926評論 2 361