带你十分钟快速构建好 SpringBoot + SSM 框架
目前最主流的 java web 框架应该是 SSM,而 SSM 框架由于更轻便与灵活目前受到了许多人的青睐。而 SpringBoot 的轻量化,简化项目配置, 没有 XML 配置要求等优点现在也得到了大众的青睐
而本文,我将教大家如何在 intellij idea 中快速构建好一个 Maven + Spring + SpringMVC + MyBatis + SpringBoot 的框架,做到了足够精简,让你可以立刻开始你的 web 项目
一. 创建项目
选择 Spring Initiallizr
添加最基本的几个依赖 Web,MySQL,MyBatis,其他需求可以后续再添加 ; 数据库选择了 MySQL
二. 配置数据源
数据源中存储了所有建立数据库连接的信息
1. 配置 IDEA 数据源
输入地址,端口,用户名,密码等等完成设置
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>
- 你很有可能还需要做个跨域处理
@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
带你十分钟快速构建好 SpringBoot + SSM 框架的更多相关文章
- 教你十分钟构建好 SpringBoot + SSM 框架
目前最主流的 java web 框架应该是 SSM,而 SSM 框架由于更轻便与灵活目前受到了许多人的青睐.而 SpringBoot 的轻量化,简化项目配置, 没有 XML 配置要求等优点现在也得到了 ...
- 教你构建好 SpringBoot + SSM 框架
来源:Howie_Y https://juejin.im/post/5b53f677f265da0f8f203914 目前最主流的 java web 框架应该是 SSM,而 SSM 框架由于更轻便与灵 ...
- 【容器云】十分钟快速构建 Influxdb+cadvisor+grafana 监控
本文作者:七牛云布道师@陈爱珍,DBAPlus社群联合发起人.前新炬技术专家.多年企业级系统的应用运维及分布式系统实战经验.现专注于容器.微服务及DevOps落地的研究与实践. 安装过程 三个都直接下 ...
- 利用IDEA构建springboot应用-构建好SpringBoot + SSM 框架
一. 创建项目 选择 Spring Initiallizr 添加最基本的几个依赖 Web,MySQL,MyBatis,其他需求可以后续再添加 ; 数据库选择了 MySQL 二. 配置数据源 数据源中存 ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(四)
本系列文章立志于从一个已经习得一门编程语言的基础之上,全面介绍Python的相关开发过程和相关经验总结.本篇文章主要是基于上一篇的程序员带你十天快速入门Python,玩转电脑软件开发(三)的基础之上, ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(三)
声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 . 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群5 ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(二)
关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(一)
关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...
- springboot:快速构建一个springboot项目
前言: springboot作为springcloud的基础,springboot的热度一直很高,所以就有了这个springboot系列,花些时间来了解和学习为自己做技术储备,以备不时之需[手动滑稽] ...
随机推荐
- jquery validate 详解一
原文:http://blog.sina.com.cn/s/blog_608475eb0100h3h1.html jQuery校验官网地址:http://bassistance.de/jquery-pl ...
- Ruby页面,循环赋值方法(类似java EL表达式赋值)
------------前台代码--------------- <% @form_hash.each_with_index do |f,index| %> <% item = f[: ...
- Hadoop完全分布式安装
一.软件版本 Hadoop版本号:hadoop-2.6.0.tar: VMWare版本号:VMware-workstation-full-11.0.0-2305329 Ubuntu版本号:ubuntu ...
- 理解self与this
刚开始学习Python的类写法的时候觉得很是麻烦,为什么定义时需要而调用时又不需要,为什么不能内部简化从而减少我们敲击键盘的次数?你看完这篇文章后就会明白所有的疑问. self代表类的实例,而非类. ...
- windows sqlplus客户端连接oralce数据库中文显示问题
运行环境 服务器:centos6.8 服务器oracle版本:oracle 11g R2 64位,字符集是ZHS32utf8. 客户端:navicat 12x64 windows8.1x64 问题分 ...
- HDU 1026(迷宫 BFS+打印)
题意是要穿过一个迷宫并且将每一步打印出来. 用宽搜的方法找到路径,在 vis 中存一下方向,只是这题被看到的一种不太对的运算符重载坑了很久...... 代码如下: #include <bits/ ...
- 高性能的代理服务-Envoy
Envoy最初建于Lyft,是一个高性能的代理服务,为服务网格提供了基础. 它与应用程序并行运行,通过以平台无关的方式提供通用功能来抽象网络. 当基础架构中的所有服务流量都通过Envoy网格时,通过一 ...
- 四十、Linux 线程——互斥锁和读写锁
40.1 互斥锁 40.1.1 介绍 互斥锁(mutex)是一种简单的加锁的方法来控制对共享资源的访问. 在同一时刻只能有一个线程掌握某个互斥锁,拥有上锁状态的线程能够对共享资源进行访问. 若其他线程 ...
- PPT制作
0.[整体风格]整体风格统一 界面排版 0.1 字体大小: 0.2 字体颜色: 0.3 字体的种类统一(不是指只取一种字体)) 1.[表达]结构化表达: 2.[取色]取色风格统一: 技巧:主色不超过三 ...
- luogu P4148 简单题
传送门 这题真简单,直接把\(CDQ\)给ban掉了 其实数据范围比较小可以直接二维树状数组,我们看数据范围,发现点的个数比N还小,可以考虑用一些奇怪的数据结构 说的就是你,\(KD tree\) \ ...