MyBatisPlus極速入門

2020-09-05 Java架構師聯盟

mybatisPlus概述

需要的基礎:MyBatis、Spring、SpringMVC就可以學習這個了! 為什麼要學習它呢?MyBatisPlus可以節省我們大量工作時間,所有的CRUD代碼它都可以自動化完成!
JPA 、 tk-mapper、MyBatisPlus,偷懶用的!

簡介

是什麼? MyBatis 本來就是簡化 jdbc 操作的! 官網:https://baomidou.com/,簡化 MyBatis !


特性

官方描述

  • 無侵入:只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑
  • 損耗小:啟動即會自動注入基本 CURD,性能基本無損耗,直接面向對象操作
  • 強大的 CRUD 操作:內置通用 Mapper、通用 Service,僅僅通過少量配置即可實現單表大部分 CRUD 操作,更有強大的條件構造器,滿足各類使用需求
  • 支持 Lambda 形式調用:通過 Lambda 表達式,方便的編寫各類查詢條件,無需再擔心欄位寫錯
  • 支持組件自動生成:支持多達 4 種主鍵策略(內含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問題
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式調用,實體類只需繼承 Model 類即可進行強大的 CRUD 操作
  • 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 內置代碼生成器:採用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用
  • 內置分頁插件:基於 MyBatis 物理分頁,開發者無需關心具體操作,配置好插件之後,寫分頁等同於普通 List 查詢
  • 分頁插件支持多種資料庫:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種資料庫
  • 內置性能分析插件:可輸出 Sql 語句以及其執行時間,建議開發測試時啟用該功能,能快速揪出慢查詢
  • 內置全局攔截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規則,預防誤操作

快速入門

地址:https://baomidou.com/guide/quick-start.html
使用第三方組件套路:

1、導入對應的依賴
2、研究依賴如何配置
3、代碼如何編寫
4、提高擴展技術能力!

步驟

1、創建資料庫 mybatis_plus
2、創建user表

DROP TABLE IF EXISTS user;CREATE TABLE user(id BIGINT(20) NOT NULL COMMENT &39;,name VARCHAR(30) NULL DEFAULT NULL COMMENT &39;, age INT(11) NULL DEFAULT NULL COMMENT &39;,email VARCHAR(50) NULL DEFAULT NULL COMMENT &39;, PRIMARY KEY (id));INSERT INTO user (id, name, age, email) VALUES(1, &39;, 18, &39;),(2, &39;, 20, &39;),(3, &39;, 28, &39;),(4, &39;, 21, &39;),(5, &39;, 24, &39;);-- 真實開發中,version(樂觀鎖)、deleted(邏輯刪除)、gmt_create、gmt_modified1234567891011121314

3、編寫項目,初始化項目!使用SpringBoot初始化!
4、導入依賴

<!-- 資料庫驅動 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!-- mybatis-plus --> <!-- mybatis-plus 是自己開發,並非官方的! --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>12345678910111213141516171819202122

說明:我們使用 mybatis-plus 可以節省我們大量的代碼,儘量不要同時導入 mybatis 和 mybatis- plus!版本的差異!

5、連接資料庫!這一步和 mybatis 相同!

配置日誌mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl12

CRUD擴展

插入操作

Insert 插入

// 測試插入 @Test public void testInsert(){ User user = new User(); user.setName(&34;); user.setAge(18); user.setEmail(&34;); int result = userMapper.insert(user); // 幫我們自動生成id System.out.println(result); // 受影響的行數 System.out.println(user); // 發現,id會自動回填 }123456789101112


資料庫插入的id的默認值為:全局的唯一id

主鍵生成策略

默認 ID_WORKER 全局唯一id

分布式系統唯一id生成:9種分布式ID生成方式,總有一款適合你
雪花算法:
snowflake是Twitter開源的分布式ID生成算法,結果是一個long型的ID。其核心思想是:使用41bit作為 毫秒數,10bit作為機器的ID(5個bit是數據中心,5個bit的機器ID),12bit作為毫秒內的流水號(意味 著每個節點在每毫秒可以產生 4096 個 ID),最後還有一個符號位,永遠是0。可以保證幾乎全球唯 一!

主鍵自增

我們需要配置主鍵自增:
1、實體類欄位上

// 對應資料庫中的主鍵 (uuid、自增id、雪花算法、redis、zookeeper!) @TableId(type = IdType.AUTO) private Long id;123

2、資料庫欄位一定要是自增!

再次運行:

其他解釋

public enum IdType {AUTO(0), // 資料庫id自增NONE(1), // 未設置主鍵INPUT(2), // 手動輸入ID_WORKER(3), // 默認的全局唯一idUUID(4), // 全局唯一id uuidID_WORKER_STR(5); //ID_WORKER 字符串表示法}12345678

更新操作

所有的sql都是自動幫你動態配置的!

// 測試更新 @Test public void testUpdate(){ User user = new User(); // 通過條件自動拼接動態sql user.setId(2L); user.setName(&34;); user.setAge(20); // 注意:updateById 但是參數是一個對象! int i = userMapper.updateById(user); System.out.println(i); }123456789101112

自動填充

創建時間、修改時間!這些個操作一遍都是自動化完成的,我們不希望手動更新!
阿里巴巴開發手冊:所有的資料庫表:gmt_create、gmt_modified幾乎所有的表都要配置上!而且需 要自動化!
方式一:資料庫級別(工作中不允許你修改資料庫)
1、在表中新增欄位 create_time, update_time


2、再次測試插入方法,我們需要先把實體類同步!

private Date createTime;private Date updateTime;12

3、再次更新查看結果即可


方式二:代碼級別
1、刪除資料庫的默認值、更新操作!
2、實體類欄位屬性上需要增加註解

@TableField(fill = FieldFill.INSERT) private Date createTime; // @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime;12345

3、編寫處理器來處理這個註解即可! 系統會自動查詢那些欄位添加了這樣的註解然後將時間插入。

@Slf4j@Component // 一定不要忘記把處理器加到IOC容器中!public class MyMetaObjectHandler implements MetaObjectHandler { // 插入時的填充策略 @Override public void insertFill(MetaObject metaObject) { log.info(&34;); // setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject this.setFieldValByName(&34;,new Date(),metaObject); this.setFieldValByName(&34;,new Date(),metaObject); } // 更新時的填充策略 @Override public void updateFill(MetaObject metaObject) { log.info(&34;); this.setFieldValByName(&34;,new Date(),metaObject); }}12345678910111213141516171819

4、測試插入

5、測試更新、觀察時間即可!


PS : Mybatis-plus 會自動將Java中的駝峰命名變更為下劃線命名比如 createTime ==> create_time,如果想關閉需要在yml中添加

mybatis-plus.configuration.map-underscore-to-camel-case=false1

6、只更新若干欄位的時候指定即可。比如我把name屏蔽掉

// 測試更新 @Test public void testUpdate(){ User user = new User(); // 通過條件自動拼接動態sql user.setId(6L); //user.setName(&34;); user.setAge(22); // 注意:updateById 但是參數是一個 對象! int i = userMapper.updateById(user); System.out.println(i); }123456789101112

樂觀鎖

在面試過程中,我們經常會被問道樂觀鎖,悲觀鎖!這個其實非常簡單!

樂觀說 : 顧名思義十分樂觀,它總是認為不會出現問題,無論幹什麼不去上鎖!如果出現了問題, 再次更新值測試
悲觀鎖:顧名思義十分悲觀,它總是認為總是出現問題,無論幹什麼都會上鎖!再去操作!

樂觀鎖實現方式:

  • 取出記錄時,獲取當前 version
  • 更新時,帶上這個version
  • 執行更新時, set version = newVersion where version = oldVersion
  • 如果version不對,就更新失敗

樂觀鎖:1、先查詢,獲得版本號 version = 1-- Aupdate user set name = &34;, version = version + 1 where id = 2 and version = 1-- B 線程搶先完成,這個時候 version = 2,會導致 A 修改失敗! update user set name = &34;, version = version + 1 where id = 2 and version = 112345

測試一下MyBatis Plus 的樂觀鎖插件

1、給資料庫中增加version欄位!


2、我們實體類加對應的欄位

@Version //樂觀鎖Version註解 private Integer version;12

3、註冊組件

// 掃描我們的 mapper 文件夾@MapperScan(&34;)@EnableTransactionManagement@Configuration // 配置類public class MyBatisPlusConfig { // 註冊樂觀鎖插件 @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); }}123456789101112

4、測試一下!

// 測試樂觀鎖成功! @Test public void testOptimisticLocker(){ // 1、查詢用戶信息 User user = userMapper.selectById(1L); // 2、修改用戶信息 user.setName(&34;); user.setEmail(&34;); // 3、執行更新操作 userMapper.updateById(user); } // 測試樂觀鎖失敗!多線程下 @Test public void testOptimisticLocker2(){ // 線程 1 User user = userMapper.selectById(1L); user.setName(&34;); user.setEmail(&34;); // 模擬另外一個線程執行了插隊操作 User user2 = userMapper.selectById(1L); user2.setName(&34;); user2.setEmail(&34;); userMapper.updateById(user2); // 自旋鎖來多次嘗試提交! userMapper.updateById(user); // 如果沒有樂觀鎖就會覆蓋插隊線程的值! }12345678910111213141516171819202122232425262728293031

成功場景


失敗場景:

查詢操作

// 測試查詢 @Test public void testSelectById(){ User user = userMapper.selectById(1L); System.out.println(user); } // 測試批量查詢! where id in (1,2,3) 這樣的操作 @Test public void testSelectByBatchId(){ List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3)); users.forEach(System.out::println); } // 按條件查詢之一 使用map操作 name = &39; and age = 22 @Test public void testSelectByBatchIds(){ HashMap<String, Object> map = new HashMap<>(); // 自定義要查詢 map.put(&34;,&34;); map.put(&34;,22); List<User> users = userMapper.selectByMap(map); users.forEach(System.out::println); }123456789101112131415161718192021222324

分頁查詢

分頁在網站使用的十分之多!

1、原始的 limit 進行分頁
2、pageHelper 第三方插件
3、MP 其實也內置了分頁插件!

如何使用!
1、配置攔截器組件即可 MyBatisPlusConfig

// 分頁插件 @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); }12345

2、直接使用Page對象即可!

@Test public void testPage(){ // 參數一:當前頁 // 參數二:頁面大小 // 使用了分頁插件之後,所有的分頁操作也變得簡單的! 3~4 Page<User> page = new Page<>(2,2); userMapper.selectPage(page,null); page.getRecords().forEach(System.out::println); System.out.println(page.getTotal()); // 等價 SELECT COUNT(1) FROM user }1234567891011

刪除操作

1、根據 id 刪除記錄

// 測試刪除 @Test public void testDeleteById(){ userMapper.deleteById(1L); } // 通過id批量刪除 id in (2,3) @Test public void testDeleteBatchId(){ userMapper.deleteBatchIds(Arrays.asList(2L,3L)); } // 通過map刪除 @Test public void testDeleteMap(){ HashMap<String, Object> map = new HashMap<>(); map.put(&34;,&34;); userMapper.deleteByMap(map); }12345678910111213141516171819

在工作中會遇到一些問題:邏輯刪除!

邏輯刪除

物理刪除 :從資料庫中直接移除
邏輯刪除 :在資料庫中沒有被移除,而是通過一個變量來讓它失效! deleted = 0 => deleted = 1,類似與跟記錄一個flag標識位

1、在數據表中增加一個 deleted 欄位


2、實體類中增加屬性

@TableLogic //邏輯刪除 private Integer deleted;12

3、配置!

// 邏輯刪除組件! @Bean public ISqlInjector sqlInjector() { return new LogicSqlInjector(); }12345

application.properties

設置開發環境spring.profiles.active=dev12

2、配置開啟

* SQL執行效率插件 */ @Bean @Profile({&34;,&34;})// 設置 dev test 環境開啟,保證我們的效率 public PerformanceInterceptor performanceInterceptor() { PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor(); //ms 設置sql執行的最大時間,如果超過了則不執行 performanceInterceptor.setMaxTime(20); // 開啟格式化 performanceInterceptor.setFormat(true); return performanceInterceptor; }123456789101112

故意設置小一些可以看到如下輸出:

// 測試查詢 @Test public void testSelectById(){ User user = userMapper.selectById(1L); System.out.println(user); }123456

條件構造器

條件構造器 十分重要:Wrapper 我們寫一些複雜的sql就可以使用它來替代!
說白了就是練習使用QueryWrapper下面到各種函數使用。

package com.sowhat;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.sowhat.mapper.UserMapper;import com.sowhat.pojo.User;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import java.util.List;import java.util.Map;@SpringBootTestpublic class WrapperTest { @Autowired private UserMapper userMapper; @Test void contextLoads() { // 查詢name不為空的用戶,並且郵箱不為空的用戶,年齡 >= 12 QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper .isNotNull(&34;) .isNotNull(&34;) .ge(&34;, 12); userMapper.selectList(wrapper).forEach(System.out::println); // 和我們剛才學習的map對比一下 } @Test void test2() { // 查詢名字 sowhat QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.eq(&34;, &34;); //User user = userMapper.selectOne(wrapper); // 查詢一個數據,出現多個結果使用List 或者 Map //System.out.println(user); userMapper.selectList(wrapper).forEach(System.out::println); } @Test void test3() { // 查詢年齡在 20 ~ 30 歲之間的用戶 QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.between(&34;, 20, 30); // 區間 Integer count = userMapper.selectCount(wrapper);// 查詢結果數 System.out.println(count); } // 模糊查詢 @Test void test4() { // 名字不包含e, QueryWrapper<User> wrapper = new QueryWrapper<>(); // likeRight t% // likeLeft %t wrapper .notLike(&34;, &34;) .likeRight(&34;, &34;); List<Map<String, Object>> maps = userMapper.selectMaps(wrapper); maps.forEach(System.out::println); } // 內查詢 @Test void test5() { QueryWrapper<User> wrapper = new QueryWrapper<>(); // id 在子查詢中查出來 ID in () wrapper.inSql(&34;, &34;); List<Object> objects = userMapper.selectObjs(wrapper); // 查詢到一切對象 objects.forEach(System.out::println); } // 排序 @Test void test6() { QueryWrapper<User> wrapper = new QueryWrapper<>(); // 通過id進行排序 wrapper.orderByAsc(&34;); List<User> users = userMapper.selectList(wrapper); users.forEach(System.out::println); }}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

核心:根據官網的條件構造器 實驗嘗試函數,每次嘗試後注意 最終執行的SQL是什麼樣的!

代碼自動生成器

參考官網自動生成器開寫即可。

package com.sowhat;import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.annotation.FieldFill;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.generator.AutoGenerator;import com.baomidou.mybatisplus.generator.config.DataSourceConfig;import com.baomidou.mybatisplus.generator.config.GlobalConfig;import com.baomidou.mybatisplus.generator.config.PackageConfig;import com.baomidou.mybatisplus.generator.config.StrategyConfig;import com.baomidou.mybatisplus.generator.config.po.TableFill;import com.baomidou.mybatisplus.generator.config.rules.DateType;import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;import java.util.ArrayList;/** * 代碼自動生成器 */public class SowhatCode { public static void main(String[] args) { // 需要構建一個 代碼自動生成器 對象 AutoGenerator mpg = new AutoGenerator(); // 配置策略// 1、全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty(&34;); // 獲得用戶當前目錄 gc.setOutputDir(projectPath + &34;); //代碼生成目錄 gc.setAuthor(&34;); gc.setOpen(false); // 是否打開文件夾 運行後 gc.setFileOverride(false); // 是否覆蓋 gc.setServiceName(&34;); // 去Service的I前綴 gc.setIdType(IdType.ID_WORKER); gc.setDateType(DateType.ONLY_DATE); gc.setSwagger2(true); mpg.setGlobalConfig(gc);//2、設置數據源 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl(&34;); dsc.setDriverName(&34;); dsc.setUsername(&34;); dsc.setPassword(&34;); dsc.setDbType(DbType.MYSQL); mpg.setDataSource(dsc);//3、包的配置 PackageConfig pc = new PackageConfig(); pc.setModuleName(&34;); pc.setParent(&34;); pc.setEntity(&34;); pc.setMapper(&34;); pc.setService(&34;); pc.setController(&34;); mpg.setPackageInfo(pc);//4、策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setInclude(&34;, &34;, &34;, &34;, &34;, &34;); // 設置要映射的表名 strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setColumnNaming(NamingStrategy.underline_to_camel); strategy.setEntityLombokModel(true); // 自動lombok; strategy.setLogicDeleteFieldName(&34;); // 邏輯刪除// 自動填充配置 TableFill gmtCreate = new TableFill(&34;, FieldFill.INSERT); TableFill gmtModified = new TableFill(&34;, FieldFill.INSERT_UPDATE); ArrayList<TableFill> tableFills = new ArrayList<>(); tableFills.add(gmtCreate); tableFills.add(gmtModified); strategy.setTableFillList(tableFills);// 樂觀鎖 strategy.setVersionFieldName(&34;); strategy.setRestControllerStyle(true); // 駝峰命名 strategy.setControllerMappingHyphenStyle(true); // localhost:8080/hello_id_2 mpg.setStrategy(strategy); mpg.execute(); //執行 }}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677

相關焦點

  • mybatisplus自動1秒一鍵生成代碼,這次是真的起飛了
    :package com.peabody.mybatisplus.generate;import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.
  • Springboot+MybatisPlus高效實現增刪改查
    package com.huangtl.user;import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.annotation.IdType;
  • 史上最全的SpringBoot 中引入 MyBatisPlus 的常規流程!|乾貨
    CRUD通過本項目(表少,數據量大,非常適合)發現 MyBatisPlus 在單表 CRUD方面比原來的的 MyBatis 的有著絕對優勢:下面列出本文相關代碼,其他代碼如 Druid數據源配置、MyBatisPlus分頁配置、sql輸出配置,可以到 github 上查看:package com.cun.plus;import com.baomidou.mybatisplus.mapper.Wrapper
  • SpringBoot+Gradle+ MyBatisPlus3.x搭建企業級的後臺分離框架
    ;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.baomidou.mybatisplus.core.toolkit.Wrappers;import com.flong.springboot.core.vo.Condition;import java.lang.reflect.Field;import
  • Spring系列——MybatisPlus
    (1)配置加載插件com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfigurationfinally {...} }com.baomidou.mybatisplus.core.MybatisConfiguration#newExecutor
  • Mybatisplus-plus 1.3.0 發布,實現在不分頁時進行排序操作 - OS...
    原生mybatisplus分頁與排序是綁定的,mpp優化了分頁插件,使用MppPaginationInterceptor插件在不分頁的情況下支持排序操作page參數size設置為
  • 《極速脫獄》攻略 新手入門攻略詳解
    《極速脫獄》是一款以越獄為題材的動作手遊。遊戲講述的是發生在牢房裡的故事,如何快速順利逃脫出監獄是遊戲的關鍵。該款遊戲設計十分巧妙,不僅利用逃脫天數來限制了挑戰次數,還用計時器來影響玩家的心理,這大大提升了遊戲的驚險刺激度,非常有趣!
  • 輕鬆入門獨顯 盈通GTX950極速版售899元
    今天,就讓筆者給大家介紹一款經濟實惠的電競遊戲入門利器--盈通GTX950 2G極速版。點我購買  盈通GTX950 2G極速版顯卡基於28nm工藝下的 GM206核心,配備768流處理器盈通GTX950 2G極速版顯卡擁有更快的遊戲響應速度,遊戲之中能夠閃電出手,毫秒之間讓你取得先機,更快的響應、更快地消滅敵人,實乃電競遊戲的入門利器。
  • Mybatisplus-plus 1.0.0 發布,掃描 Entity 類構建 ResultMap 主鍵...
    除了普通欄位填充外,還支持自動填充主鍵欄位,解決原生mybatisplus不支持多個主鍵的問題
  • Mybatisplus-plus 1.1.0 發布,根據多個欄位聯合主鍵增刪改查
    原生mybatisplus只支持一個主鍵,mpp支持多個欄位聯合主鍵增刪改查,mapper需要繼承MppBaseMapper實體類中聯合主鍵的欄位,需要用@MppMultiId註解修飾
  • Mybatisplus-plus 1.3.1 發布,新增服務層根據複合主鍵 CRUD 操作
    **從中央庫引入jar**```` <dependency> <groupId>com.github.jeffreyning</groupId> <artifactId>mybatisplus-plus</artifactId> <version>1.3.1-RELEASE
  • 本田純進口入門級街車!2.3萬元,149CC,極速143公裡
    隨著國人生活水平的提高,如今汽車的普及率相比於90年代,有了很大程度的提高,不僅是經濟型家用車,豪華車的保有量也在節節攀升,但想要成為百姓矚目的焦點,還真不是一件容易的事,今天小編就為大家介紹一款純進口的入門級街車——本田CB150R,絕對是顏值爆表,堪稱是撩妹必備。
  • 1.28萬,解析入門級運動街車,高顏值外觀,油耗1.8升,極速115km
    導讀:1.28萬,解析入門級運動街車,高顏值外觀,油耗1.8升,極速115km各位點開這篇文章的朋友們,想必都是很高的顏值吧,我們真的是很有緣哦,小編每天都會給大家帶來不一樣的汽車資訊,如果對小編的文章或者其他的什麼,有什麼一些意見的話歡迎在下方積極評論哦,小編每條都會認真看的。
  • 這款車售價23600元,進口入門級跑車,動力強勁,實測極速122km!
    這款車售價23600元,進口入門級跑車,動力強勁,實測極速122km!摩託跑車一出現總是能引起很多人的關注,特別是進口車型。國內摩託車行業在早些時候並不是很發達,所以很多國外車型就先入為主,受到國內摩友的喜愛。除了出色的動力性能之外,外觀在國內也是十分前衛的。
  • 擁抱.NET 5,可以從這個極速開發的Web應用框架開始
    >Fur項目作者:百小僧開源許可協議:Apache-2.0項目地址:https://gitee.com/monksoul/Fur項目簡介Fur 是 .NET 5 平臺下極易入門、極速開發的 Web 應用框架。
  • 銳龍新座駕 映泰B450主板極速來襲
    映泰,作為AMD的全球合作夥伴,知名板卡廠商,也在第一時間發布了旗下B450晶片組產品,銳龍新座駕,映泰B450主板極速來襲啦。 此次,映泰B450首發三款主板——分別是RACING B450GT3、B450MH以及B450MHC。
  • 極速鯊課堂55:中端晶片組主板為什麼更具性價比?
    既然晶片組會決定主板的規格上線,那麼就肯定有「高低貴賤」之分,實時也確實如此哦,消費級主板晶片組一般會分為高端、中端以及入門三種,本次極速鯊課堂將會給大家科普中端晶片組主板為什麼更具性價比。    英特爾和AMD每年在發處理器新品的同時都會發布相對應的晶片組,用400系列晶片組舉例,英特爾發布了為十代酷睿3個400系列晶片組,包括Z490、B460以及H410,其中Z490晶片組就是高端主板的標配,B460晶片組則面向中端市場,而H410面向入門市場
  • 極速鯊課堂75:如何判斷電腦是否支持超頻?
    如果使用的是英特爾晶片組主板的話,只有高端的Z系列晶片組支持超頻,也就是Z490/Z390這種,而中端的B460/B360,以及入門的H410/H310這中是完全不能支持超頻的。所以如果你需要在英特爾平臺進行超頻,需要買一個尾標帶「K」或者"KF"的酷睿處理器,搭配Z490/Z390這種Z系列晶片組才行。