亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于SpringBoot怎么整合SSMP

發布時間:2022-08-09 17:13:48 來源:億速云 閱讀:133 作者:iii 欄目:開發技術

本篇內容主要講解“基于SpringBoot怎么整合SSMP”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“基于SpringBoot怎么整合SSMP”吧!

    基于SpringBoot實現SSMP整合

    SpringBoot之所以好用,就是它能方便快捷的整合其他技術,這里我們先介紹四種技術的整合:

    • 整合JUnit

    • 整合MyBatis

    • 整合MyBatis-Plus

    • 整合Druid

    整合JUnit

    SpringBoot技術的定位用于簡化開發,再具體點是簡化Spring程序的開發。所以在整合任意技術的時候,如果你想直觀感觸到簡化的效果,你必須先知道使用非SpringBoot技術時對應的整合是如何做的,然后再看基于SpringBoot的整合是如何做的,才能比對出來簡化在了哪里。

    我們先來看一下不使用SpringBoot技術時,Spring整合JUnit的制作方式

    //加載spring整合junit專用的類運行器
    @RunWith(SpringJUnit4ClassRunner.class)
    //指定對應的配置信息
    @ContextConfiguration(classes = SpringConfig.class)
    public class AccountServiceTestCase {
        //注入你要測試的對象
        @Autowired
        private AccountService accountService;
        @Test
        public void testGetById(){
            //執行要測試的對象對應的方法
            System.out.println(accountService.findById(2));
        }
    }

    其中核心代碼是前兩個注解

    第一個注解@RunWith是設置Spring專用的測試類運行器,簡單說就是Spring程序執行程序有自己的一套獨立的運行程序的方式,不能使用JUnit提供的類運行方式了,必須指定一下,但是格式是固定的,琢磨一下,每次都指定一樣的東西,這個東西寫起來沒有技術含量啊

    第二個注解@ContextConfiguration是用來設置Spring核心配置文件或配置類的,簡單說就是加載Spring的環境你要告訴Spring具體的環境配置是在哪里寫的,雖然每次加載的文件都有可能不同,但是仔細想想,如果文件名是固定的,這個貌似也是一個固定格式。既然有可能是固定格式,那就有可能每次都寫一樣的東西,也是一個沒有技術含量的內容書寫

    SpringBoot就抓住上述兩條沒有技術含量的內容書寫進行開發簡化,能走默認值的走默認值,能不寫的就不寫,具體格式如下:

    @SpringBootTest
    class Springboot04JunitApplicationTests {
        //注入你要測試的對象
        @Autowired
        private BookDao bookDao;
        @Test
        void contextLoads() {
            //執行要測試的對象對應的方法
            bookDao.save();
            System.out.println("two...");
        }
    }

    看看這次簡化成什么樣了,一個注解就搞定了,而且還沒有參數,再體會SpringBoot整合其他技術的優勢在哪里,就兩個字——簡化使用一個注解@SpringBootTest替換了前面兩個注解。至于內部是怎么回事?和之前一樣,只不過都走默認值

    這個時候有人就問了,你加載的配置類或者配置文件是哪一個?就是我們前面啟動程序使用的引導類。如果想手工指定引導類有兩種方式,第一種方式使用屬性的形式進行,在注解@SpringBootTest中添加classes屬性指定配置類:

    @SpringBootTest(classes = 引導類的名字.class)
    class Springboot04JunitApplicationTests {
        //注入你要測試的對象
        @Autowired
        private BookDao bookDao;
        @Test
        void contextLoads() {
            //執行要測試的對象對應的方法
            bookDao.save();
            System.out.println("two...");
        }
    }

    第二種方式回歸原始配置方式,仍然使用@ContextConfiguration注解進行,效果是一樣的:

    @SpringBootTest
    @ContextConfiguration(classes = Springboot04JunitApplication.class)
    class Springboot04JunitApplicationTests {
        //注入你要測試的對象
        @Autowired
        private BookDao bookDao;
        @Test
        void contextLoads() {
            //執行要測試的對象對應的方法
            bookDao.save();
            System.out.println("two...");
        }
    }

    溫馨提示
    使用SpringBoot整合JUnit需要保障導入test對應的starter,由于初始化項目時此項是默認導入的,所以此處沒有提及

    總結

    • 導入測試對應的starter

    • 測試類使用@SpringBootTest修飾

    • 使用自動裝配的形式添加要測試的對象

    • 測試類如果存在于引導類所在包或子包中無需指定引導類

    • 測試類如果不存在于引導類所在的包或子包中需要通過classes屬性指定引導類

    整合MyBatis

    老規矩我們還是先寫一下原始整合方案:

    導入坐標,MyBatis坐標不能少,Spring整合MyBatis還有自己專用的坐標,此外Spring進行數據庫操作的jdbc坐標是必須的,剩下還有mysql驅動坐標,本例中使用了Druid數據源,這個倒是可以不要

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.16</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--1.導入mybatis與spring整合的jar包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>
        <!--導入spring操作數據庫必選的包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
    </dependencies>

    Spring核心配置

    @Configuration
    @ComponentScan("com.nefu")
    @PropertySource("jdbc.properties")
    public class SpringConfig {
    }

    MyBatis要交給Spring接管的bean

    //定義mybatis專用的配置類
    @Configuration
    public class MyBatisConfig {
    //    定義創建SqlSessionFactory對應的bean
        @Bean
        public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
            //SqlSessionFactoryBean是由mybatis-spring包提供的,專用于整合用的對象
            SqlSessionFactoryBean sfb = new SqlSessionFactoryBean();
            //設置數據源替代原始配置中的environments的配置
            sfb.setDataSource(dataSource);
            //設置類型別名替代原始配置中的typeAliases的配置
            sfb.setTypeAliasesPackage("com.nefu.domain");
            return sfb;
        }
    //    定義加載所有的映射配置
        @Bean
        public MapperScannerConfigurer mapperScannerConfigurer(){
            MapperScannerConfigurer msc = new MapperScannerConfigurer();
            msc.setBasePackage("com.nefu.dao");
            return msc;
        }
    
    }

    數據源對應的bean,此處使用Druid數據源

    @Configuration
    public class JdbcConfig {
        @Value("${jdbc.driver}")
        private String driver;
        @Value("${jdbc.url}")
        private String url;
        @Value("${jdbc.username}")
        private String userName;
        @Value("${jdbc.password}")
        private String password;
    
        @Bean("dataSource")
        public DataSource dataSource(){
            DruidDataSource ds = new DruidDataSource();
            ds.setDriverClassName(driver);
            ds.setUrl(url);
            ds.setUsername(userName);
            ds.setPassword(password);
            return ds;
        }
    }

    數據庫連接信息(properties格式)

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/spring_db?useSSL=false
    jdbc.username=root
    jdbc.password=*********

    上述格式基本上是最簡格式了,要寫的東西還真不少。

    這里是最簡格式,所以我們沒有寫業務層,我們測試的時候直接通過dao的自動生成對象去操作數據庫

    下面看看SpringBoot整合MyBaits格式:
    步驟①:創建模塊

    基于SpringBoot怎么整合SSMP

    步驟②:勾選要使用的技術,MyBatis,由于要操作數據庫,還要勾選對應數據庫

    基于SpringBoot怎么整合SSMP

    或者手工導入對應技術的starter,和對應數據庫的坐標

    <dependencies>
        <!--1.導入對應的starter-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
    
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

    步驟③:配置數據源相關信息,沒有這個信息你連接哪個數據庫都不知道

    #2.配置相關信息
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/ssm_db
        username: root
        password: ****************

    結束了,對,這就結束了,SpringBoot把配置中所有可能出現的通用配置都簡化了。下面寫一個MyBatis程序運行需要的Dao(或者Mapper)就可以運行了

    實體類

    public class Book {
        private Integer id;
        private String type;
        private String name;
        private String description;
    
    	······
    }

    映射接口(Dao)

    @Mapper
    public interface BookDao {
        @Select("select * from tbl_book where id = #{id}")
        public Book getById(Integer id);
    }

    測試類

    @SpringBootTest
    class Springboot05MybatisApplicationTests {
        @Autowired
        private BookDao bookDao;
        @Test
        void contextLoads() {
            System.out.println(bookDao.getById(1));
        }
    }

    結果:

    基于SpringBoot怎么整合SSMP

    注意:當前使用的SpringBoot版本是2.5.4,對應的坐標設置中Mysql驅動使用的是8x版本。使用SpringBoot2.4.3(不含)之前版本會出現一個小BUG,就是MySQL驅動升級到8以后要求強制配置時區,如果不設置會出問題。解決方案很簡單,驅動url上面添加上對應設置就行了

    #2.配置相關信息
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
        username: root
        password: ********

    這里設置的UTC是全球標準時間,你也可以理解為是英國時間,中國處在東八區,需要在這個基礎上加上8小時,這樣才能和中國地區的時間對應的,也可以修改配置為Asia/Shanghai,同樣可以解決這個問題。

    #2.配置相關信息
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=Asia/Shanghai
        username: root
        password: *********

    如果不想每次都設置這個東西,也可以去修改mysql中的配置文件mysql.ini,在mysqld項中添加default-time-zone=+8:00也可以解決這個問題。其實方式方法很多,這里就說這么多吧。

    此外在運行程序時還會給出一個提示,說數據庫驅動過時的警告,根據提示修改配置即可,棄用com.mysql.jdbc.Driver,換用com.mysql.cj.jdbc.Driver。前面的例子中已經更換了驅動了,在此說明一下。

    Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

    總結

    • 整合操作需要勾選MyBatis技術,也就是導入MyBatis對應的starter

    • 數據庫連接相關信息轉換成配置

    • 數據庫SQL映射需要添加@Mapper被容器識別到

    • MySQL 8.X驅動強制要求設置時區

    • 修改url,添加serverTimezone設定

    • 修改MySQL數據庫配置

    • 驅動類過時,提醒更換為com.mysql.cj.jdbc.Driver

    整合MyBatis-Plus

    經過前面兩種技術的整合,我們發現第三方技術的整合無非就是兩步:

    • 導入對應技術的starter坐標

    • 根據對應技術的要求做配置

    接下來在MyBatis的基礎上再升級一下,整合MyBaitsPlus(簡稱MP)

    步驟①:導入對應的starter

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

    關于這個坐標,此處要說明一點,之前我們看的starter都是spring-boot-starter-???,也就是說都是下面的格式

    Spring-boot-start-***

    而MyBatis與MyBatisPlus這兩個坐標的名字書寫比較特殊,是第三方技術名稱在前,boot和starter在后。此處簡單提一下命名規范,后期原理篇會再詳細講解

    starter所屬命名規則示例
    官方提供spring-boot-starter-技術名稱spring-boot-starter-web
    spring-boot-starter-test
    第三方提供第三方技術名稱-spring-boot-startermybatis-spring-boot-starter
    druid-spring-boot-starter
    第三方提供第三方技術名稱-boot-starter(第三方技術名稱過長,簡化命名)mybatis-plus-boot-starter

    溫馨提示

    有些小伙伴在創建項目時想通過勾選的形式找到這個名字,別翻了,沒有。截止目前,SpringBoot官網還未收錄此坐標,而我們Idea創建模塊時讀取的是SpringBoot官網的Spring Initializr,所以也沒有。如果換用阿里云的url創建項目可以找到對應的坐標。

    步驟②:配置數據源相關信息

    #2.配置相關信息
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/ssm_db
        username: root
        password: root

    沒了,就這么多,剩下的就是寫MyBaitsPlus的程序了

    映射接口(Dao)

    @Mapper
    public interface BookDao extends BaseMapper<Book> {
    }

    核心在于Dao接口繼承了一個BaseMapper的接口,這個接口中幫助開發者預定了若干個常用的API接口,簡化了通用API接口的開發工作。

    基于SpringBoot怎么整合SSMP

    溫馨提示

    目前數據庫的表名定義規則是tbl_模塊名稱,為了能和實體類相對應,需要做一個配置,相關知識我前面mybatis-plus的文章中已經有詳細解釋,此處僅給出解決方案。配置application.yml文件,添加如下配置即可,設置所有表名的通用前綴名

    mybatis-plus:
      global-config:
        db-config:
          table-prefix: tbl_		#設置所有表的通用前綴名稱為tbl_

    總結

    • 手工添加MyBatis-Plus對應的starter

    • 數據層接口使用BaseMapper簡化開發

    • 需要使用的第三方技術無法通過勾選確定時,需要手工添加坐標 整合Druid

    前面整合MyBatis和MyBatisPlus的時候,使用的數據源對象都是SpringBoot默認的數據源對象,下面我們手工控制一下,自己指定了一個數據源對象,Druid。

    在沒有指定數據源時,我們的配置如下:

    #2.配置相關信息
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=Asia/Shanghai
        username: root
        password: root

    此時雖然沒有指定數據源,但是根據SpringBoot的德行,肯定幫我們選了一個它認為最好的數據源對象,這就是HiKari。通過啟動日志可以查看到對應的身影。

    2021-11-29 09:39:15.202  INFO 12260 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
    2021-11-29 09:39:15.208  WARN 12260 --- [           main] com.zaxxer.hikari.util.DriverDataSource  : Registered driver with driverClassName=com.mysql.jdbc.Driver was not found, trying direct instantiation.
    2021-11-29 09:39:15.551  INFO 12260 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.

    上述信息中每一行都有HiKari的身影,如果需要更換數據源,其實只需要兩步即可。

    • 導入對應的技術坐標

    • 配置使用指定的數據源類型

    下面就切換一下數據源對象

    步驟①:導入對應的坐標(注意,是坐標,此處不是starter)

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.16</version>
        </dependency>
    </dependencies>

    步驟②:修改配置,在數據源配置中有一個type屬性,專用于指定數據源類型

    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
        username: root
        password: *********
        type: com.alibaba.druid.pool.DruidDataSource

    這里其實要提出一個問題的,目前的數據源配置格式是一個通用格式,不管你換什么數據源都可以用這種形式進行配置。但是新的問題又來了,如果對數據源進行個性化的配置,例如配置數據源對應的連接數量,這個時候就有新的問題了。每個數據源技術對應的配置名稱都一樣嗎?肯定不是啊,各個廠商不可能提前商量好都寫一樣的名字啊,怎么辦?就要使用專用的配置格式了。這個時候上面這種通用格式就不能使用了,怎么辦?還能怎么辦?按照SpringBoot整合其他技術的通用規則來套啊,導入對應的starter,進行相應的配置即可。

    步驟①:導入對應的starter

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

    步驟②:修改配置

    spring:
      datasource:
        druid:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
          username: root
          password: *************

    注意觀察,配置項中,在datasource下面并不是直接配置url這些屬性的,而是先配置了一個druid節點,然后再配置的url這些東西。言外之意,url這個屬性是druid下面的屬性,那你能想到什么?除了這4個常規配置外,還有druid專用的其他配置。通過提示功能可以打開druid相關的配置查閱

    基于SpringBoot怎么整合SSMP

    與druid相關的配置超過200條以上,這就告訴你,如果想做druid相關的配置,使用這種格式就可以了,這里就不展開描述了,太多了。

    這是我們做的第4個技術的整合方案,還是那兩句話:導入對應starter,使用對應配置。沒了,SpringBoot整合其他技術就這么簡單粗暴。

    到此,相信大家對“基于SpringBoot怎么整合SSMP”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    措勤县| 肥乡县| 体育| 台州市| 宜春市| 贵南县| 密云县| 绥德县| 西平县| 鄂尔多斯市| 新疆| 铜山县| 桑植县| 五寨县| 淮南市| 会宁县| 长葛市| 沾化县| 香河县| 白山市| 棋牌| 林甸县| 永嘉县| 枣阳市| 岳西县| 德惠市| 综艺| 鞍山市| 通化市| 永年县| 辰溪县| 宝山区| 图木舒克市| 苗栗市| 枣庄市| 天水市| 南澳县| 施甸县| 常山县| 当阳市| 庆阳市|