基于SpringBoot整合SSMP的詳細(xì)教程
基于SpringBoot實(shí)現(xiàn)SSMP整合
SpringBoot之所以好用,就是它能方便快捷的整合其他技術(shù),這里我們先介紹四種技術(shù)的整合:
- 整合JUnit
- 整合MyBatis
- 整合MyBatis-Plus
- 整合Druid
整合JUnit
? SpringBoot技術(shù)的定位用于簡(jiǎn)化開(kāi)發(fā),再具體點(diǎn)是簡(jiǎn)化Spring程序的開(kāi)發(fā)。所以在整合任意技術(shù)的時(shí)候,如果你想直觀感觸到簡(jiǎn)化的效果,你必須先知道使用非SpringBoot技術(shù)時(shí)對(duì)應(yīng)的整合是如何做的,然后再看基于SpringBoot的整合是如何做的,才能比對(duì)出來(lái)簡(jiǎn)化在了哪里。
? 我們先來(lái)看一下不使用SpringBoot技術(shù)時(shí),Spring整合JUnit的制作方式
//加載spring整合junit專(zhuān)用的類(lèi)運(yùn)行器 @RunWith(SpringJUnit4ClassRunner.class) //指定對(duì)應(yīng)的配置信息 @ContextConfiguration(classes = SpringConfig.class) public class AccountServiceTestCase { //注入你要測(cè)試的對(duì)象 @Autowired private AccountService accountService; @Test public void testGetById(){ //執(zhí)行要測(cè)試的對(duì)象對(duì)應(yīng)的方法 System.out.println(accountService.findById(2)); } }
?其中核心代碼是前兩個(gè)注解:
第一個(gè)注解@RunWith是設(shè)置Spring專(zhuān)用的測(cè)試類(lèi)運(yùn)行器,簡(jiǎn)單說(shuō)就是Spring程序執(zhí)行程序有自己的一套獨(dú)立的運(yùn)行程序的方式,不能使用JUnit提供的類(lèi)運(yùn)行方式了,必須指定一下,但是格式是固定的,琢磨一下,每次都指定一樣的東西,這個(gè)東西寫(xiě)起來(lái)沒(méi)有技術(shù)含量啊
第二個(gè)注解@ContextConfiguration是用來(lái)設(shè)置Spring核心配置文件或配置類(lèi)的,簡(jiǎn)單說(shuō)就是加載Spring的環(huán)境你要告訴Spring具體的環(huán)境配置是在哪里寫(xiě)的,雖然每次加載的文件都有可能不同,但是仔細(xì)想想,如果文件名是固定的,這個(gè)貌似也是一個(gè)固定格式。既然有可能是固定格式,那就有可能每次都寫(xiě)一樣的東西,也是一個(gè)沒(méi)有技術(shù)含量的內(nèi)容書(shū)寫(xiě)
SpringBoot就抓住上述兩條沒(méi)有技術(shù)含量的內(nèi)容書(shū)寫(xiě)進(jìn)行開(kāi)發(fā)簡(jiǎn)化,能走默認(rèn)值的走默認(rèn)值,能不寫(xiě)的就不寫(xiě),具體格式如下:
@SpringBootTest class Springboot04JunitApplicationTests { //注入你要測(cè)試的對(duì)象 @Autowired private BookDao bookDao; @Test void contextLoads() { //執(zhí)行要測(cè)試的對(duì)象對(duì)應(yīng)的方法 bookDao.save(); System.out.println("two..."); } }
? 看看這次簡(jiǎn)化成什么樣了,一個(gè)注解就搞定了,而且還沒(méi)有參數(shù),再體會(huì)SpringBoot整合其他技術(shù)的優(yōu)勢(shì)在哪里,就兩個(gè)字——簡(jiǎn)化。使用一個(gè)注解@SpringBootTest替換了前面兩個(gè)注解。至于內(nèi)部是怎么回事?和之前一樣,只不過(guò)都走默認(rèn)值。
? 這個(gè)時(shí)候有人就問(wèn)了,你加載的配置類(lèi)或者配置文件是哪一個(gè)?就是我們前面啟動(dòng)程序使用的引導(dǎo)類(lèi)。如果想手工指定引導(dǎo)類(lèi)有兩種方式,第一種方式使用屬性的形式進(jìn)行,在注解@SpringBootTest中添加classes屬性指定配置類(lèi):
@SpringBootTest(classes = 引導(dǎo)類(lèi)的名字.class) class Springboot04JunitApplicationTests { //注入你要測(cè)試的對(duì)象 @Autowired private BookDao bookDao; @Test void contextLoads() { //執(zhí)行要測(cè)試的對(duì)象對(duì)應(yīng)的方法 bookDao.save(); System.out.println("two..."); } }
第二種方式回歸原始配置方式,仍然使用@ContextConfiguration注解進(jìn)行,效果是一樣的:
@SpringBootTest @ContextConfiguration(classes = Springboot04JunitApplication.class) class Springboot04JunitApplicationTests { //注入你要測(cè)試的對(duì)象 @Autowired private BookDao bookDao; @Test void contextLoads() { //執(zhí)行要測(cè)試的對(duì)象對(duì)應(yīng)的方法 bookDao.save(); System.out.println("two..."); } }
溫馨提示
使用SpringBoot整合JUnit需要保障導(dǎo)入test對(duì)應(yīng)的starter,由于初始化項(xiàng)目時(shí)此項(xiàng)是默認(rèn)導(dǎo)入的,所以此處沒(méi)有提及
總結(jié)
- 導(dǎo)入測(cè)試對(duì)應(yīng)的starter
- 測(cè)試類(lèi)使用@SpringBootTest修飾
- 使用自動(dòng)裝配的形式添加要測(cè)試的對(duì)象
- 測(cè)試類(lèi)如果存在于引導(dǎo)類(lèi)所在包或子包中無(wú)需指定引導(dǎo)類(lèi)
- 測(cè)試類(lèi)如果不存在于引導(dǎo)類(lèi)所在的包或子包中需要通過(guò)classes屬性指定引導(dǎo)類(lèi)
整合MyBatis
老規(guī)矩我們還是先寫(xiě)一下原始整合方案:
導(dǎo)入坐標(biāo),MyBatis坐標(biāo)不能少,Spring整合MyBatis還有自己專(zhuān)用的坐標(biāo),此外Spring進(jìn)行數(shù)據(jù)庫(kù)操作的jdbc坐標(biāo)是必須的,剩下還有mysql驅(qū)動(dòng)坐標(biāo),本例中使用了Druid數(shù)據(jù)源,這個(gè)倒是可以不要
<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.導(dǎo)入mybatis與spring整合的jar包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <!--導(dǎo)入spring操作數(shù)據(jù)庫(kù)必選的包--> <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專(zhuān)用的配置類(lèi) @Configuration public class MyBatisConfig { // 定義創(chuàng)建SqlSessionFactory對(duì)應(yīng)的bean @Bean public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){ //SqlSessionFactoryBean是由mybatis-spring包提供的,專(zhuān)用于整合用的對(duì)象 SqlSessionFactoryBean sfb = new SqlSessionFactoryBean(); //設(shè)置數(shù)據(jù)源替代原始配置中的environments的配置 sfb.setDataSource(dataSource); //設(shè)置類(lèi)型別名替代原始配置中的typeAliases的配置 sfb.setTypeAliasesPackage("com.nefu.domain"); return sfb; } // 定義加載所有的映射配置 @Bean public MapperScannerConfigurer mapperScannerConfigurer(){ MapperScannerConfigurer msc = new MapperScannerConfigurer(); msc.setBasePackage("com.nefu.dao"); return msc; } }
數(shù)據(jù)源對(duì)應(yīng)的bean,此處使用Druid數(shù)據(jù)源
@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; } }
數(shù)據(jù)庫(kù)連接信息(properties格式)
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/spring_db?useSSL=false jdbc.username=root jdbc.password=*********
上述格式基本上是最簡(jiǎn)格式了,要寫(xiě)的東西還真不少。
這里是最簡(jiǎn)格式,所以我們沒(méi)有寫(xiě)業(yè)務(wù)層,我們測(cè)試的時(shí)候直接通過(guò)dao的自動(dòng)生成對(duì)象去操作數(shù)據(jù)庫(kù)
下面看看SpringBoot整合MyBaits格式:
步驟①:創(chuàng)建模塊
步驟②:勾選要使用的技術(shù),MyBatis,由于要操作數(shù)據(jù)庫(kù),還要勾選對(duì)應(yīng)數(shù)據(jù)庫(kù)
? 或者手工導(dǎo)入對(duì)應(yīng)技術(shù)的starter,和對(duì)應(yīng)數(shù)據(jù)庫(kù)的坐標(biāo)
<dependencies> <!--1.導(dǎo)入對(duì)應(yīng)的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>
步驟③:配置數(shù)據(jù)源相關(guān)信息,沒(méi)有這個(gè)信息你連接哪個(gè)數(shù)據(jù)庫(kù)都不知道
#2.配置相關(guān)信息 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ssm_db username: root password: ****************
? 結(jié)束了,對(duì),這就結(jié)束了,SpringBoot把配置中所有可能出現(xiàn)的通用配置都簡(jiǎn)化了。下面寫(xiě)一個(gè)MyBatis程序運(yùn)行需要的Dao(或者M(jìn)apper)就可以運(yùn)行了
實(shí)體類(lèi)
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); }
測(cè)試類(lèi)
@SpringBootTest class Springboot05MybatisApplicationTests { @Autowired private BookDao bookDao; @Test void contextLoads() { System.out.println(bookDao.getById(1)); } }
結(jié)果:
? 注意:當(dāng)前使用的SpringBoot版本是2.5.4,對(duì)應(yīng)的坐標(biāo)設(shè)置中Mysql驅(qū)動(dòng)使用的是8x版本。使用SpringBoot2.4.3(不含)之前版本會(huì)出現(xiàn)一個(gè)小BUG,就是MySQL驅(qū)動(dòng)升級(jí)到8以后要求強(qiáng)制配置時(shí)區(qū),如果不設(shè)置會(huì)出問(wèn)題。解決方案很簡(jiǎn)單,驅(qū)動(dòng)url上面添加上對(duì)應(yīng)設(shè)置就行了
#2.配置相關(guān)信息 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC username: root password: ********
? 這里設(shè)置的UTC是全球標(biāo)準(zhǔn)時(shí)間,你也可以理解為是英國(guó)時(shí)間,中國(guó)處在東八區(qū),需要在這個(gè)基礎(chǔ)上加上8小時(shí),這樣才能和中國(guó)地區(qū)的時(shí)間對(duì)應(yīng)的,也可以修改配置為Asia/Shanghai,同樣可以解決這個(gè)問(wèn)題。
#2.配置相關(guān)信息 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=Asia/Shanghai username: root password: *********
? 如果不想每次都設(shè)置這個(gè)東西,也可以去修改mysql中的配置文件mysql.ini,在mysqld項(xiàng)中添加default-time-zone=+8:00也可以解決這個(gè)問(wèn)題。其實(shí)方式方法很多,這里就說(shuō)這么多吧。
? 此外在運(yùn)行程序時(shí)還會(huì)給出一個(gè)提示,說(shuō)數(shù)據(jù)庫(kù)驅(qū)動(dòng)過(guò)時(shí)的警告,根據(jù)提示修改配置即可,棄用com.mysql.jdbc.Driver,換用com.mysql.cj.jdbc.Driver。前面的例子中已經(jīng)更換了驅(qū)動(dòng)了,在此說(shuō)明一下。
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.
總結(jié)
- 整合操作需要勾選MyBatis技術(shù),也就是導(dǎo)入MyBatis對(duì)應(yīng)的starter
- 數(shù)據(jù)庫(kù)連接相關(guān)信息轉(zhuǎn)換成配置
- 數(shù)據(jù)庫(kù)SQL映射需要添加@Mapper被容器識(shí)別到
- MySQL 8.X驅(qū)動(dòng)強(qiáng)制要求設(shè)置時(shí)區(qū)
- 修改url,添加serverTimezone設(shè)定
- 修改MySQL數(shù)據(jù)庫(kù)配置
- 驅(qū)動(dòng)類(lèi)過(guò)時(shí),提醒更換為com.mysql.cj.jdbc.Driver
整合MyBatis-Plus
經(jīng)過(guò)前面兩種技術(shù)的整合,我們發(fā)現(xiàn)第三方技術(shù)的整合無(wú)非就是兩步:
- 導(dǎo)入對(duì)應(yīng)技術(shù)的starter坐標(biāo)
- 根據(jù)對(duì)應(yīng)技術(shù)的要求做配置
接下來(lái)在MyBatis的基礎(chǔ)上再升級(jí)一下,整合MyBaitsPlus(簡(jiǎn)稱(chēng)MP)
步驟①:導(dǎo)入對(duì)應(yīng)的starter
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3</version> </dependency>
? 關(guān)于這個(gè)坐標(biāo),此處要說(shuō)明一點(diǎn),之前我們看的starter都是spring-boot-starter-???,也就是說(shuō)都是下面的格式
Spring-boot-start-***
? 而MyBatis與MyBatisPlus這兩個(gè)坐標(biāo)的名字書(shū)寫(xiě)比較特殊,是第三方技術(shù)名稱(chēng)在前,boot和starter在后。此處簡(jiǎn)單提一下命名規(guī)范,后期原理篇會(huì)再詳細(xì)講解
starter所屬 | 命名規(guī)則 | 示例 |
---|---|---|
官方提供 | spring-boot-starter-技術(shù)名稱(chēng) | spring-boot-starter-web spring-boot-starter-test |
第三方提供 | 第三方技術(shù)名稱(chēng)-spring-boot-starter | mybatis-spring-boot-starter druid-spring-boot-starter |
第三方提供 | 第三方技術(shù)名稱(chēng)-boot-starter(第三方技術(shù)名稱(chēng)過(guò)長(zhǎng),簡(jiǎn)化命名) | mybatis-plus-boot-starter |
溫馨提示
? 有些小伙伴在創(chuàng)建項(xiàng)目時(shí)想通過(guò)勾選的形式找到這個(gè)名字,別翻了,沒(méi)有。截止目前,SpringBoot官網(wǎng)還未收錄此坐標(biāo),而我們Idea創(chuàng)建模塊時(shí)讀取的是SpringBoot官網(wǎng)的Spring Initializr,所以也沒(méi)有。如果換用阿里云的url創(chuàng)建項(xiàng)目可以找到對(duì)應(yīng)的坐標(biāo)。
步驟②:配置數(shù)據(jù)源相關(guān)信息
#2.配置相關(guān)信息 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ssm_db username: root password: root
? 沒(méi)了,就這么多,剩下的就是寫(xiě)MyBaitsPlus的程序了
映射接口(Dao)
@Mapper public interface BookDao extends BaseMapper<Book> { }
? 核心在于Dao接口繼承了一個(gè)BaseMapper的接口,這個(gè)接口中幫助開(kāi)發(fā)者預(yù)定了若干個(gè)常用的API接口,簡(jiǎn)化了通用API接口的開(kāi)發(fā)工作。
溫馨提示
目前數(shù)據(jù)庫(kù)的表名定義規(guī)則是tbl_模塊名稱(chēng),為了能和實(shí)體類(lèi)相對(duì)應(yīng),需要做一個(gè)配置,相關(guān)知識(shí)我前面mybatis-plus的文章中已經(jīng)有詳細(xì)解釋?zhuān)颂巸H給出解決方案。配置application.yml文件,添加如下配置即可,設(shè)置所有表名的通用前綴名
mybatis-plus: global-config: db-config: table-prefix: tbl_ #設(shè)置所有表的通用前綴名稱(chēng)為tbl_
總結(jié)
- 手工添加MyBatis-Plus對(duì)應(yīng)的starter
- 數(shù)據(jù)層接口使用BaseMapper簡(jiǎn)化開(kāi)發(fā)
- 需要使用的第三方技術(shù)無(wú)法通過(guò)勾選確定時(shí),需要手工添加坐標(biāo) 整合Druid
前面整合MyBatis和MyBatisPlus的時(shí)候,使用的數(shù)據(jù)源對(duì)象都是SpringBoot默認(rèn)的數(shù)據(jù)源對(duì)象,下面我們手工控制一下,自己指定了一個(gè)數(shù)據(jù)源對(duì)象,Druid。
? 在沒(méi)有指定數(shù)據(jù)源時(shí),我們的配置如下:
#2.配置相關(guān)信息 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=Asia/Shanghai username: root password: root
? 此時(shí)雖然沒(méi)有指定數(shù)據(jù)源,但是根據(jù)SpringBoot的德行,肯定幫我們選了一個(gè)它認(rèn)為最好的數(shù)據(jù)源對(duì)象,這就是HiKari。通過(guò)啟動(dòng)日志可以查看到對(duì)應(yīng)的身影。
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的身影,如果需要更換數(shù)據(jù)源,其實(shí)只需要兩步即可。
- 導(dǎo)入對(duì)應(yīng)的技術(shù)坐標(biāo)
- 配置使用指定的數(shù)據(jù)源類(lèi)型
下面就切換一下數(shù)據(jù)源對(duì)象
步驟①:導(dǎo)入對(duì)應(yīng)的坐標(biāo)(注意,是坐標(biāo),此處不是starter)
<dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency> </dependencies>
步驟②:修改配置,在數(shù)據(jù)源配置中有一個(gè)type屬性,專(zhuān)用于指定數(shù)據(jù)源類(lèi)型
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
? 這里其實(shí)要提出一個(gè)問(wèn)題的,目前的數(shù)據(jù)源配置格式是一個(gè)通用格式,不管你換什么數(shù)據(jù)源都可以用這種形式進(jìn)行配置。但是新的問(wèn)題又來(lái)了,如果對(duì)數(shù)據(jù)源進(jìn)行個(gè)性化的配置,例如配置數(shù)據(jù)源對(duì)應(yīng)的連接數(shù)量,這個(gè)時(shí)候就有新的問(wèn)題了。每個(gè)數(shù)據(jù)源技術(shù)對(duì)應(yīng)的配置名稱(chēng)都一樣嗎?肯定不是啊,各個(gè)廠商不可能提前商量好都寫(xiě)一樣的名字啊,怎么辦?就要使用專(zhuān)用的配置格式了。這個(gè)時(shí)候上面這種通用格式就不能使用了,怎么辦?還能怎么辦?按照SpringBoot整合其他技術(shù)的通用規(guī)則來(lái)套啊,導(dǎo)入對(duì)應(yīng)的starter,進(jìn)行相應(yīng)的配置即可。
步驟①:導(dǎo)入對(duì)應(yīng)的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: *************
? 注意觀察,配置項(xiàng)中,在datasource下面并不是直接配置url這些屬性的,而是先配置了一個(gè)druid節(jié)點(diǎn),然后再配置的url這些東西。言外之意,url這個(gè)屬性是druid下面的屬性,那你能想到什么?除了這4個(gè)常規(guī)配置外,還有druid專(zhuān)用的其他配置。通過(guò)提示功能可以打開(kāi)druid相關(guān)的配置查閱
與druid相關(guān)的配置超過(guò)200條以上,這就告訴你,如果想做druid相關(guān)的配置,使用這種格式就可以了,這里就不展開(kāi)描述了,太多了。
? 這是我們做的第4個(gè)技術(shù)的整合方案,還是那兩句話(huà):導(dǎo)入對(duì)應(yīng)starter,使用對(duì)應(yīng)配置。沒(méi)了,SpringBoot整合其他技術(shù)就這么簡(jiǎn)單粗暴。
總結(jié)
- 整合Druid需要導(dǎo)入Druid對(duì)應(yīng)的starter
- 根據(jù)Druid提供的配置方式進(jìn)行配置
- 整合第三方技術(shù)通用方式
- 導(dǎo)入對(duì)應(yīng)的starter
- 根據(jù)提供的配置格式,配置非默認(rèn)值對(duì)應(yīng)的配置項(xiàng)
到此這篇關(guān)于SpringBoot如何整合SSMP的文章就介紹到這了,更多相關(guān)SpringBoot如何整合SSMP內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java經(jīng)典算法匯總之選擇排序(SelectionSort)
選擇排序也是比較簡(jiǎn)單的一種排序方法,原理也比較容易理解,選擇排序在每次遍歷過(guò)程中只記錄下來(lái)最小的一個(gè)元素的下標(biāo),待全部比較結(jié)束之后,將最小的元素與未排序的那部分序列的最前面一個(gè)元素交換,這樣就降低了交換的次數(shù),提高了排序效率。2016-04-04idea統(tǒng)計(jì)代碼行數(shù)Statistic的步驟詳解
這篇文章主要介紹了idea統(tǒng)計(jì)代碼行數(shù)Statistic的步驟詳解,本文通過(guò)使用Statistic插件操作的,通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10Java中的do while循環(huán)控制語(yǔ)句基本使用
這篇文章主要介紹了Java中的do while循環(huán)控制語(yǔ)句基本使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01Java中Integer.parseInt和Integer.valueOf區(qū)別小結(jié)
在Java中,Integer.parseInt()和Integer.valueOf()都可以將字符串轉(zhuǎn)換為整數(shù)類(lèi)型,那么他們有哪些區(qū)別呢,本文就來(lái)詳細(xì)的介紹一下2023-09-09Java之SpringCloud nocos注冊(cè)中心講解
這篇文章主要介紹了Java之SpringCloud nocos注冊(cè)中心講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08淺談一下Java為什么不能使用字符流讀取非文本的二進(jìn)制文件
這篇文章主要介紹了淺談一下為什么不能使用字符流讀取非文本的二進(jìn)制文件,剛學(xué)Java的IO流部分時(shí),書(shū)上說(shuō)只能使用字節(jié)流去讀取圖片、視頻等非文本二進(jìn)制文件,不能使用字符流,否則文件會(huì)損壞,需要的朋友可以參考下2023-04-04Java8 Collectors求和功能的自定義擴(kuò)展操作
這篇文章主要介紹了Java8 Collectors求和功能的自定義擴(kuò)展操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02