SSM单机项目构建

从零开始构建SSM项目

Spring & SpringMVC & mybatis 项目构建

脚手架选择

  • mybatis example 代码生成配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE generatorConfiguration
    PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
    "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

    <generatorConfiguration>
    <!--
    出现错误:Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    解决办法:将本地的MAVEN仓库中的mysql驱动引入进来
    -->
    <context id="mysqlgenerator" targetRuntime="MyBatis3">
    <!--不生成注释-->
    <commentGenerator>
    <property name="suppressAllComments" value="true"/>
    </commentGenerator>
    <!-- 配置数据库连接 -->

    <!--<jdbcConnection driverClass="com.mysql.jdbc.Driver"-->
    <!--connectionURL="jdbc:mysql://localhost:3306/quake"-->
    <!--userId="root"-->
    <!--password="root"/>-->

    <!-- 指定javaBean生成的位置 -->
    <javaModelGenerator targetPackage="com.anruence.entity" targetProject="src/main/java">
    <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
    <property name="enableSubPackages" value="true"/>
    <!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
    <property name="trimStrings" value="true"/>
    </javaModelGenerator>

    <!--指定sql映射文件生成的位置 -->
    <sqlMapGenerator targetPackage="sqlmap" targetProject="src/main/resources">
    <property name="enableSubPackages" value="true"/>
    </sqlMapGenerator>
    <!-- 指定dao接口生成的位置,mapper接口 -->
    <javaClientGenerator type="XMLMAPPER" targetPackage="com.anruence.dao" targetProject="src/main/java">
    <property name="enableSubPackages" value="true"/>
    </javaClientGenerator>

    <!-- table表生成对应的DoaminObject -->
    <!--<table tableName="R_DEVICES"/>-->
    <table tableName="quake"/>

    </context>

    </generatorConfiguration>

SpringMVC实战

  • SpringMVC注解
  • 理解RESTful
  • 各项配置
  • 捕获5XX异常,@ControllerAdvice
  • CORS支持 注解 or xml
  • 异步请求

    字段参数验证(自定义Validator)

  • 使用hibernate-validator,自定义注解
  • @Max、@Length等

    图片上传(非OSS)

  • tomcat 配置上传文件至不同路径下防止图片上传到war包目录,服务重启时图片丢失。

拦截器 & Aspect应用

  • Aop搭配注解,记录日志,限制请求等。

quartz定时任务

  • cron任务
  • 进程内任务

swagger-ui 集成

  • 集成依赖
  • 可访问路径配置

各注解详解

  • @Api
  • @ApiOpreator
  • @ApiModel

mybatis应用

mybatis sqlmap自动生成

  • 使用maven插件自动生成CRUD

mybatis example试用

  • example 多条件查询,类似于ActiveRecord。

mybatis-plus集成

  • 构建查询语句(ActiveRecord)

构建jenkins发布平台

集成代码平台,tomcat

  • jenkins部署服务
  • github & tomcat user

maven profile环境区分

  • profile区分环境使用不同配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <build>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
    <warName>${artifactId}-${env}-${version}</warName>
    </configuration>
    </plugin>
    <plugin>
    <artifactId>maven-deploy-plugin</artifactId>
    <configuration>
    <skip>true</skip>
    </configuration>
    </plugin>
    </plugins>
    <resources>
    <resource>
    <directory>src/main/resources</directory>
    <excludes>
    <exclude>product/*</exclude>
    <exclude>qa/*</exclude>
    </excludes>
    </resource>
    <resource>
    <directory>src/main/resources/${active.env}</directory>
    <targetPath>config/spring/local</targetPath>
    </resource>
    </resources>
    </build>
    <profiles>
    <profile>
    <id>test</id>
    <activation>
    <activeByDefault>true</activeByDefault>
    <property>
    <name>env</name>
    <value>test</value>
    </property>
    </activation>
    <properties>
    <active.env>qa</active.env>
    </properties>
    </profile>
    <profile>
    <id>product</id>
    <activation>
    <property>
    <name>env</name>
    <value>product</value>
    </property>
    </activation>
    <properties>
    <active.env>product</active.env>
    </properties>
    </profile>
    </profiles>
    关键在于targetPath属性的设置。
您的支持将鼓励我继续创作 笔芯