SpringBoot中MyBatis-Flex的集成和使用實(shí)現(xiàn)
一、MyBatis-Flex 是什么?
MyBatis-Flex是一個(gè)基于MyBatis的數(shù)據(jù)訪問框架,專門為Flex應(yīng)用程序而設(shè)計(jì)的。它提供了一種靈活而高效的方式來處理Flex應(yīng)用程序中的數(shù)據(jù)訪問,可以輕松地連接到各種數(shù)據(jù)源,并提供了一些方便的工具和功能,包括對(duì)象關(guān)系映射(ORM)、動(dòng)態(tài)查詢、分頁、事務(wù)處理等等。它的主要目的是簡(jiǎn)化數(shù)據(jù)訪問的過程,使得開發(fā)人員可以更加專注于業(yè)務(wù)邏輯的開發(fā),而不是一些瑣碎的數(shù)據(jù)訪問細(xì)節(jié)。
總而言之,MyBatis-Flex 能夠極大地提高我們的開發(fā)效率和開發(fā)體驗(yàn),讓我們有更多的時(shí)間專注于自己的事情。
二、特征?
1、輕量型
- 輕依賴:除了 MyBatis,沒有任何第三方依賴輕依賴、沒有任何攔截器
- 輕實(shí)現(xiàn):原理是通過 SqlProvider 的方式實(shí)現(xiàn)
- 輕運(yùn)行:沒有任何的 Sql 解析,帶來了這么幾個(gè)好處:1、極高的性能;2、方便對(duì)代碼進(jìn)行跟蹤和調(diào)試; 3、更高的把控性
2、使用靈活
- 支持 Entity 的增刪改查、以及分頁查詢
- MyBatis-Flex 提供了 Db + Row^靈活 工具,可以無需實(shí)體類對(duì)數(shù)據(jù)庫進(jìn)行增刪改查以及分頁查詢
- MyBatis-Flex 內(nèi)置的 QueryWrapper^靈活 可以輕易的幫助我們實(shí)現(xiàn)多表查詢、子查詢和鏈接查詢等常見的 SQL 查詢場(chǎng)景
3、功能強(qiáng)大
- 支持任意關(guān)系型數(shù)據(jù)庫,還可以通過方言持續(xù)擴(kuò)展
- 支持多主鍵,邏輯刪除、數(shù)據(jù)脫敏、數(shù)據(jù)填充和樂觀鎖配置等
三、MyBatis Flex的使用
1、創(chuàng)建數(shù)據(jù)庫表
創(chuàng)建sql如下:
CREATE TABLE IF NOT EXISTS `tb_account` ( `id` INTEGER PRIMARY KEY auto_increment, `user_name` VARCHAR(100), `age` INTEGER, `birthday` DATETIME ); INSERT INTO tb_account(id, user_name, age, birthday) VALUES (1, '張三', 18, '2020-01-11'), (2, '李四', 19, '2021-03-21');
2、創(chuàng)建 Spring Boot 項(xiàng)目,添加 依賴
可以使用 Spring Initializer 快速初始化一個(gè) Spring Boot 工程。
需要添加的 Maven 主要依賴示例:
pom.xml配置如下:
<dependencies> <dependency> <groupId>com.mybatis-flex</groupId> <artifactId>mybatis-flex-spring-boot-starter</artifactId> <version>1.7.5</version> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> </dependency> <!-- for test only --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
3、對(duì) Spring Boot 項(xiàng)目進(jìn)行配置
在 application.yml 中配置數(shù)據(jù)源:
# DataSource Config spring: datasource: url: jdbc:mysql://localhost:3306/flex_test username: root password: 12345678
在 Spring Boot 啟動(dòng)類中添加 @MapperScan
注解,掃描 Mapper 文件夾:
@SpringBootApplication @MapperScan("com.mybatisflex.test.mapper") public class MybatisFlexTestApplication { public static void main(String[] args) { SpringApplication.run(MybatisFlexTestApplication.class, args); } }
4、編寫實(shí)體類和 Mapper 接口
這里使用了 Lombok 注解來簡(jiǎn)化代碼,類代碼如下:
@Data @Table("tb_account") public class Account { @Id(keyType = KeyType.Auto) private Long id; private String userName; private Integer age; private Date birthday; }
- 使用
@Table("tb_account")
設(shè)置實(shí)體類與表名的映射關(guān)系 - 使用
@Id(keyType = KeyType.Auto)
標(biāo)識(shí)主鍵為自增
Mapper 接口繼承 BaseMapper 接口:
public interface AccountMapper extends BaseMapper<Account> { }
這部分也可以使用 MyBatis-Flex 的代碼生成器來生,功能非常強(qiáng)大的。詳情進(jìn)入:代碼生成器章節(jié) 了解。
5、開始使用
添加測(cè)試類,進(jìn)行功能測(cè)試:
import static com.mybatisflex.test.entity.table.AccountTableDef.ACCOUNT; @SpringBootTest class MybatisFlexTestApplicationTests { @Autowired private AccountMapper accountMapper; @Test void contextLoads() { QueryWrapper queryWrapper = QueryWrapper.create() .select() .where(ACCOUNT.AGE.eq(18)); Account account = accountMapper.selectOneByQuery(queryWrapper); System.out.println(account); } }
控制臺(tái)輸出:
Account(id=1, userName=張三, age=18, birthday=Sat Jan 11 00:00:00 CST 2020)
以上的 示例 中, ACCOUNT
為 MyBatis-Flex 通過 APT 自動(dòng)生成,只需通過靜態(tài)導(dǎo)入即可,無需手動(dòng)編碼。
點(diǎn)擊查看更多APT文檔 APT 文檔。
若覺得 APT 使用不習(xí)慣,也可以使用代碼生成器來生成。點(diǎn)擊 代碼生成器文檔 了解。
四、同類框架「功能」對(duì)比
MyBatis-Flex 主要是和 MyBatis-Plus
與 Fluent-MyBatis
對(duì)比,內(nèi)容來源其官網(wǎng)、git 或者 網(wǎng)絡(luò)文章,若有錯(cuò)誤歡迎糾正。
- MyBatis-Plus:老牌的 MyBatis 增強(qiáng)框架,開源于 2016 年。
- Fluent-MyBatis:阿里云開發(fā)的 MyBatis 增強(qiáng)框架(來自于阿里云·云效產(chǎn)品團(tuán)隊(duì))
功能對(duì)比:
功能或特點(diǎn) | MyBatis-Flex | MyBatis-Plus | Fluent-MyBatis |
---|---|---|---|
對(duì) entity 的基本增刪改查 | ? | ? | ? |
分頁查詢 | ? | ? | ? |
分頁查詢之總量緩存 | ? | ? | ? |
分頁查詢無 SQL 解析設(shè)計(jì)(更輕量,及更高性能) | ? | ? | ? |
多表查詢: from 多張表 | ? | ? | ? |
多表查詢: left join、inner join 等等 | ? | ? | ? |
多表查詢: union,union all | ? | ? | ? |
單主鍵配置 | ? | ? | ? |
多種 id 生成策略 | ? | ? | ? |
支持多主鍵、復(fù)合主鍵 | ? | ? | ? |
字段的 typeHandler 配置 | ? | ? | ? |
除了 MyBatis,無其他第三方依賴(更輕量) | ? | ? | ? |
QueryWrapper 是否支持在微服務(wù)項(xiàng)目下進(jìn)行 RPC 傳輸 | ? | ? | 未知 |
邏輯刪除 | ? | ? | ? |
樂觀鎖 | ? | ? | ? |
SQL 審計(jì) | ? | ? | ? |
數(shù)據(jù)填充 | ? | ? | ? |
數(shù)據(jù)脫敏 | ? | ?? (收費(fèi)) | ? |
字段權(quán)限 | ? | ?? (收費(fèi)) | ? |
字段加密 | ? | ?? (收費(fèi)) | ? |
字典回寫 | ? | ?? (收費(fèi)) | ? |
Db + Row | ? | ? | ? |
Entity 監(jiān)聽 | ? | ? | ? |
多數(shù)據(jù)源支持 | ? | 借助其他框架或收費(fèi) | ? |
多數(shù)據(jù)源是否支持 Spring 的事務(wù)管理,比如 @Transactional 和 TransactionTemplate 等 | ? | ? | ? |
多數(shù)據(jù)源是否支持 "非Spring" 項(xiàng)目 | ? | ? | ? |
多租戶 | ? | ? | ? |
動(dòng)態(tài)表名 | ? | ? | ? |
動(dòng)態(tài) Schema | ? | ? | ? |
以上內(nèi)容來自第三方相關(guān)產(chǎn)品的官方文檔或第三方平臺(tái),若有錯(cuò)誤,歡迎糾正。
五、同類框架「性能」對(duì)比
本文主要是展示了 MyBatis-Flex 和 Mybaits-Plus 的「性能」對(duì)比。Mybaits-Plus 是一個(gè)非常優(yōu)秀 Mybaits 增強(qiáng)框架, 其開源于 2016 年,有很多的成功案例。
測(cè)試方法:
使用 h2 數(shù)據(jù)庫,在初始化的時(shí)候分別為 mybatis-flex 和 mybatis-plus 創(chuàng)建兩個(gè)不同的數(shù)據(jù)庫, 但是完全一樣的數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)內(nèi)容和數(shù)據(jù)量(每個(gè)庫 2w 條數(shù)據(jù))。
開始之前先進(jìn)行預(yù)熱,之后通過打印時(shí)間戳的方式進(jìn)行對(duì)比,誰消耗的時(shí)間越少,則性能越高(每次測(cè)試 10 輪)。
1、測(cè)試單條數(shù)據(jù)查詢?
MyBatis-Flex 的代碼如下:
QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.where(FLEX_ACCOUNT.ID.ge(100) .or(FLEX_ACCOUNT.USER_NAME.eq("admin" + ThreadLocalRandom.current().nextInt(10000)))); mapper.selectOneByQuery(queryWrapper);
MyBatis-Plus 的代碼如下:
QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.ge("id", 100); queryWrapper.or(); queryWrapper.eq("user_name", "admin" + ThreadLocalRandom.current().nextInt(10000)); queryWrapper.last("limit 1"); mapper.selectOne(queryWrapper);
10 輪的測(cè)試結(jié)果:
---------------
>>>>>>>testFlexSelectOne:134
>>>>>>>testPlusSelectOneWithLambda:989
>>>>>>>testPlusSelectOne:830
---------------
>>>>>>>testFlexSelectOne:75
>>>>>>>testPlusSelectOneWithLambda:732
>>>>>>>testPlusSelectOne:795
---------------
>>>>>>>testFlexSelectOne:65
>>>>>>>testPlusSelectOneWithLambda:938
>>>>>>>testPlusSelectOne:714
---------------
>>>>>>>testFlexSelectOne:105
>>>>>>>testPlusSelectOneWithLambda:740
>>>>>>>testPlusSelectOne:669
---------------
>>>>>>>testFlexSelectOne:57
>>>>>>>testPlusSelectOneWithLambda:691
>>>>>>>testPlusSelectOne:773
---------------
>>>>>>>testFlexSelectOne:65
>>>>>>>testPlusSelectOneWithLambda:693
>>>>>>>testPlusSelectOne:695
---------------
>>>>>>>testFlexSelectOne:56
>>>>>>>testPlusSelectOneWithLambda:754
>>>>>>>testPlusSelectOne:665
---------------
>>>>>>>testFlexSelectOne:56
>>>>>>>testPlusSelectOneWithLambda:714
>>>>>>>testPlusSelectOne:717
---------------
>>>>>>>testFlexSelectOne:57
>>>>>>>testPlusSelectOneWithLambda:696
>>>>>>>testPlusSelectOne:671
---------------
>>>>>>>testFlexSelectOne:59
>>>>>>>testPlusSelectOneWithLambda:739
>>>>>>>testPlusSelectOne:659
測(cè)試結(jié)論
MyBatis-Flex 的查詢單條數(shù)據(jù)的速度,大概是 MyBatis-Plus 的 5 ~ 10+ 倍。
2、測(cè)試列表(List)數(shù)據(jù)查詢?
要求返回的數(shù)據(jù)為 10 條數(shù)據(jù)。
MyBatis-Flex 的代碼如下:
QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.where(FLEX_ACCOUNT.ID.ge(100).or(FLEX_ACCOUNT.USER_NAME .eq("admin" + ThreadLocalRandom.current().nextInt(10000)))) .limit(10); mapper.selectListByQuery(queryWrapper);
MyBatis-Plus 的代碼如下:
QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.ge("id", 100); queryWrapper.or(); queryWrapper.eq("user_name", "admin" + ThreadLocalRandom.current().nextInt(10000)); queryWrapper.last("limit 10"); mapper.selectList(queryWrapper);
10 輪的測(cè)試結(jié)果:
---------------
>>>>>>>testFlexSelectTop10:90
>>>>>>>testPlusSelectTop10WithLambda:743
>>>>>>>testPlusSelectTop10:678
---------------
>>>>>>>testFlexSelectTop10:85
>>>>>>>testPlusSelectTop10WithLambda:692
>>>>>>>testPlusSelectTop10:684
---------------
>>>>>>>testFlexSelectTop10:84
>>>>>>>testPlusSelectTop10WithLambda:692
>>>>>>>testPlusSelectTop10:670
---------------
>>>>>>>testFlexSelectTop10:85
>>>>>>>testPlusSelectTop10WithLambda:737
>>>>>>>testPlusSelectTop10:667
---------------
>>>>>>>testFlexSelectTop10:85
>>>>>>>testPlusSelectTop10WithLambda:691
>>>>>>>testPlusSelectTop10:684
---------------
>>>>>>>testFlexSelectTop10:97
>>>>>>>testPlusSelectTop10WithLambda:760
>>>>>>>testPlusSelectTop10:666
---------------
>>>>>>>testFlexSelectTop10:80
>>>>>>>testPlusSelectTop10WithLambda:673
>>>>>>>testPlusSelectTop10:637
---------------
>>>>>>>testFlexSelectTop10:81
>>>>>>>testPlusSelectTop10WithLambda:653
>>>>>>>testPlusSelectTop10:639
---------------
>>>>>>>testFlexSelectTop10:82
>>>>>>>testPlusSelectTop10WithLambda:659
>>>>>>>testPlusSelectTop10:636
---------------
>>>>>>>testFlexSelectTop10:81
>>>>>>>testPlusSelectTop10WithLambda:654
>>>>>>>testPlusSelectTop10:656
測(cè)試結(jié)論
MyBatis-Flex 的查詢 10 條數(shù)據(jù)的速度,大概是 MyBatis-Plus 的 5~10 倍左右。
3、分頁查詢?
MyBatis-Flex 的代碼如下:
QueryWrapper queryWrapper = new QueryWrapper() .where(FLEX_ACCOUNT.ID.ge(100)); mapper.paginate(page, pageSize, 20000, queryWrapper);
MyBatis-Plus 的代碼如下:
LambdaQueryWrapper<PlusAccount> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.ge(PlusAccount::getId, 100); queryWrapper.eq(PlusAccount::getEmail, "michael@gmail.com"); Page<PlusAccount> p = Page.of(page, pageSize, 20000, false); mapper.selectPage(p, queryWrapper);
10 輪的測(cè)試結(jié)果:
---------------
>>>>>>>testFlexPaginate:90
>>>>>>>testPlusPaginate:671
---------------
>>>>>>>testFlexPaginate:78
>>>>>>>testPlusPaginate:643
---------------
>>>>>>>testFlexPaginate:80
>>>>>>>testPlusPaginate:638
---------------
>>>>>>>testFlexPaginate:79
>>>>>>>testPlusPaginate:613
---------------
>>>>>>>testFlexPaginate:75
>>>>>>>testPlusPaginate:627
---------------
>>>>>>>testFlexPaginate:72
>>>>>>>testPlusPaginate:606
---------------
>>>>>>>testFlexPaginate:69
>>>>>>>testPlusPaginate:585
---------------
>>>>>>>testFlexPaginate:70
>>>>>>>testPlusPaginate:589
---------------
>>>>>>>testFlexPaginate:69
>>>>>>>testPlusPaginate:586
---------------
>>>>>>>testFlexPaginate:68
>>>>>>>testPlusPaginate:585
測(cè)試結(jié)論
Mybatis-Flex 的分頁查詢速度,大概是 Mybatis-Plus 的 5~10 倍左右。
4、數(shù)據(jù)更新?
Mybatis-Flex 的代碼如下:
FlexAccount flexAccount = new FlexAccount(); flexAccount.setUserName("testInsert" + i); flexAccount.setNickname("testInsert" + i); flexAccount.addOption("key1", "value1"); flexAccount.addOption("key2", "value2"); flexAccount.addOption("key3", "value3"); flexAccount.addOption("key4", "value4"); flexAccount.addOption("key5", "value5"); QueryWrapper queryWrapper = QueryWrapper.create() .where(FLEX_ACCOUNT.ID.ge(9200)) .and(FLEX_ACCOUNT.ID.le(9300)) .and(FLEX_ACCOUNT.USER_NAME.like("admin")) .and(FLEX_ACCOUNT.NICKNAME.like("admin")); mapper.updateByQuery(flexAccount, queryWrapper);
Mybatis-Plus 的代碼如下:
PlusAccount plusAccount = new PlusAccount(); plusAccount.setUserName("testInsert" + i); plusAccount.setNickname("testInsert" + i); plusAccount.addOption("key1", "value1"); plusAccount.addOption("key2", "value2"); plusAccount.addOption("key3", "value3"); plusAccount.addOption("key4", "value4"); plusAccount.addOption("key5", "value5"); LambdaUpdateWrapper<PlusAccount> updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.ge(PlusAccount::getId, 9000); updateWrapper.le(PlusAccount::getId, 9100); updateWrapper.like(PlusAccount::getUserName, "admin"); updateWrapper.like(PlusAccount::getNickname, "admin"); mapper.update(plusAccount, lambdaUpdateWrapper);
10 輪的測(cè)試結(jié)果:
---------------
>>>>>>>testFlexUpdate:58
>>>>>>>testPlusUpdate:524
---------------
>>>>>>>testFlexUpdate:51
>>>>>>>testPlusUpdate:503
---------------
>>>>>>>testFlexUpdate:49
>>>>>>>testPlusUpdate:490
---------------
>>>>>>>testFlexUpdate:45
>>>>>>>testPlusUpdate:472
---------------
>>>>>>>testFlexUpdate:48
>>>>>>>testPlusUpdate:470
---------------
>>>>>>>testFlexUpdate:44
>>>>>>>testPlusUpdate:460
---------------
>>>>>>>testFlexUpdate:43
>>>>>>>testPlusUpdate:459
---------------
>>>>>>>testFlexUpdate:44
>>>>>>>testPlusUpdate:461
---------------
>>>>>>>testFlexUpdate:40
>>>>>>>testPlusUpdate:444
---------------
>>>>>>>testFlexUpdate:41
>>>>>>>testPlusUpdate:444
測(cè)試結(jié)論
Mybatis-Flex 的數(shù)據(jù)更新速度,大概是 Mybatis-Plus 的 5~10+ 倍。
總之性能測(cè)試結(jié)果:
不論是MyBatis-Flex 單條查詢分頁查詢還是數(shù)據(jù)更新,速度均是 MyBatis-Plus 的 5~10 倍左右?。?!
六、MyBatis-Flex 支持的數(shù)據(jù)庫
MyBatis-Flex 支持的數(shù)據(jù)庫類型,如下表格所示,我們還可以通過自定義方言的方式,持續(xù)添加更多的數(shù)據(jù)庫支持。
數(shù)據(jù)庫 | 描述 |
---|---|
mysql | MySQL 數(shù)據(jù)庫 |
mariadb | MariaDB 數(shù)據(jù)庫 |
oracle | Oracle11g 及以下數(shù)據(jù)庫 |
oracle12c | Oracle12c 及以上數(shù)據(jù)庫 |
db2 | DB2 數(shù)據(jù)庫 |
H2 | H2 數(shù)據(jù)庫 |
hsql | HSQL 數(shù)據(jù)庫 |
sqlite | SQLite 數(shù)據(jù)庫 |
postgresql | PostgreSQL 數(shù)據(jù)庫 |
sqlserver2005 | SQLServer2005 數(shù)據(jù)庫 |
sqlserver | SQLServer 數(shù)據(jù)庫 |
dm | 達(dá)夢(mèng)數(shù)據(jù)庫 |
xugu | 虛谷數(shù)據(jù)庫 |
kingbasees | 人大金倉數(shù)據(jù)庫 |
phoenix | Phoenix HBase 數(shù)據(jù)庫 |
gauss | Gauss 數(shù)據(jù)庫 |
clickhouse | ClickHouse 數(shù)據(jù)庫 |
gbase | 南大通用(華庫)數(shù)據(jù)庫 |
gbase-8s | 南大通用數(shù)據(jù)庫 GBase 8s |
oscar | 神通數(shù)據(jù)庫 |
sybase | Sybase ASE 數(shù)據(jù)庫 |
OceanBase | OceanBase 數(shù)據(jù)庫 |
Firebird | Firebird 數(shù)據(jù)庫 |
derby | Derby 數(shù)據(jù)庫 |
highgo | 瀚高數(shù)據(jù)庫 |
cubrid | CUBRID 數(shù)據(jù)庫 |
goldilocks | GOLDILOCKS 數(shù)據(jù)庫 |
csiidb | CSIIDB 數(shù)據(jù)庫 |
hana | SAP_HANA 數(shù)據(jù)庫 |
impala | Impala 數(shù)據(jù)庫 |
vertica | Vertica 數(shù)據(jù)庫 |
xcloud | 行云數(shù)據(jù)庫 |
redshift | 亞馬遜 redshift 數(shù)據(jù)庫 |
openGauss | 華為 openGauss 數(shù)據(jù)庫 |
TDengine | TDengine 數(shù)據(jù)庫 |
informix | Informix 數(shù)據(jù)庫 |
greenplum | Greenplum 數(shù)據(jù)庫 |
uxdb | 優(yōu)炫數(shù)據(jù)庫 |
Doris | Doris數(shù)據(jù)庫 |
Hive SQL | Hive 數(shù)據(jù)庫 |
lealone | Lealone 數(shù)據(jù)庫 |
sinodb | 星瑞格數(shù)據(jù)庫 |
到此這篇關(guān)于SpringBoot中MyBatis-Flex的集成和使用實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot MyBatis-Flex集成內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入分析Android系統(tǒng)中SparseArray的源碼
這篇文章主要介紹了深入分析Android系統(tǒng)中SparseArray的源碼,SparseArray為Java實(shí)現(xiàn),需要的朋友可以參考下2015-07-07解決mapstruct在eclipse生成不了mapper的實(shí)現(xiàn)類問題
這篇文章主要介紹了解決mapstruct在eclipse生成不了mapper的實(shí)現(xiàn)類問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Maven 項(xiàng)目生成jar運(yùn)行時(shí)提示“沒有主清單屬性”
這篇文章主要介紹了Maven 項(xiàng)目生成jar運(yùn)行時(shí)提示“沒有主清單屬性”,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03ExecutorService Callable Future多線程返回結(jié)果原理解析
這篇文章主要為大家介紹了ExecutorService Callable Future多線程返回結(jié)果,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Java編譯錯(cuò)誤信息提示java.lang.ExceptionInInitializer解決
這篇文章主要介紹了Java編譯錯(cuò)誤信息提示java.lang.ExceptionInInitializer的分析講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Spring實(shí)戰(zhàn)之Bean銷毀之前的行為操作示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之Bean銷毀之前的行為操作,結(jié)合實(shí)例形式分析了spring在bean銷毀之前的行為相關(guān)設(shè)置與使用技巧,需要的朋友可以參考下2019-11-11對(duì)象轉(zhuǎn)Json字符串時(shí)如何忽略指定屬性
這篇文章主要介紹了對(duì)象轉(zhuǎn)Json字符串時(shí)如何忽略指定屬性,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08