Spring Boot可以更為方便地搭建一個Web系統,之后服務器上部署也較為方便
此篇有些細節未提及,我新寫了一篇Spring框架學習筆記(8)——spring boot+mybatis plus+mysql項目環境搭建來進行補充,可以兩篇博文進行參考
創建Spring boot項目
1. 使用IDEA創建項目
2. 修改groupid和artifact
3.勾選相關庫
這里,可以先不選mybatis和mysql,先搭建一個比較簡單的環境,
大概明白流程后,之后就可以根據自己的需求來勾選相關的庫
4. 一路next,自動IDEA就會自動下載依賴的jar包
5. 運行
之后運行項目(Application類),打開http://localhost:8080
就會出現下面的白板頁面,說明已配置成功
項目結構說明及使用
項目結構說明
我們可以看見項目中是這樣的結構,Spring boot內置了tomcat服務器,所以,我們可以直接通過application來啟動
SpringbootdemoApplication
package com.wan.springbootdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootdemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootdemoApplication.class, args);
}
}
可以看到SpringbootdemoApplication中的代碼比較簡單,使用了一個注解SpringBootApplication
,用來標注當前類是Spring boot的入口類,之后通過SpringApplication.run
啟動
SpringBootApplication注解中也是內置了幾個spring的注解,打開其中可以看到
@SpringBootConfiguration 表示該類是一個配置類
@EnableAutoConfiguration 啟用自動配置,例如添加了spring-boot-starter-web依賴,會自動添加Tomcat和SpringMVC的依賴,SpringBoot會對Tomcat和SpringMVC進行自動配置.
@ComponentScan 能掃描當前包及其子包中的類 即com.lanqiao.springboot.tutorials包及其子包下的所有的組件類。
spring boot使用一個封裝的注解,把之前我們得使用注解和配置文件去配置spring的步驟都省去了,springboot不僅讓我們的編碼是輕量級的,而且也把我們的配置變成了輕量級
控制器使用
之前使用springmvc框架,我們寫一個controller,得在配置文件中開啟自動掃描,然后controller類中使用controller注解進行標明,而使用spring boot則不需要這么繁瑣,只需要標注上一個@RestController
注解即可
注解RestController包含了Controller和ResponseBody,返回的實體類或者List都會轉為json數據
這里可以使用spring boot中的注解,也可以使用spring mvc的注解RequestMapping
、ResponseBody
等
package com.wan.springbootdemo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author StarsOne
* @date Create in 2019/10/17 0017 18:24
* @description
*/
@RestController
public class UserController {
@RequestMapping("user/data")
public String getData() {
return "this is returning data";
}
}
然后通過訪問localhost:8080/user/data
就可以看到返回的數據
修改context項目地址
上面的項目接口中,我們可以看到一個名為application.properties
的文件,里面可以用來進行一些設置,如context上下文,port端口號
補充:spring boot中除了使用properties這種文件進行配置,還可以使用yml文件
我在其中添加了下面的代碼,就是用來設置context
server.servlet.context-path=/springbootdemo
之后上面的controller的訪問地址就會變為了localhost:8080/springbootdemo/user/data
去除spring boot啟動圖標
啟動的時候,命令行會出現一個Spring Boot的頁面
不知道為什么,我這里啟動的圖標怎么看都不像Spring Boot。。
我們想要去除這個圖標,可以修改application中的啟動方式來達到目的
package com.wan.springbootdemo;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootdemoApplication {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(SpringbootdemoApplication.class);
// 去除啟動控制台Spring Boot的圖標
springApplication.setBannerMode(Banner.Mode.OFF);
springApplication.run(args);
}
}
熱部署
想要實現修改文件,而不想要重啟application,可以進行熱部署設置,設置很簡單,只需要添加下面的這個依賴即可(之前創建項目的時候其實已經添加了此依賴)
<!-- 自動加載SpringBoot的更改 無需重啟引導類 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
可能還需要進行下面的運行配置:
整合MyBatis
1.添加依賴
<!-- 使用mybatis連接池,之后需要配置驅動-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis驅動-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
2.創表、創實體類和mapper
創表和創建實體類,還有創建對應的mapper.xml和mapper.java文件
這里需要注意,mapper接口文件需要加上注解@Repository
,需要spring進行管理,之后我們需要一個對應的Service.java,包含着mapper接口,使用spring把mapper自動裝載
package com.wan.mofang.service;
import com.wan.mofang.mapper.UserMapper;
import com.wan.mofang.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author StarsOne
* @date Create in 2019/10/28 0028 22:46
* @description
*/
@Service
public class UserService {
@Autowired
UserMapper userMapper;//自動裝載的對象
public List<User> selectAll(User user) {
return userMapper.selectAll(user);
}
}
UserController.java
package com.wan.mofang.controller;
import com.wan.mofang.model.User;
import com.wan.mofang.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author StarsOne
* @date Create in 2019/10/28 0028 22:54
* @description
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;//自動裝載
@RequestMapping("selectAll")
public List<User> selectAll(User user) {
return userService.selectAll(user);
}
}
PS:這里,需要注意的,如果是傳入一個實體類,url傳入的參數名要與User中的成員變量名一致,如果是String類型或者是Int類型,則url傳入的參數則與參數名對應
如有下面的一個controller里面方法:
@RequestMapping("selectAll")
public List<User> selectAll(String username) {
return userService.selectAll(user);
}
傳入的url為url=xx?username=xx
3.修改配置文件
這里使用yml來配置,當然,使用properties文件也可以,根據實際情況,進行修改(修改application-dev.yml)
application.yml
spring:
profiles:
active: dev
application-dev.yml
server:
port: 端口號,默認不寫就是8080
servlet:
context-path: 項目上下文
spring:
datasource:
username: 數據庫用戶名
password: 數據庫密碼
url: 數據庫地址
driver-class-name: 直接打mysql會有提示
mybatis:
mapper-locations: classpath:mapping/*Mapper.xml
type-aliases-package: 好像配置了別名沒有啟動作用
#showSql
logging:
level:
com:
example:
mapper : debug
PS:這里yml文件需要注意格式,冒號后需要一個空格
4.開啟自動掃描
在Spring Boot啟動類使用注解MapperScan
,參數為mapper.java文件所在的包,就會自動掃描並生成mapper的bean對象
package com.wan.mofang;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.wan.mofang.mapper")
@SpringBootApplication
public class MofangApplication {
public static void main(String[] args) {
SpringApplication.run(MofangApplication.class, args);
}
}
簡單來說,就是在yml配置文件中配置Mapper.xml文件所在的目錄(resources),在入口類Application中配置mapper.java文件所在的目錄(包名)
Junit測試
直接創建一個入口類的對應的Test,之后使用上注解SpringBootTest
,指定入口類,之后,需要的文件使用注解Autowired
進行自動裝載,
@SpringBootTest(classes = MofangApplication.class)
class MofangApplicationTests {
@Autowired
UserService userService;
@Test
void testSelectALl(){
List<User> user = userService.selectALl();
...
}
}