目前最主流的 java web 框架应该是 SSM,而 SSM 框架由于更轻便与灵活目前受到了许多人的青睐。而 SpringBoot 的轻量化,简化项目配置, 没有 XML 配置要求等优点现在也得到了大众的青睐
而本文,我将教大家如何在 intellij idea 中快速构建好一个 Maven + Spring + SpringMVC + MyBatis + SpringBoot 的框架, 做到了足够精简 ,让你可以立刻开始你的 web 项目
附上这个简单的框架构建的 github 地址 SSM-SpringBoot
选择 Spring Initiallizr
添加最基本的几个依赖 Web,MySQL,MyBatis,其他需求可以后续再添加 ; 数据库选择了 MySQL
数据源中存储了所有建立数据库连接的信息
输入地址,端口,用户名,密码等等完成设置
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 复制代码
jdbc:mysql://Host(主机名或 IP 地址):Post(端口)/Database(数据库名称)
,其中 allowMultiQueries = true : 允许多条 sql 同时执行(分号分隔);useSSL : 是否进行 SSL 连接,根据实际情况选择 oracle.jdbc.driver.OracleDriver
,MySQL 数据库为 com.mysql.jdbc.Driver
整个项目的构建最主要的部分就是 springboot 和 mybatis 的整合,而 springboot 也提供了十分方便的方式。
<?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> 复制代码
mybatis.mapperLocations = classpath:mapper/**/*.xml mybatis.typeAliasesPackage = com.swit.model 复制代码
<select id="getUser" parameterType="int" resultType="User"> </select> 复制代码
如没有配置 typeAliasesPackage ,则需要 resultType="com.swit.model.User"
mybatis.config-locations=classpath:mybatis/mybatis-config.xml 复制代码
以下两种方法二选其一
value 为 mapper 类所在的包(注意这里是包的路径,而不是类的路径!)
@MapperScan(value = "com.swit.dao") 复制代码
另外, @MapperScan 注解面向的是接口类,只要是加了注解的接口类都需要进行通过该注解来扫描
@Mapper @Repository public interface MyMapper { } 复制代码
如果你想把自己的 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> 复制代码
@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() { } } 复制代码
redis 也是我们项目中经常用到的 NoSQL,经常用来做做缓存什么的。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 复制代码
# 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 复制代码
针对监控而生的 DB 连接池
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.20</version> </dependency> 复制代码
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 复制代码