教你十分鐘構建好 SpringBoot + SSM 框架

Howie_Y發表於2018-07-22

目前最主流的 java web 框架應該是 SSM,而 SSM 框架由於更輕便與靈活目前受到了許多人的青睞。而 SpringBoot 的輕量化,簡化專案配置, 沒有 XML 配置要求等優點現在也得到了大眾的青睞

而本文,我將教大家如何在 intellij idea 中快速構建好一個 Maven + Spring + SpringMVC + MyBatis + SpringBoot 的框架,做到了足夠精簡,讓你可以立刻開始你的 web 專案

附上這個簡單的框架構建的 github 地址 SSM-SpringBoot

一. 建立專案

選擇 Spring Initiallizr

image

新增最基本的幾個依賴 Web,MySQL,MyBatis,其他需求可以後續再新增 ; 資料庫選擇了 MySQL

教你十分鐘構建好 SpringBoot + SSM 框架

二. 配置資料來源

資料來源中儲存了所有建立資料庫連線的資訊

1. 配置 IDEA 資料來源

輸入地址,埠,使用者名稱,密碼等等完成設定

教你十分鐘構建好 SpringBoot + SSM 框架

2. 配置 spring 資料來源

application.properties 檔案新增:

spring.datasource.url = jdbc:mysql://xx.xx.xx.x:xxx/xxx?characterEncoding=utf8&allowMultiQueries=true&useSSL=false
spring.datasource.username = root
spring.datasource.password = 123456
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,MySQL 資料庫為 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.swit.dao.MyMapper">

</mapper>
複製程式碼

2. application.properties

  • Mybatis 配置,指定了 mybatis 基礎配置檔案和實體類對映檔案的地址
mybatis.mapperLocations = classpath:mapper/**/*.xml
mybatis.typeAliasesPackage = com.swit.model
複製程式碼
  • 配置 typeAliasesPackage 可以使得 com.swit.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>
複製程式碼
  1. 你很有可能還需要做個跨域處理
@Component
public class CorsFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request = (HttpServletRequest) req;
        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
複製程式碼

你的關注是我寫部落格最大的動力~

猜你喜歡 :

相關文章