教你十分钟构建好 SpringBoot + SSM 框架

目前最主流的 java web 框架应该是 SSM,而 SSM 框架由于更轻便与灵活目前受到了许多人的青睐。而 SpringBoot 的轻量化,简化项目配置, 没有 XML 配置要求等优点现在也得到了大众的青睐。

而本文,我将教大家如何在 intellij idea 中快速构建好一个 Maven + Spring + SpringMVC + MyBatis + SpringBoot 的框架,做到了足够精简,让你可以立刻开始你的 web 项目。

附上这个简单的框架构建的 github 地址 SSM-SpringBoot:
https://github.com/HowieYuan/SSM-SpringBoot


一. 创建项目


选择 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-classname= 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”>
    <mappernamespace=“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)方法

    publicclassSpringbootApplicationextendsSpringBootServletInitializer{
       publicstaticvoidmain(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
    publicclassCorsFilterimplementsFilter{
       /**
        * json web token 在请求头的名字
        */
       private String tokenHeader = “X_Auth_Token”;

       @Override
       publicvoiddoFilter(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
       publicvoidinit(FilterConfig filterConfig){
       }

       @Override
       publicvoiddestroy(){
       }

    }


    六. 整合其他组件


    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 框架

    Leave a Reply