<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 一、jdbc簡介 JDBC(Java DataBase Connectivity)是一種用于執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序, > 術語:什么是持久層:在后面的章節我會經常用到持久層這個詞,持久層就是指對數據進行持久化操作的代碼,比如將數據保存到數據庫、文件、磁盤等操作都是持久層操作。所謂持久就是保存起來的意思。對于web應用最常用的持久層框架就是JDBC、Mybatis、JPA。 ## 二、使用jdbc操作數據庫的步驟 直接在 Java 程序中使用 JDBC 比較復雜,需要 7 步才能完成數據庫的操作: 1. 加載數據庫驅動 2. 建立數據庫連接 3. 創建數據庫操作對象 4. 定義操作的 SQL 語句 5. 執行數據庫操作 6. 獲取并操作結果集 7. 關閉對象,回收資源 關鍵代碼如下: ~~~ try { // 1、加載數據庫驅動 Class.forName(driver); // 2、獲取數據庫連接 conn = DriverManager.getConnection(url, username, password); // 3、獲取數據庫操作對象 stmt = conn.createStatement(); // 4、定義操作的 SQL 語句 String sql = "select * from user where id = 6"; // 5、執行數據庫操作 rs = stmt.executeQuery(sql); // 6、獲取并操作結果集 while (rs.next()) { // 解析結果集 } } catch (Exception e) { // 日志信息 } finally { // 7、關閉資源 } ~~~ 通過上面的示例可以看出直接使用 JDBC 來操作數據庫比較復雜。為此,Spring Boot 針對 JDBC 的使用提供了對應的 Starter 包:spring-boot-starter-jdbc,它其實就是在 Spring JDBC 上做了進一步的封裝,方便在 Spring Boot 生態中更好的使用 JDBC,下面進行示例演示。 > 本教程作為spring boot系列教程,并不能將spring jdbc的方方面面講到,本文只會去講最重要的部分,如果想更加深入的學習Spring JDBC。建議參考:[https://www.yiibai.com/springjdbc](https://www.yiibai.com/springjdbc) 不論是JDBC,還是封裝之后的Spring JDBC,直接操作數據庫都比較麻煩。如果企業有成熟的ORM知識積累,并且無特殊需求,不建議直接使用JDBC操作數據庫。 ## 三、?將Spring JDBC集成到Spring boot項目 > 在《3-8 配置文件敏感字段加密》master分支的基礎上新建一個分支:jdbc 第一步:引入maven依賴包,包括spring JDBC和MySQL驅動。 ~~~ <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ~~~ 第二步:修改application.yml,增加數據庫連接、用戶名、密碼相關的配置。driver-class-name請根據自己使用的數據庫和數據庫版本準確填寫。 ~~~ spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 datasource: url: jdbc:mysql://127.0.0.1:3306/wyh?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver ~~~ **這里看具體本地數據庫版本,如果是mysql 5則使用 5的driver,6以上使用 6 的driver。不要用錯!** * mysql-connector-java 5版本及其以下,使用`com.mysql.jdbc.Driver` * mysql-connector-java 6版本及其以上,使用`com.mysql.cj.jdbc.Driver` ## 四、 ?spring boot jdbc 基礎代碼 spring jdbc集成完畢之后,我們來寫代碼做一個基本的測試。首先我們新建一張測試表article ~~~ CREATE TABLE `article` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `author` VARCHAR(32) NOT NULL, `title` VARCHAR(32) NOT NULL, `content` VARCHAR(512) NOT NULL, `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) COMMENT='文章' ENGINE=InnoDB; ~~~ DAO層代碼: * jdbcTemplate.update適合于insert 、update和delete操作; * jdbcTemplate.queryForObject用于查詢單條記錄返回結果 * jdbcTemplate.query用于查詢結果列表 * BeanPropertyRowMapper可以將數據庫字段的值向Article對象映射,滿足駝峰標識也可以自動映射。如:數據庫create\_time字段映射到createTime屬性。 ~~~ @Repository //持久層依賴注入注解 public class ArticleJDBCDAO { @Resource private JdbcTemplate jdbcTemplate; //保存文章 public void save(Article article) { //jdbcTemplate.update適合于insert 、update和delete操作; jdbcTemplate.update("INSERT INTO article(author, title,content,create_time) values(?, ?, ?, ?)", article.getAuthor(), article.getTitle(), article.getContent(), article.getCreateTime()); } //刪除文章 public void deleteById(Long id) { //jdbcTemplate.update適合于insert 、update和delete操作; jdbcTemplate.update("DELETE FROM article WHERE id = ?",id); } //更新文章 public void updateById(Article article) { //jdbcTemplate.update適合于insert 、update和delete操作; jdbcTemplate.update("UPDATE article SET author = ?, title = ? ,content = ?,create_time = ? WHERE id = ?", article.getAuthor(), article.getTitle(), article.getContent(), article.getCreateTime(), article.getId()); } //根據id查找文章 public Article findById(Long id) { //queryForObject用于查詢單條記錄返回結果 return (Article) jdbcTemplate.queryForObject("SELECT * FROM article WHERE id=?", new Object[]{id},new BeanPropertyRowMapper<>(Article.class)); } //查詢所有 public List<Article> findAll(){ //query用于查詢結果列表 return (List<Article>) jdbcTemplate.query("SELECT * FROM article ", new BeanPropertyRowMapper<>(Article.class)); } } ~~~ service層接口 ~~~ public interface ArticleService { void saveArticle(Article article); void deleteArticle(Long id); void updateArticle(Article article); Article getArticle(Long id); List<Article> getAll(); } ~~~ service層操作JDBC持久層 ~~~ package com.kimgao.bootlauch.service; import com.kimgao.bootlauch.dao.ArticleJDBCDAO; import com.kimgao.bootlauch.model.Article; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; @Service public class ArticlleJDBCService implements ArticleService{ @Resource private ArticleJDBCDAO articleJDBCDAO; @Transactional public void saveArticle( Article article) { articleJDBCDAO.save(article); } @Override public void deleteArticle(Long id){ articleJDBCDAO.deleteById(id); } @Override public void updateArticle(Article article){ if(article.getId() == null){ //拋出異常,以后寫 } articleJDBCDAO.updateById(article); } @Override public Article getArticle(Long id){ return articleJDBCDAO.findById(id); } @Override public List<Article> getAll(){ return articleJDBCDAO.findAll(); } } ~~~ 最后,在我們之前的章節為大家實現的ArticleController中調用ArticleRestJDBCService 實現方法,進行從Controller 到 Service 到 DAO層的全流程測試。 * 重點測試一下事務的回滾,人為制造一個被除數為0的異常。 * 在saveArticle方法上使用了@Trasactional注解,該注解基本功能為事務管理,保證saveArticle方法一旦有異常,所有的數據庫操作就回滾。 ~~~ @Override @Transactional public void updateArticle(Article article){ if(article.getId() == null){ //拋出異常,以后寫 } //刪除后新增 articleJDBCDAO.deleteById(article.getId()); articleJDBCDAO.save(article); //articleJDBCDAO.updateById(article) int a = 10/0; } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看