亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot2零基礎(chǔ)到精通之?dāng)?shù)據(jù)庫(kù)專項(xiàng)精講

 更新時(shí)間:2022年03月22日 11:42:44   作者:扎哇太棗糕  
SpringBoot是一種整合Spring技術(shù)棧的方式(或者說(shuō)是框架),同時(shí)也是簡(jiǎn)化Spring的一種快速開(kāi)發(fā)的腳手架,本篇我們來(lái)學(xué)習(xí)如何連接數(shù)據(jù)庫(kù)進(jìn)行操作

1 數(shù)據(jù)庫(kù)連接

1.1 配置數(shù)據(jù)庫(kù)連接信息

  如果想要使用數(shù)據(jù)庫(kù)連接池連接數(shù)據(jù)庫(kù)進(jìn)行SQL操作的話,在SpringBoot中需要經(jīng)過(guò)如下三個(gè)步驟: 第一步: 導(dǎo)入jdbc開(kāi)發(fā)的啟動(dòng)場(chǎng)景

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

第二步: 導(dǎo)入數(shù)據(jù)庫(kù)驅(qū)動(dòng) 之所以框架底層沒(méi)有自動(dòng)導(dǎo)入數(shù)據(jù)庫(kù)的驅(qū)動(dòng),是因?yàn)椴煌臄?shù)據(jù)庫(kù)使用的驅(qū)動(dòng)不同,這需要用戶根據(jù)自己的需要來(lái)進(jìn)行選擇。雖然框架沒(méi)有對(duì)指定數(shù)據(jù)庫(kù)驅(qū)動(dòng)進(jìn)行自動(dòng)導(dǎo)入,但是對(duì)不同數(shù)據(jù)庫(kù)驅(qū)動(dòng)的版本都進(jìn)行了版本仲裁,也就是說(shuō)我們可以直接導(dǎo)入無(wú)需定義版本號(hào)。當(dāng)然也可以自定義版本號(hào),maven會(huì)根據(jù)自身的就近依賴原則導(dǎo)入自定義的版本

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

第三步: 配置數(shù)據(jù)庫(kù)連接的配置文件

# 設(shè)置數(shù)據(jù)庫(kù)
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: "123456"

1.2 整合Druid數(shù)據(jù)源

  SpringBoot框架中默認(rèn)使用的是Hikari數(shù)據(jù)源,這也就意味著如果要是想要修改數(shù)據(jù)源的話,無(wú)非就是兩種方法:自定義配置類、引入相應(yīng)的啟動(dòng)器依賴再配置配置文件

第一步: 引入Druid的啟動(dòng)器依賴

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

第二步: 配置配置文件(選學(xué),框架一般都有默認(rèn)的配置)

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.*  #監(jiān)控SpringBean
      filters: stat,wall     # 底層開(kāi)啟功能,stat(sql監(jiān)控),wall(防火墻)

      stat-view-servlet:   # 配置監(jiān)控頁(yè)功能
        enabled: true
        login-username: admin
        login-password: admin
        resetEnable: false

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


      filter:
        stat:    # 對(duì)上面filters里面的stat的詳細(xì)配置
          slow-sql-millis: 1000
          logSlowSql: true
          enabled: true
        wall:
          enabled: true
          config:
            drop-table-allow: false

2 SpringBoot整合MyBatis

  mybatis開(kāi)發(fā)的時(shí)候有兩種開(kāi)發(fā)模式:使用配置文件進(jìn)行開(kāi)發(fā)、純注解開(kāi)發(fā),二者各有優(yōu)點(diǎn)。使用配置文件進(jìn)行開(kāi)發(fā)在處理更加復(fù)雜的SQL語(yǔ)句的時(shí)候邏輯更加清晰,純注解開(kāi)發(fā)比較適合簡(jiǎn)單的SQL語(yǔ)句,于是我們可以在開(kāi)發(fā)的時(shí)候混合使用兩種方法,這樣可以大大提升開(kāi)發(fā)效率。

2.1 配置文件開(kāi)發(fā)

第一步: 引入啟動(dòng)器依賴 小知識(shí):SpringBoot官方的所有技術(shù)啟動(dòng)器的命名都是spring-boot-starter-xxx而第三方技術(shù)的啟動(dòng)器命名則是xxx-spring-boot-starter。值得注意的是:MyBatis的啟動(dòng)器內(nèi)部引用了dbc開(kāi)發(fā)的啟動(dòng)場(chǎng)景,所以無(wú)需重復(fù)引用

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

第二步: 編寫(xiě)mapper接口并標(biāo)注@Mapper注解

@Mapper
public interface StuMapper {

    Stu queryBySid(int sid);
}

第三步: 編寫(xiě)映射文件并綁定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
# 所有的全局配置文件的配置項(xiàng)在這下面配置
configuration:
# 開(kāi)啟駝峰命名數(shù)據(jù)庫(kù)中字段值的下劃線‘_’加字母會(huì)被認(rèn)為是大寫(xiě)
map-underscore-to-camel-case: true

2.2 純注解開(kāi)發(fā)

第一步: 引入啟動(dòng)器依賴

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

第二步: 編寫(xiě)mapper接口并標(biāo)注@Mapper注解,使用對(duì)應(yīng)的注解進(jìn)行SQL語(yǔ)句操作

@Mapper
public interface StuMapper {

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

3 SpringBoot整合MyBatis-Plus

3.1 普通的CRUD方法

  MyBatis-plus的啟動(dòng)器內(nèi)部不止引用了dbc開(kāi)發(fā)的啟動(dòng)場(chǎng)景,還導(dǎo)入了MyBatis的啟動(dòng)器,所以這兩個(gè)都無(wú)需再重復(fù)引用 第一步: 引入啟動(dòng)器依賴

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

mapper層:

  編寫(xiě)mapper接口標(biāo)注@Mapper注解,并繼承BaseMapper類。這是MyBatis-plus的獨(dú)有方式,這樣做的好處是繼承之后直接使用父類中已經(jīng)寫(xiě)好的簡(jiǎn)單CRUD方法,但是一些復(fù)雜的SQL業(yè)務(wù)還是需要使用映射文件來(lái)實(shí)現(xiàn)的,進(jìn)一步提高了代碼開(kāi)發(fā)的效率

@Mapper
public interface StuMapper extends BaseMapper<Stu> {

}

  MyBatis-plus進(jìn)行數(shù)據(jù)庫(kù)表的增刪改查的時(shí)候,默認(rèn)把繼承BaseMapper類時(shí)傳進(jìn)去的泛型名稱當(dāng)做表名去查找,如果泛型與數(shù)據(jù)庫(kù)中的表名不對(duì)應(yīng)的話,可以在實(shí)體類使用注解標(biāo)識(shí),除此之外注解還可以用來(lái)標(biāo)識(shí)主鍵和非表中字段屬性

@NoArgsConstructor
@AllArgsConstructor
@Data
@TableName("stu")
public class Stu {
    // 表名該字段是定義的臨時(shí)變量,并不存在于數(shù)據(jù)庫(kù)的表中
    @TableField(exist = false)
    private String gender;

    // 標(biāo)明表的主鍵
    @TableId
    private int sid;
    private String sname;
    private String age;
    private String course;
    private int cardid;
}

  編寫(xiě)映射文件并綁定mapper接口(如果有的話)。MyBatis-plus自動(dòng)配置好了默認(rèn)的mapper-locations,也就是映射文件的存放位置為classpath:/mapper/**/*.xml,于是我們就按照它的默認(rèn)規(guī)則在靜態(tài)資源路徑下mapper文件夾下。本案例中沒(méi)有映射文件,于是就不創(chuàng)建

  如果有需要的話,還可以在配置文件中指定MyBatis-plus配置文件的各種信息

service層:

service接口繼承IService類

public interface StuService extends IService<Stu> {

}

  service的實(shí)現(xiàn)類先是繼承ServiceImpl并傳兩個(gè)泛型(mapper接口,實(shí)體類),然后實(shí)現(xiàn)service接口

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

controller層: 直接使用service繼承類的簡(jiǎn)單方法

@Controller
public class TableController {

    @Autowired
    StuServiceImpl stuService;

    /**
     * 點(diǎn)擊Advanced table按鈕,進(jìn)行頁(yè)面轉(zhuǎn)發(fā),并攜帶一個(gè)表格數(shù)據(jù)
     * @param model 用于存儲(chǔ)數(shù)據(jù)
     * @return 頁(yè)面轉(zhuǎn)發(fā)forward 到 /table/dynamic_table.html
     */
    @GetMapping("/dynamic_table")
    public String dynamic_table(Model model) {
        // 從數(shù)據(jù)庫(kù)中查出user表進(jìn)行展示
        List<Stu> list = stuService.list();
        model.addAttribute("stus", list);
        return "/table/dynamic_table";
    }
}

3.2 MyBatis-plus的分頁(yè)實(shí)現(xiàn)

  MyBatis-plus的分頁(yè)功能實(shí)現(xiàn)需要先自定義一個(gè)配置類,向容器中注冊(cè)一個(gè)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繼承類的分頁(yè)的相關(guān)方法即可

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

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

到此這篇關(guān)于SpringBoot2零基礎(chǔ)到精通之?dāng)?shù)據(jù)庫(kù)專項(xiàng)精講的文章就介紹到這了,更多相關(guān)SpringBoot2 數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java網(wǎng)絡(luò)編程UDP協(xié)議發(fā)送接收數(shù)據(jù)

    Java網(wǎng)絡(luò)編程UDP協(xié)議發(fā)送接收數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了Java網(wǎng)絡(luò)編程UDP協(xié)議發(fā)送接收數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java多線程工具CompletableFuture詳解

    Java多線程工具CompletableFuture詳解

    這篇文章主要介紹了Java多線程工具CompletableFuture詳解,CompletableFuture?是?java?1.8?追加的新特性,通俗的話來(lái)說(shuō),是一個(gè)函數(shù)式的,用于控制多任務(wù)同步、異步組合操作的工具,需要的朋友可以參考下
    2024-01-01
  • Java中List使用stream流轉(zhuǎn)成map的幾種方式詳解

    Java中List使用stream流轉(zhuǎn)成map的幾種方式詳解

    Stream是Java8中處理集合的關(guān)鍵抽象概念,它可以指定你希望對(duì)集合進(jìn)行的操作,可以執(zhí)行非常復(fù)雜的查找、過(guò)濾和映射數(shù)據(jù)等操作,下面這篇文章主要給大家介紹了關(guān)于Java中List使用stream流轉(zhuǎn)成map的幾種方式,需要的朋友可以參考下
    2023-04-04
  • Java中關(guān)于內(nèi)存泄漏出現(xiàn)的原因匯總及如何避免內(nèi)存泄漏(超詳細(xì)版)

    Java中關(guān)于內(nèi)存泄漏出現(xiàn)的原因匯總及如何避免內(nèi)存泄漏(超詳細(xì)版)

    這篇文章主要介紹了Java中關(guān)于內(nèi)存泄漏出現(xiàn)的原因匯總及如何避免內(nèi)存泄漏(超詳細(xì)版)的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • Java Lambda表達(dá)式原理及多線程實(shí)現(xiàn)

    Java Lambda表達(dá)式原理及多線程實(shí)現(xiàn)

    這篇文章主要介紹了Java Lambda表達(dá)式原理及多線程實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 分析講解Java?Random類里的種子問(wèn)題

    分析講解Java?Random類里的種子問(wèn)題

    Random類中實(shí)現(xiàn)的隨機(jī)算法是偽隨機(jī),也就是有規(guī)則的隨機(jī)。在進(jìn)行隨機(jī)時(shí),隨機(jī)算法的起源數(shù)字稱為種子數(shù)(seed),在種子數(shù)的基礎(chǔ)上進(jìn)行一定的變換,從而產(chǎn)生需要的隨機(jī)數(shù)字
    2022-05-05
  • MyBatis學(xué)習(xí)教程(四)-如何快速解決字段名與實(shí)體類屬性名不相同的沖突問(wèn)題

    MyBatis學(xué)習(xí)教程(四)-如何快速解決字段名與實(shí)體類屬性名不相同的沖突問(wèn)題

    我們經(jīng)常會(huì)遇到表中的字段名和表對(duì)應(yīng)實(shí)體類的屬性名稱不一定都是完全相同的情況,如何解決呢?下面腳本之家小編給大家介紹MyBatis學(xué)習(xí)教程(四)-如何快速解決字段名與實(shí)體類屬性名不相同的沖突問(wèn)題,一起學(xué)習(xí)吧
    2016-05-05
  • SpringBoot集成mybatis連接oracle的圖文教程

    SpringBoot集成mybatis連接oracle的圖文教程

    這篇文章主要介紹了Spring Boot集成mybatis連接oracle的圖文教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java?map和bean互轉(zhuǎn)常用的方法總結(jié)

    Java?map和bean互轉(zhuǎn)常用的方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java中map和bean互轉(zhuǎn)常用方法的相關(guān)資料,平時(shí)日常Java開(kāi)發(fā),經(jīng)常會(huì)涉及到Java?Bean和Map之間的類型轉(zhuǎn)換,需要的朋友可以參考下
    2023-09-09
  • JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql

    JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql

    這篇文章主要給大家介紹了關(guān)于JDBC中如何使用Java8的日期LocalDate和LocalDateTime的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09

最新評(píng)論