首頁 > 軟體

SpringBoot2零基礎到精通之資料庫專項精講

2022-03-22 16:00:35

1 資料庫連線

1.1 設定資料庫連線資訊

  如果想要使用資料庫連線池連線資料庫進行SQL操作的話,在SpringBoot中需要經過如下三個步驟: 第一步: 匯入jdbc開發的啟動場景

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

第二步: 匯入資料庫驅動 之所以框架底層沒有自動匯入資料庫的驅動,是因為不同的資料庫使用的驅動不同,這需要使用者根據自己的需要來進行選擇。雖然框架沒有對指定資料庫驅動進行自動匯入,但是對不同資料庫驅動的版本都進行了版本仲裁,也就是說我們可以直接匯入無需定義版本號。當然也可以自定義版本號,maven會根據自身的就近依賴原則匯入自定義的版本

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

第三步: 設定資料庫連線的組態檔

# 設定資料庫
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: "123456"

1.2 整合Druid資料來源

  SpringBoot框架中預設使用的是Hikari資料來源,這也就意味著如果要是想要修改資料來源的話,無非就是兩種方法:自定義設定類、引入相應的啟動器依賴再設定組態檔

第一步: 引入Druid的啟動器依賴

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.17</version>
</dependency>

第二步: 設定組態檔(選學,框架一般都有預設的設定)

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db_account
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

    druid:
      aop-patterns: com.atguigu.admin.*  #監控SpringBean
      filters: stat,wall     # 底層開啟功能,stat(sql監控),wall(防火牆)

      stat-view-servlet:   # 設定監控頁功能
        enabled: true
        login-username: admin
        login-password: admin
        resetEnable: false

      web-stat-filter:  # 監控web
        enabled: true
        urlPattern: /*
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'


      filter:
        stat:    # 對上面filters裡面的stat的詳細設定
          slow-sql-millis: 1000
          logSlowSql: true
          enabled: true
        wall:
          enabled: true
          config:
            drop-table-allow: false

2 SpringBoot整合MyBatis

  mybatis開發的時候有兩種開發模式:使用組態檔進行開發、純註解開發,二者各有優點。使用組態檔進行開發在處理更加複雜的SQL語句的時候邏輯更加清晰,純註解開發比較適合簡單的SQL語句,於是我們可以在開發的時候混合使用兩種方法,這樣可以大大提升開發效率。

2.1 組態檔開發

第一步: 引入啟動器依賴 小知識:SpringBoot官方的所有技術啟動器的命名都是spring-boot-starter-xxx而第三方技術的啟動器命名則是xxx-spring-boot-starter。值得注意的是:MyBatis的啟動器內部參照了dbc開發的啟動場景,所以無需重複參照

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>

第二步: 編寫mapper介面並標註@Mapper註解

@Mapper
public interface StuMapper {

    Stu queryBySid(int sid);
}

第三步: 編寫對映檔案並繫結mapper介面

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.xiaochen.mapper.StuMapper">
    <select id="queryBySid" resultType="com.xiaochen.domain.Stu">
        select * from stu where sid=#{sid}
    </select>

</mapper>

第四步: 在組態檔中指定之前MyBatis組態檔的各種資訊

# mybatis的所有設定
mybatis:
mapper-locations: classpath:com.xiaochen.mapper/*.xml
# 所有的全域性組態檔的設定項在這下面設定
configuration:
# 開啟駝峰命名資料庫中欄位值的下劃線‘_’加字母會被認為是大寫
map-underscore-to-camel-case: true

2.2 純註解開發

第一步: 引入啟動器依賴

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>

第二步: 編寫mapper介面並標註@Mapper註解,使用對應的註解進行SQL語句操作

@Mapper
public interface StuMapper {

    @Select("select * from stu where sid=#{sid}")
    Stu queryBySid(int sid);
}

3 SpringBoot整合MyBatis-Plus

3.1 普通的CRUD方法

  MyBatis-plus的啟動器內部不止參照了dbc開發的啟動場景,還匯入了MyBatis的啟動器,所以這兩個都無需再重複參照 第一步: 引入啟動器依賴

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>

mapper層:

  編寫mapper介面標註@Mapper註解,並繼承BaseMapper類。這是MyBatis-plus的獨有方式,這樣做的好處是繼承之後直接使用父類別中已經寫好的簡單CRUD方法,但是一些複雜的SQL業務還是需要使用對映檔案來實現的,進一步提高了程式碼開發的效率

@Mapper
public interface StuMapper extends BaseMapper<Stu> {

}

  MyBatis-plus進行資料庫表的增刪改查的時候,預設把繼承BaseMapper類時傳進去的泛型名稱當做表名去查詢,如果泛型與資料庫中的表名不對應的話,可以在實體類使用註解標識,除此之外註解還可以用來標識主鍵和非表中欄位屬性

@NoArgsConstructor
@AllArgsConstructor
@Data
@TableName("stu")
public class Stu {
    // 表名該欄位是定義的臨時變數,並不存在於資料庫的表中
    @TableField(exist = false)
    private String gender;

    // 標明表的主鍵
    @TableId
    private int sid;
    private String sname;
    private String age;
    private String course;
    private int cardid;
}

  編寫對映檔案並繫結mapper介面(如果有的話)。MyBatis-plus自動設定好了預設的mapper-locations,也就是對映檔案的存放位置為classpath:/mapper/**/*.xml,於是我們就按照它的預設規則在靜態資源路徑下mapper資料夾下。本案例中沒有對映檔案,於是就不建立

  如果有需要的話,還可以在組態檔中指定MyBatis-plus組態檔的各種資訊

service層:

service介面繼承IService類

public interface StuService extends IService<Stu> {

}

  service的實現類先是繼承ServiceImpl並傳兩個泛型(mapper介面,實體類),然後實現service介面

@Service
public class StuServiceImpl extends ServiceImpl<StuMapper, Stu> implements StuService {
    
}

controller層: 直接使用service繼承類的簡單方法

@Controller
public class TableController {

    @Autowired
    StuServiceImpl stuService;

    /**
     * 點選Advanced table按鈕,進行頁面轉發,並攜帶一個表格資料
     * @param model 用於儲存資料
     * @return 頁面轉發forward 到 /table/dynamic_table.html
     */
    @GetMapping("/dynamic_table")
    public String dynamic_table(Model model) {
        // 從資料庫中查出user表進行展示
        List<Stu> list = stuService.list();
        model.addAttribute("stus", list);
        return "/table/dynamic_table";
    }
}

3.2 MyBatis-plus的分頁實現

  MyBatis-plus的分頁功能實現需要先自定義一個設定類,向容器中註冊一個Interceptor

@Configuration
public class MyBatisConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        paginationInnerInterceptor.setOverflow(true);
        paginationInnerInterceptor.setMaxLimit(500L);
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;
    }
}

然後就可以像普通的CRUD操作一樣,直接使用service繼承類的分頁的相關方法即可

@GetMapping("/dynamic_table")
public String dynamic_table(@RequestParam(value = "pn", defaultValue = "1")Integer pn,  Model model) {
    // 分頁從資料庫中查出stu表的所有資料,當前頁、總頁數、總條數……
    Page<Stu> stuPage = new Page<>(pn, 1);
    Page<Stu> page = stuService.page(stuPage);

    model.addAttribute("page", page);
    return "/table/dynamic_table";
}

到此這篇關於SpringBoot2零基礎到精通之資料庫專項精講的文章就介紹到這了,更多相關SpringBoot2 資料庫內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com