摘要:新建模塊本次項(xiàng)目的框架一共有四層結(jié)構(gòu),也可以說(shuō)是有四個(gè)模塊。然后打開(kāi)目錄下的文件。此時(shí)中就不會(huì)報(bào)錯(cuò)了。實(shí)現(xiàn)定位到,新建名為的包。用于與數(shù)據(jù)庫(kù)字段作一一對(duì)應(yīng)查詢下方列出的所有列定義表名一定注意是否準(zhǔn)確。
原料
新鮮的IntelliJ IDEA、一雙手、以及電腦一臺(tái)。
搭建框架 新建項(xiàng)目打開(kāi)IDE,點(diǎn)擊File -> New Project。在左側(cè)的列表中的選擇Maven項(xiàng)目,點(diǎn)擊Next。
填寫GroupId和ArtifactId什么是GroupId和ArtifactId?大家可以參考一下google出來(lái)的定義,可以參考一下。
GroupID是項(xiàng)目組織唯一的標(biāo)識(shí)符,實(shí)際對(duì)應(yīng)JAVA的包的結(jié)構(gòu),是main目錄里java的目錄結(jié)構(gòu)。ArtifactID就是項(xiàng)目的唯一的標(biāo)識(shí)符,實(shí)際對(duì)應(yīng)項(xiàng)目的名稱,就是項(xiàng)目根目錄的名稱
簡(jiǎn)單理解一下,可以理解為GroupId就是你的Github賬號(hào),而ArtifactId就是你的具體某個(gè)項(xiàng)目,例如這個(gè)例子的源碼,SpringBootDemo,detectiveHLH/springbootdemo
detectiveHLH就是GroupId,而ArtifactId就是后面的項(xiàng)目名稱。
所以,這里應(yīng)該填寫如下(僅供參考)。
GroupId: com.detectivehlh.test ArtifactId: parent
test為項(xiàng)目的名稱。ArtifactId代表父類,所以就寫parent了。點(diǎn)擊Next。
設(shè)置Project Name和Project LocationProjectName就寫項(xiàng)目的名稱就好。Project Location就是項(xiàng)目在你本地的真實(shí)路徑。填好之后,點(diǎn)擊Next。
然后可以看到IDE已經(jīng)新建好了項(xiàng)目。
. ├── pom.xml ├── src │?? ├── main │?? │?? ├── java │?? │?? └── resources │?? └── test │?? └── java └── test.iml
然后右下角會(huì)彈出Maven projects need to be imported,選擇右邊的Enable Auto-Imported.然后刪除src目錄。
新建模塊本次項(xiàng)目的框架一共有四層結(jié)構(gòu),也可以說(shuō)是有四個(gè)模塊。分別是api、core、data、domain.我們從底層開(kāi)始,自底向上開(kāi)始構(gòu)建模塊。
domain存放實(shí)體類
點(diǎn)擊File -> New -> Module,在左側(cè)的列表中選擇Maven,點(diǎn)擊Next。在ArtifactId處填 domain,一路Next。
data模塊主要是做一些對(duì)數(shù)據(jù)庫(kù)的操作
點(diǎn)擊File -> New -> Module,在左側(cè)的列表中選擇Maven,點(diǎn)擊Next。在ArtifactId處填 data,一路Next。在模塊中其實(shí)是存在相互依賴關(guān)系的。
data模塊依賴domain模塊的實(shí)體。所以要在data文件的配置文件中實(shí)現(xiàn)對(duì)domain的依賴。
打開(kāi)data目錄中的pom.xml文件。在
core模塊com.detectivehlh.test domain 1.0-SNAPSHOT
后端主要的業(yè)務(wù)邏輯都會(huì)在core模塊中。
點(diǎn)擊File -> New -> Module,在左側(cè)的列表中選擇Maven,點(diǎn)擊Next。在ArtifactId處填 core,一路Next。同上,此處也需要配置依賴關(guān)系。
core模塊的中的service會(huì)依賴data模塊中的數(shù)據(jù)。
打開(kāi)core目錄下的pom.xml文件。在
api模塊com.detectivehlh.test data 1.0-SNAPSHOT
主要是存放供前端調(diào)用的接口。
點(diǎn)擊File -> New -> Module,在左側(cè)的列表中選擇Maven,點(diǎn)擊Next。在ArtifactId處填 api,一路Next。此處的api模塊依賴core中的service服務(wù)。
打開(kāi)api目錄下的pom.xml文件。在
讓項(xiàng)目"走兩步"com.detectivehlh.test core 1.0-SNAPSHOT
到此,框架算是搭建好了,下一步就是要讓項(xiàng)目"走兩步"來(lái)看看。此時(shí)的項(xiàng)目的目錄如下。
. ├── api │?? ├── api.iml │?? ├── pom.xml │?? └── src │?? ├── main │?? │?? ├── java │?? │?? └── resources │?? └── test │?? └── java ├── core │?? ├── pom.xml │?? └── src │?? ├── main │?? │?? ├── java │?? │?? └── resources │?? └── test │?? └── java ├── data │?? ├── pom.xml │?? └── src │?? ├── main │?? │?? ├── java │?? │?? └── resources │?? └── test │?? └── java ├── domain │?? ├── pom.xml │?? └── src │?? ├── main │?? │?? ├── java │?? │?? └── resources │?? └── test │?? └── java ├── pom.xml └── test.iml
定位到/api/src/main/java,在java目錄下新建package,名字為你之前定義的groupid再加上模塊名,舉個(gè)例子。我這的名字就應(yīng)該為com.detectivehlh.test.api,然后
在該包下新建名為Application的class。然后將代碼替換成如下代碼。
package com.detectivehlh.test.api; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
此時(shí)會(huì)報(bào)錯(cuò),是因?yàn)閟pringboot的各項(xiàng)依賴,都還沒(méi)有引入項(xiàng)目的dependences。打開(kāi)根目錄下的pom.xml文件,添加如下依賴。
org.springframework.boot spring-boot-starter-parent 2.0.4.RELEASE
然后打開(kāi)api目錄下的pom.xml文件。在dependencies標(biāo)簽中添加如下依賴。
org.springframework.boot spring-boot org.springframework.boot spring-boot-autoconfigure org.springframework.boot spring-boot-starter-web
此時(shí)Application中就不會(huì)報(bào)錯(cuò)了。然后就可以啟動(dòng)項(xiàng)目了。打開(kāi)Application這個(gè)類,在SpringBootApplication注解下有個(gè)綠色的啟動(dòng)鍵,點(diǎn)擊即可啟動(dòng)項(xiàng)目。之后可在右上方啟動(dòng)。
啟動(dòng)之后,打開(kāi)http://localhost:8080,如果頁(yè)面顯示
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.Tue Sep 18 19:01:11 CST 2018
There was an unexpected error (type=Not Found, status=404). No message available
那么一個(gè)簡(jiǎn)單的springboot應(yīng)用就可以啟動(dòng)成功了。
實(shí)現(xiàn)controller層在com.detectivehlh.test.api包下,新建一個(gè)名為controller的包。然后新建名為HelloController的class。
將其全部替換為如下代碼(包名根據(jù)你的項(xiàng)目命名自行修改)。
package com.detectivehlh.test.api.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "Hello, SpringBoot"; } }
重新啟動(dòng)項(xiàng)目,訪問(wèn)http://localhost:8080/hello,就可以看到頁(yè)面顯示如下信息。
Hello, SpringBoot
@RestController注解比較適用于Restful風(fēng)格的API,如果接口只關(guān)心數(shù)據(jù),不做server render,就可以使用@RestController注解。
如果接口需要返回模版頁(yè)面,則需要使用@Controller注解。
@GetMapping注解,是將HTTP Get請(qǐng)求映射到我們自定義的hello方法上。
實(shí)現(xiàn)service層 新建CoreConfiguration定位到/core/src/main/java,在java目錄下新建名為com.detectivehlh.test.core的包。然后在該包新建名為CoreConfiguration的Class。
將其全部替換為如下代碼(包名根據(jù)你的項(xiàng)目命名自行修改)。
package com.detectivehlh.test.core; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; /** * @author detectiveHLH * @date 2018/09/13 */ @ComponentScan @Configuration public class CoreConfiguration { }引入依賴
此時(shí)會(huì)報(bào)錯(cuò),同樣是因?yàn)橐蕾嚊](méi)有引入。在core的pom.xml文件中的dependencies標(biāo)簽中添加如下依賴。
org.springframework spring-context 5.0.5.RELEASE
稍等片刻,就不會(huì)有報(bào)錯(cuò)提示了。
新建Interface在com.detectivehlh.test.core包下新建一個(gè)名為service的包。在service包下新建一個(gè)Class,
名字為HelloService,類型選擇Interface。然后修改代碼如下(包名根據(jù)你的項(xiàng)目命名自行修改)。
package com.detectivehlh.test.core.service; public interface HelloService { String sayHello(); }新建實(shí)現(xiàn)類
在service目錄下新建名為impl的包。然后在impl下新建名為HelloServiceImpl的類。修改代碼如下(包名根據(jù)你的項(xiàng)目命名自行修改)。
package com.detectivehlh.test.core.service.impl; import com.detectivehlh.test.core.service.HelloService; import org.springframework.stereotype.Service; @Service public class HelloServiceImpl implements HelloService { @Override public String sayHello() { return "Hello, SpringBoot"; } }調(diào)用實(shí)現(xiàn)類
修改HelloController中的 hello 方法的代碼如下(包名根據(jù)你的項(xiàng)目命名自行修改)。
package com.detectivehlh.test.api.controller; import com.detectivehlh.test.core.service.HelloService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * RestController * 定義為Restful風(fēng)格的API控制器 */ @RestController public class HelloController { @Autowired private HelloService helloService; @GetMapping("/hello") public String hello() { return helloService.sayHello(); } }
此時(shí)helloService會(huì)報(bào)錯(cuò),這是因?yàn)槲覀儧](méi)有將HelloService這個(gè)添加到Bean容器中來(lái)。修改Application類代碼如下(包名根據(jù)你的項(xiàng)目命名自行修改)。
package com.detectivehlh.test.api; import com.detectivehlh.test.core.CoreConfiguration; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Import; @SpringBootApplication @Import(CoreConfiguration.class) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
此時(shí)再訪問(wèn)http://localhost:8080/hello,就可以看到如下正常的輸出了。
Hello, SpringBoot打通數(shù)據(jù)庫(kù)
實(shí)現(xiàn)了簡(jiǎn)單的service,下一步就是要連接數(shù)據(jù)庫(kù)。假設(shè)現(xiàn)在在你本地已經(jīng)有了mysql服務(wù)。有名為test的數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)下有名為user_role的表。表結(jié)構(gòu)如下。
數(shù)據(jù)庫(kù)表名和表數(shù)據(jù)column_name | column_value |
---|---|
id | 用戶id |
name | 用戶名 |
并且有了數(shù)據(jù)
column_name | column_value |
---|---|
id | name |
1 | detectiveHLH |
定位到/domain/src/main/java,在java目錄下新建名為com.detectivehlh.test.domain的包。在該包下新建entity包。
在entity下新建名為BaseEntity的抽象類。修改代碼如下。
package com.detectivehlh.test.domain.entity; public abstract class BaseEntity { private long createdAt; private String createdBy; private long updatedAt; private String updatedBy; public long getCreatedAt() { return createdAt; } public void setCreatedAt(long createdAt) { this.createdAt = createdAt; } public String getCreatedBy() { return createdBy; } public void setCreatedBy(String createdBy) { this.createdBy = createdBy; } public long getUpdatedAt() { return updatedAt; } public void setUpdatedAt(long updatedAt) { this.updatedAt = updatedAt; } public String getUpdatedBy() { return updatedBy; } public void setUpdatedBy(String updatedBy) { this.updatedBy = updatedBy; } }
在entity下新建名為UserRole的類。代碼如下。
package com.detectivehlh.test.domain.entity; public class UserRole extends BaseEntity { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }新建dao層
實(shí)現(xiàn)與數(shù)據(jù)庫(kù)交互的mapper。
定位到/data/src/main/java,在java目錄下新建名為com.detectivehlh.test.data的包。在該包下新建名為dao的包和名為
DataConfiguration的類。然后在dao包下新建名為UserRoleMapper的類。DataConfiguration代碼如下。
package com.detectivehlh.test.data; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; /** * @author duzhengkang * @date 2018/6/25 */ @ComponentScan @Configuration @MapperScan("com.detectivehlh.test.data.dao") public class DataConfiguration { }
將UserRoleMapper的代碼修改為如下。
package com.detectivehlh.test.data.dao; import com.detectivehlh.test.domain.entity.UserRole; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.List; @Mapper @Repository public interface UserRoleMapper { /** * 查詢所有的用戶角色 * @return */ Listall(); }
此時(shí)代碼會(huì)報(bào)錯(cuò),同樣的依賴原因。打開(kāi)根目錄下的pom.xml文件。添加如下依賴。
com.alibaba druid 1.1.10 com.github.pagehelper pagehelper-spring-boot-starter 1.2.5 mysql mysql-connector-java 6.0.6 org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2
添加如上依賴,稍等片刻,就不會(huì)報(bào)錯(cuò)了。但是此時(shí)運(yùn)行項(xiàng)目依舊會(huì)報(bào)錯(cuò)。是因?yàn)槲覀円肓薽ybatis但是卻沒(méi)有配置文件。以及沒(méi)有將mapper注入到容器中去。
修改Application中的代碼如下。
package com.detectivehlh.test.api; import com.detectivehlh.test.core.CoreConfiguration; import com.detectivehlh.test.data.DataConfiguration; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Import; @SpringBootApplication @Import({CoreConfiguration.class, DataConfiguration.class}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
mapper就被注入到容器中去了。下一步需要添加配置文件。定位到/api/src/main/resources,新建application.yaml文件。
修改代碼如下。
spring: application: name: test # 數(shù)據(jù)庫(kù)配置 datasource: driver-class-name: com.mysql.cj.jdbc.Driver username: root password: 9687Luohongwei url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true # mapper文件配置 mybatis: mapper-locations: classpath:mapper/*.xml configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
修改完畢后,啟動(dòng)項(xiàng)目,訪問(wèn)http://localhost:8080/hello,就可以看到正常輸出了。
實(shí)現(xiàn)mapper定位到/data/src/main/resources,新建名為mapper的包。在mapper包下新建名為UserRoleMapper的xml文件。修改代碼如下。
id, name user_role
一定注意namespace是否準(zhǔn)確。
調(diào)用mapper修改實(shí)現(xiàn)類HelloServiceImpl代碼如下。
package com.detectivehlh.springbootdemo.core.service.impl; import com.detectivehlh.springbootdemo.core.service.HelloService; import com.detectivehlh.springbootdemo.data.dao.UserRoleMapper; import com.detectivehlh.springbootdemo.domain.entity.UserRole; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class HelloServiceImpl implements HelloService { @Autowired private UserRoleMapper userRoleMapper; @Override public ListcreateToken(String key) { List data = userRoleMapper.all(); return data; } }
此時(shí)會(huì)報(bào)錯(cuò),是因?yàn)閷?shí)現(xiàn)類中的返回類型已經(jīng)變成了List
package com.detectivehlh.test.core.service; import com.detectivehlh.test.domain.entity.UserRole; import java.util.List; public interface HelloService { ListsayHello(); }
讓我們回到controller中,我們發(fā)現(xiàn)在HelloController中也有報(bào)錯(cuò)。這個(gè)錯(cuò)誤同樣也是因?yàn)榉祷仡愋筒灰恢碌脑颍薷拇a如下。
package com.detectivehlh.test.api.controller; import com.detectivehlh.test.core.service.HelloService; import com.detectivehlh.test.domain.entity.UserRole; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * RestController * 定義為Restful風(fēng)格的API控制器 */ @RestController public class HelloController { @Autowired private HelloService helloService; @GetMapping("/hello") public Listhello() { return helloService.sayHello(); } }
然后啟動(dòng)項(xiàng)目,訪問(wèn)http://localhost:8080/hello。就可以看到,接口返回了user_role表中的所有數(shù)據(jù)。
[ { "createdAt": 0, "createdBy": null, "updatedAt": 0, "updatedBy": null, "id": 1, "name": "Tom" } ]
此時(shí)雖然能夠正常訪問(wèn),但是會(huì)在控制臺(tái)報(bào)如下警告。
Tue Sep 18 20:40:22 CST 2018 WARN: Establishing SSL connection without server"s identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn"t set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to "false". You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
在com.detectivehlh.test.api包下新建config包,在config包中新建DbConfig文件。代碼如下。
package com.detectivehlh.test.api.config; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.sql.DataSource; /** * DbConfig * * @author detectiveHLH * @date 2018-07-27 10:35 **/ @Configuration @ConfigurationProperties @EnableTransactionManagement public class DbConfig { @Bean @ConfigurationProperties("spring.datasource") public DataSource dataSource(){ DruidDataSource dataSource = new DruidDataSource(); return dataSource; } @Bean public JdbcTemplate jdbcTemplate(){ return new JdbcTemplate(dataSource()); } @Bean public PlatformTransactionManager transactionManager(){ DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource()); return dataSourceTransactionManager; } }
重啟啟動(dòng)項(xiàng)目,訪問(wèn)接口時(shí)就不會(huì)有警告了。
最后的代碼目錄結(jié)構(gòu)如下。
. ├── api │?? ├── api.iml │?? ├── pom.xml │?? ├── src │?? │?? ├── main │?? │?? │?? ├── java │?? │?? │?? │?? └── com │?? │?? │?? │?? └── detectivehlh │?? │?? │?? │?? └── test │?? │?? │?? │?? └── api │?? │?? │?? │?? ├── Application.java │?? │?? │?? │?? ├── config │?? │?? │?? │?? │?? └── DbConfig.java │?? │?? │?? │?? └── controller │?? │?? │?? │?? └── HelloController.java │?? │?? │?? └── resources │?? │?? │?? └── application.yml │?? │?? └── test │?? │?? └── java │?? └── target │?? ├── classes │?? │?? ├── application.yml │?? │?? └── com │?? │?? └── detectivehlh │?? │?? └── test │?? │?? └── api │?? │?? ├── Application.class │?? │?? ├── config │?? │?? │?? └── DbConfig.class │?? │?? └── controller │?? │?? └── HelloController.class │?? └── generated-sources │?? └── annotations ├── core │?? ├── pom.xml │?? ├── src │?? │?? ├── main │?? │?? │?? ├── java │?? │?? │?? │?? └── com │?? │?? │?? │?? └── detectivehlh │?? │?? │?? │?? └── test │?? │?? │?? │?? └── core │?? │?? │?? │?? ├── CoreConfiguration.java │?? │?? │?? │?? └── service │?? │?? │?? │?? ├── HelloService.java │?? │?? │?? │?? └── impl │?? │?? │?? │?? └── HelloServiceImpl.java │?? │?? │?? └── resources │?? │?? └── test │?? │?? └── java │?? └── target │?? ├── classes │?? │?? └── com │?? │?? └── detectivehlh │?? │?? └── test │?? │?? └── core │?? │?? ├── CoreConfiguration.class │?? │?? └── service │?? │?? ├── HelloService.class │?? │?? └── impl │?? │?? └── HelloServiceImpl.class │?? └── generated-sources │?? └── annotations ├── data │?? ├── pom.xml │?? ├── src │?? │?? ├── main │?? │?? │?? ├── java │?? │?? │?? │?? └── com │?? │?? │?? │?? └── detectivehlh │?? │?? │?? │?? └── test │?? │?? │?? │?? └── data │?? │?? │?? │?? ├── DataConfiguration.java │?? │?? │?? │?? └── dao │?? │?? │?? │?? └── UserRoleMapper.java │?? │?? │?? └── resources │?? │?? │?? └── mapper │?? │?? │?? └── UserRoleMapper.xml │?? │?? └── test │?? │?? └── java │?? └── target │?? ├── classes │?? │?? ├── com │?? │?? │?? └── detectivehlh │?? │?? │?? └── test │?? │?? │?? └── data │?? │?? │?? ├── DataConfiguration.class │?? │?? │?? └── dao │?? │?? │?? └── UserRoleMapper.class │?? │?? └── mapper │?? │?? └── UserRoleMapper.xml │?? └── generated-sources │?? └── annotations ├── domain │?? ├── pom.xml │?? ├── src │?? │?? ├── main │?? │?? │?? ├── java │?? │?? │?? │?? └── com │?? │?? │?? │?? └── detectivehlh │?? │?? │?? │?? └── test │?? │?? │?? │?? └── domain │?? │?? │?? │?? └── entity │?? │?? │?? │?? ├── BaseEntity.java │?? │?? │?? │?? └── UserRole.java │?? │?? │?? └── resources │?? │?? └── test │?? │?? └── java │?? └── target │?? ├── classes │?? │?? └── com │?? │?? └── detectivehlh │?? │?? └── test │?? │?? └── domain │?? │?? └── entity │?? │?? ├── BaseEntity.class │?? │?? └── UserRole.class │?? └── generated-sources │?? └── annotations ├── pom.xml └── test.iml寫在后面
寫的比較詳細(xì),如果有不對(duì)的地方,大佬盡管懟。本項(xiàng)目的源碼在 這里
個(gè)人博客在 這里
Github在 這里,歡迎star或follow。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77190.html
摘要:有沒(méi)有辦法實(shí)現(xiàn)就局部刷新呢當(dāng)然是有第十步執(zhí)行為了實(shí)現(xiàn)局部熱加載,我們需要添加插件。 前言 用了3個(gè)多月的vue自認(rèn)為已經(jīng)是一名合格的vue框架api搬運(yùn)工,對(duì)于vue的api使用到達(dá)了一定瓶頸,無(wú)奈水平有限,每每深入底層觀賞源碼時(shí)候都迷失了自己。 遂決定再找個(gè)框架學(xué)習(xí)學(xué)習(xí)看看能否突破思維局限,加上本人早已對(duì)React、RN技術(shù)垂涎已久,于是決定找找教程來(lái)學(xué)習(xí)。無(wú)奈第一步就卡在了環(huán)境搭...
摘要:本系列是一個(gè)教程,下面貼下目錄手把手教你從零寫一個(gè)簡(jiǎn)單的手把手教你從零寫一個(gè)簡(jiǎn)單的模板篇今天給大家?guī)?lái)的是實(shí)現(xiàn)一個(gè)簡(jiǎn)單的類似一樣的前端框架,框架現(xiàn)在應(yīng)該算是非常主流的前端數(shù)據(jù)驅(qū)動(dòng)框架,今天我們來(lái)從零開(kāi)始寫一個(gè)非常簡(jiǎn)單的框架,主要是讓大家 本系列是一個(gè)教程,下面貼下目錄~1.手把手教你從零寫一個(gè)簡(jiǎn)單的 VUE2.手把手教你從零寫一個(gè)簡(jiǎn)單的 VUE--模板篇 今天給大家?guī)?lái)的是實(shí)現(xiàn)一個(gè)簡(jiǎn)單...
摘要:本篇博客通過(guò)小強(qiáng)開(kāi)飯店的通俗易懂的故事,帶你了解后端服務(wù)是如果從單體應(yīng)用演變到微服務(wù)的。小強(qiáng)開(kāi)飯店有一天,小強(qiáng)為了早日奔赴小康生活,打算開(kāi)一個(gè)飯店來(lái)幫他快速的實(shí)現(xiàn)這個(gè)目標(biāo)。于是小強(qiáng)開(kāi)始給服務(wù)盡量的無(wú)狀態(tài)化,然后在一個(gè)服務(wù)器上啟動(dòng)了幾個(gè)實(shí)例。 本篇博客通過(guò)小強(qiáng)開(kāi)飯店的通俗易懂的故事,帶你了解后端服務(wù)是如果從單體應(yīng)用演變到微服務(wù)的。如果有說(shuō)的不對(duì)的地方,歡迎各位大佬強(qiáng)勢(shì)懟。 小強(qiáng)開(kāi)飯店 有...
閱讀 3057·2021-11-22 15:29
閱讀 1741·2021-10-12 10:11
閱讀 1776·2021-09-04 16:45
閱讀 2256·2021-08-25 09:39
閱讀 2801·2021-08-18 10:20
閱讀 2526·2021-08-11 11:17
閱讀 456·2019-08-30 12:49
閱讀 3318·2019-08-30 12:49