利用IDEA構建springboot應用-構建好SpringBoot + SSM 框架
一. 建立專案
選擇 Spring Initiallizr
新增最基本的幾個依賴 Web,MySQL,MyBatis,其他需求可以後續再新增 ; 資料庫選擇了 MySQL
二. 配置資料來源
資料來源中儲存了所有建立資料庫連線的資訊
1. 配置 IDEA 資料來源
輸入地址,埠,使用者名稱,密碼等等完成設定
2. 配置 spring 資料來源
application.properties 檔案新增:
spring.datasource.url = jdbc:mysql://localhost:3306/mysql?characterEncoding=utf8&allowMultiQueries=true&useSSL=false spring.datasource.username = root spring.datasource.password = password spring.datasource.driver-class-name = com.mysql.jdbc.Driver
-
url : 資料來源 url ,格式為
jdbc:mysql://Host(主機名或 IP 地址):Post(埠)/Database(資料庫名稱)
,其中 allowMultiQueries = true : 允許多條 sql 同時執行(分號分隔);useSSL : 是否進行 SSL 連線,根據實際情況選擇 -
username : 使用者名稱
-
password : 密碼
-
driver-class-name : 驅動名,不同的資料庫有不同的 Drivername,如 oracle 資料庫的
oracle.jdbc.driver.OracleDriver
com.mysql.jdbc.Driver
三. Spring 註解
-
使用 @Controller / @RestController 註解標註一個控制器,表明這個類是作為控制器的角色而存在的
-
使用 @Service 註解標註一個業務層類
-
使用 @Repository 註解標註一個持久層 mapper 介面
-
使用 @Component 註解標註其他元件
-
使用 @Configuration 註解標註配置類
四. MyBatis
整個專案的構建最主要的部分就是 springboot 和 mybatis 的整合,而springboot 也提供了十分方便的方式。
1. xml 檔案
-
宣告為對映檔案
-
namespace : 指該對映檔案對應的對映介面 ; 一般來說,一個 XML 對映配置檔案對應一個名稱空間,而這個名稱空間又對應一個介面
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.ssm.dao.MyMapper"> </mapper>
2. application.properties
-
Mybatis 配置,指定了 mybatis 基礎配置檔案和實體類對映檔案的地址
# Mybatis 配置,指定了 mybatis 基礎配置檔案和實體類對映檔案的地址 mybatis.mapperLocations=classpath:mapper/**/*.xml mybatis.typeAliasesPackage=com.example.ssm.model
-
配置 typeAliasesPackage 可以使得com.example.ssm.model包內的實體類可以在對映檔案中使用別名,如:
<select id="getUser" parameterType="int" resultType="User"> </select>
如沒有配置 typeAliasesPackage ,則需要 resultType="com.swit.model.User"
如果要對 MyBatis 通過 xml 檔案進行另外的配置,則新增檔案路徑:
mybatis.config-locations=classpath:mybatis/mybatis-config.xml
3. 新增對 mapper 類的掃描
以下兩種方法二選其一
(1)可以選擇在啟動類新增 @MapperScan
value 為 mapper 類所在的包(注意這裡是包的路徑,而不是類的路徑!)
@MapperScan(value = "com.swit.dao")
另外, @MapperScan 註解面向的是介面類,只要是加了註解的介面類都需要進行通過該註解來掃描
(2)可以在每個 mapper 類上新增 @mapper 註解
@Mapper @Repository public interface MyMapper { }
到目前為止,你已經完成了你的專案的構建,下面我還會介紹些別的東西。
五. 其他要注意的點
1. @SpringBootApplication
-
這個註解位於啟動類
-
@SpringBootApplication 等價於以預設屬性使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan, 所以啟動類無需再新增這三個註解
-
@Configuration :標註一個類為配置類。
-
@EnableAutoConfiguration :開啟自動配置。
-
@ComponentScan :自動收集所有的 Spring 元件
2. 部署伺服器
如果你想把自己的 SpringBoot 專案部署到阿里雲,騰訊雲等伺服器,那麼你還需要加點東西。
1. 如果需要通過打包的方式在web容器中進行部署,則需要繼承 SpringBootServletInitializer 覆蓋configure(SpringApplicationBuilder)方法
public class SpringbootApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(SpringbootApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { // 注意這裡要指向原先用main方法執行的Application啟動類 return builder.sources(SpringbootApplication.class); } }
2.pom 檔案新增打包外掛
<build> <!--打包後的專案名,url 字首--> <finalName>projectName</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <!--設定編譯時使用的 JDK 版本--> <source>1.8</source> <!--設定執行時使用的 JDK 版本--> <target>1.8</target> <!--設定為 true 則跳過測試--> <skip>true</skip> </configuration> </plugin> </plugins> </build>
3. 你很有可能還需要做個跨域處理
@Component public class CorsFilter implements Filter { /** * json web token 在請求頭的名字 */ private String tokenHeader = "X_Auth_Token"; @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; HttpServletRequest request = (HttpServletRequest) req; String token = request.getHeader("X_Auth_Token"); System.out.println(token + "token"); String Origin = request.getHeader("Origin"); System.out.println("Origin:" + Origin); System.out.println("tokenHeader:" + this.tokenHeader); Logger logger = Logger.getLogger(this.getClass()); logger.info("Origin: " + Origin); response.setHeader("Access-Control-Allow-Origin", Origin); response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, " + this.tokenHeader); response.setHeader("Access-Control-Allow-Credentials", "true"); chain.doFilter(req, res); } @Override public void init(FilterConfig filterConfig) { } @Override public void destroy() { } }
六. 整合其他元件
1. redis
redis 也是我們專案中經常用到的 NoSQL,經常用來做做快取什麼的。
依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
application.properties
# Redis資料庫索引(預設為0) spring.redis.database=0 # Redis伺服器地址 spring.redis.host=127.0.0.1 # Redis伺服器連線埠 spring.redis.port=6379 # Redis伺服器連線密碼(預設為空) spring.redis.password=123456 # 連線池最大連線數(使用負值表示沒有限制) spring.redis.pool.max-active=15 # 連線池最大阻塞等待時間(使用負值表示沒有限制) spring.redis.pool.max-wait=-1 # 連線池中的最大空閒連線 spring.redis.pool.max-idle=15 # 連線池中的最小空閒連線 spring.redis.pool.min-idle=0 # 連線超時時間(毫秒) spring.redis.timeout=0
2. Druid 資料來源
針對監控而生的 DB 連線池
依賴
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.20</version> </dependency>
application.properties
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.filters=stat spring.datasource.maxActive=20 spring.datasource.initialSize=5 spring.datasource.maxWait=60000 spring.datasource.minIdle=1 spring.datasource.timeBetweenEvictionRunsMillis=60000 spring.datasource.minEvictableIdleTimeMillis=300000 spring.datasource.validationQuery=select 'x' spring.datasource.testWhileIdle=true spring.datasource.testOnBorrow=false spring.datasource.testOnReturn=false spring.datasource.poolPreparedStatements=true spring.datasource.maxOpenPreparedStatements=20