第一章:分模块开发和设计

1.1 项目目录结构

分模块开发和设计的目录结构.png

1.2 相关模块及代码

1.2.1 maven-ssm

  • pom.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.xudaxian</groupId>
  7. <artifactId>maven-ssm</artifactId>
  8. <version>1.0</version>
  9. <!-- 定义该工程用于进行构建管理 -->
  10. <packaging>pom</packaging>
  11. <!-- 管理的工程列表 -->
  12. <modules>
  13. <!-- 具体的工程名称 -->
  14. <module>maven-ssm-pojo</module>
  15. <module>maven-ssm-dao</module>
  16. <module>maven-ssm-service</module>
  17. <module>maven-ssm-web</module>
  18. </modules>
  19. <properties>
  20. <maven.compiler.source>11</maven.compiler.source>
  21. <maven.compiler.target>11</maven.compiler.target>
  22. </properties>
  23. <!-- 声明此处进行依赖管理 -->
  24. <dependencyManagement>
  25. <!-- 具体的依赖 -->
  26. <dependencies>
  27. <!-- 自定义工程依赖 -->
  28. <dependency>
  29. <groupId>com.xudaxian</groupId>
  30. <artifactId>maven-ssm-service</artifactId>
  31. <version>1.0</version>
  32. </dependency>
  33. <dependency>
  34. <groupId>com.xudaxian</groupId>
  35. <artifactId>maven-ssm-pojo</artifactId>
  36. <version>1.0</version>
  37. </dependency>
  38. <dependency>
  39. <groupId>com.xudaxian</groupId>
  40. <artifactId>maven-ssm-dao</artifactId>
  41. <version>1.0</version>
  42. </dependency>
  43. <!-- spring的环境 -->
  44. <dependency>
  45. <groupId>org.springframework</groupId>
  46. <artifactId>spring-context</artifactId>
  47. <version>5.1.9.RELEASE</version>
  48. </dependency>
  49. <!-- Spring整合Junit -->
  50. <dependency>
  51. <groupId>org.springframework</groupId>
  52. <artifactId>spring-test</artifactId>
  53. <version>5.1.9.RELEASE</version>
  54. </dependency>
  55. <!-- mybatis的环境 -->
  56. <dependency>
  57. <groupId>org.mybatis</groupId>
  58. <artifactId>mybatis</artifactId>
  59. <version>3.5.3</version>
  60. </dependency>
  61. <!--mysql环境-->
  62. <dependency>
  63. <groupId>mysql</groupId>
  64. <artifactId>mysql-connector-java</artifactId>
  65. <version>8.0.25</version>
  66. </dependency>
  67. <!--spring整合jdbc-->
  68. <dependency>
  69. <groupId>org.springframework</groupId>
  70. <artifactId>spring-jdbc</artifactId>
  71. <version>5.1.9.RELEASE</version>
  72. </dependency>
  73. <!--spring整合mybatis-->
  74. <dependency>
  75. <groupId>org.mybatis</groupId>
  76. <artifactId>mybatis-spring</artifactId>
  77. <version>2.0.3</version>
  78. </dependency>
  79. <!--druid连接池-->
  80. <dependency>
  81. <groupId>com.alibaba</groupId>
  82. <artifactId>druid</artifactId>
  83. <version>1.1.16</version>
  84. </dependency>
  85. <!--分页插件坐标-->
  86. <dependency>
  87. <groupId>com.github.pagehelper</groupId>
  88. <artifactId>pagehelper</artifactId>
  89. <version>5.1.2</version>
  90. </dependency>
  91. <dependency>
  92. <groupId>org.springframework</groupId>
  93. <artifactId>spring-webmvc</artifactId>
  94. <version>5.1.9.RELEASE</version>
  95. </dependency>
  96. <dependency>
  97. <groupId>com.fasterxml.jackson.core</groupId>
  98. <artifactId>jackson-databind</artifactId>
  99. <version>2.9.0</version>
  100. </dependency>
  101. </dependencies>
  102. </dependencyManagement>
  103. <!--
  104. 可以在子工程中定义依赖关系,无需声明依赖版本,版本将参考父工程中依赖的版本。
  105. 当然,我直接定义在父工程了。
  106. -->
  107. <dependencies>
  108. <!-- spring的环境 -->
  109. <dependency>
  110. <groupId>org.springframework</groupId>
  111. <artifactId>spring-context</artifactId>
  112. </dependency>
  113. <!-- Spring整合Junit -->
  114. <dependency>
  115. <groupId>org.springframework</groupId>
  116. <artifactId>spring-test</artifactId>
  117. </dependency>
  118. <!-- mybatis的环境 -->
  119. <dependency>
  120. <groupId>org.mybatis</groupId>
  121. <artifactId>mybatis</artifactId>
  122. </dependency>
  123. <!--mysql环境-->
  124. <dependency>
  125. <groupId>mysql</groupId>
  126. <artifactId>mysql-connector-java</artifactId>
  127. </dependency>
  128. <!--spring整合jdbc-->
  129. <dependency>
  130. <groupId>org.springframework</groupId>
  131. <artifactId>spring-jdbc</artifactId>
  132. </dependency>
  133. <!--spring整合mybatis-->
  134. <dependency>
  135. <groupId>org.mybatis</groupId>
  136. <artifactId>mybatis-spring</artifactId>
  137. </dependency>
  138. <!--druid连接池-->
  139. <dependency>
  140. <groupId>com.alibaba</groupId>
  141. <artifactId>druid</artifactId>
  142. </dependency>
  143. <!--分页插件坐标-->
  144. <dependency>
  145. <groupId>com.github.pagehelper</groupId>
  146. <artifactId>pagehelper</artifactId>
  147. </dependency>
  148. <dependency>
  149. <groupId>org.springframework</groupId>
  150. <artifactId>spring-webmvc</artifactId>
  151. </dependency>
  152. <dependency>
  153. <groupId>com.fasterxml.jackson.core</groupId>
  154. <artifactId>jackson-databind</artifactId>
  155. </dependency>
  156. </dependencies>
  157. <build>
  158. <pluginManagement>
  159. <plugins>
  160. <!--具体的插件配置-->
  161. <plugin>
  162. <groupId>org.apache.tomcat.maven</groupId>
  163. <artifactId>tomcat7-maven-plugin</artifactId>
  164. <version>2.1</version>
  165. <configuration>
  166. <port>80</port>
  167. <path>/</path>
  168. </configuration>
  169. </plugin>
  170. </plugins>
  171. </pluginManagement>
  172. </build>
  173. </project>

1.2.2 maven-ssm-pojo

  • 目录结构:

maven-ssm-pojo的目录结构.png

  • pom.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>maven-ssm</artifactId>
  7. <groupId>com.xudaxian</groupId>
  8. <version>1.0</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>maven-ssm-pojo</artifactId>
  12. <properties>
  13. <maven.compiler.source>11</maven.compiler.source>
  14. <maven.compiler.target>11</maven.compiler.target>
  15. </properties>
  16. </project>
  • com.xudaxian.domain.User.java
  1. package com.xudaxian.domain;
  2. import java.io.Serializable;
  3. import java.util.Date;
  4. /**
  5. * User
  6. *
  7. * @author 许大仙
  8. * @version 1.0
  9. * @since 2021 -06-14 07:25
  10. */
  11. public class User implements Serializable {
  12. private String uuid;
  13. private String username;
  14. private String password;
  15. private String realName;
  16. private Integer gender;
  17. private Date birthday;
  18. public String getUuid() {
  19. return uuid;
  20. }
  21. public void setUuid(String uuid) {
  22. this.uuid = uuid;
  23. }
  24. public String getUsername() {
  25. return username;
  26. }
  27. public void setUsername(String username) {
  28. this.username = username;
  29. }
  30. public String getPassword() {
  31. return password;
  32. }
  33. public void setPassword(String password) {
  34. this.password = password;
  35. }
  36. public String getRealName() {
  37. return realName;
  38. }
  39. public void setRealName(String realName) {
  40. this.realName = realName;
  41. }
  42. public Integer getGender() {
  43. return gender;
  44. }
  45. public void setGender(Integer gender) {
  46. this.gender = gender;
  47. }
  48. public Date getBirthday() {
  49. return birthday;
  50. }
  51. public void setBirthday(Date birthday) {
  52. this.birthday = birthday;
  53. }
  54. @Override
  55. public String toString() {
  56. return "User{" +
  57. "uuid='" + uuid + '\'' +
  58. ", username='" + username + '\'' +
  59. ", password='" + password + '\'' +
  60. ", realName='" + realName + '\'' +
  61. ", gender=" + gender +
  62. ", birthday=" + birthday +
  63. '}';
  64. }
  65. }

1.2.3 maven-ssm-dao

  • 目录结构:

maven-ssm-dao的目录结构.png

  • pom.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>maven-ssm</artifactId>
  7. <groupId>com.xudaxian</groupId>
  8. <version>1.0</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>maven-ssm-dao</artifactId>
  12. <properties>
  13. <maven.compiler.source>11</maven.compiler.source>
  14. <maven.compiler.target>11</maven.compiler.target>
  15. </properties>
  16. <dependencies>
  17. <!-- 导入资源文件pojo -->
  18. <dependency>
  19. <groupId>com.xudaxian</groupId>
  20. <artifactId>maven-ssm-pojo</artifactId>
  21. </dependency>
  22. <!-- 单元测试 -->
  23. <dependency>
  24. <groupId>junit</groupId>
  25. <artifactId>junit</artifactId>
  26. <version>4.13.2</version>
  27. <scope>test</scope>
  28. </dependency>
  29. </dependencies>
  30. </project>
  • com.xudaxian.mapper.UserMapper.java
  1. package com.xudaxian.mapper;
  2. import com.xudaxian.domain.User;
  3. import org.apache.ibatis.annotations.Mapper;
  4. import org.apache.ibatis.annotations.Param;
  5. import java.util.List;
  6. /**
  7. * @author 许大仙
  8. * @version 1.0
  9. * @since 2021-06-14 08:40
  10. */
  11. @Mapper
  12. public interface UserMapper {
  13. /**
  14. * 添加用户信息
  15. *
  16. * @param user 用户信息对象
  17. * @return 如果新增成功,则返回true;否则,返回false
  18. */
  19. boolean save( User user);
  20. /**
  21. * 修改用户信息
  22. *
  23. * @param user 用户信息对象
  24. * @return 如果修改成功,则返回true;否则,返回false
  25. */
  26. boolean update( User user);
  27. /**
  28. * 删除用户信息
  29. *
  30. * @param uuid 主键
  31. * @return 如果删除成功,则返回true;否则,返回false
  32. */
  33. boolean delete(String uuid);
  34. /**
  35. * 根据主键查询用户信息
  36. *
  37. * @param uuid 主键
  38. * @return 用户信息
  39. */
  40. User get(String uuid);
  41. /**
  42. * 查询全部用户信息
  43. *
  44. * @return 全部用户信息
  45. */
  46. List<User> getAll();
  47. /**
  48. * 根据用户名和密码查询用户信息
  49. *
  50. * @param username 用户名
  51. * @param password 密码
  52. * @return 用户信息
  53. */
  54. User getByUsernameAndPassword(@Param("username") String username, @Param("password") String password);
  55. }
  • com/xudaxian/mapper/UserMapper.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.xudaxian.mapper.UserMapper">
  6. <insert id="save">
  7. INSERT INTO `user` (uuid, username, password, realName, gender, birthday)
  8. VALUES (#{uuid}, #{username}, #{password}, #{realName}, #{gender}, #{birthday})
  9. </insert>
  10. <update id="update">
  11. UPDATE `user`
  12. SET username=#{username},
  13. password=#{password},
  14. realName=#{realName},
  15. gender=#{gender},
  16. birthday=#{birthday}
  17. WHERE uuid = #{uuid}
  18. </update>
  19. <delete id="delete">
  20. DELETE
  21. FROM `user`
  22. WHERE uuid = #{uuid}
  23. </delete>
  24. <select id="get" resultType="com.xudaxian.domain.User">
  25. SELECT *
  26. FROM `user`
  27. WHERE uuid = #{uuid}
  28. </select>
  29. <select id="getAll" resultType="com.xudaxian.domain.User">
  30. SELECT *
  31. FROM `user`
  32. </select>
  33. <select id="getByUsernameAndPassword" resultType="com.xudaxian.domain.User">
  34. SELECT *
  35. FROM `user`
  36. WHERE username = #{username}
  37. AND password = #{password}
  38. </select>
  39. </mapper>
  • jdbc.properties
  1. jdbc.driver=com.mysql.cj.jdbc.Driver
  2. jdbc.url=jdbc:mysql://localhost:3306/maven?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
  3. jdbc.username=root
  4. jdbc.password=123456
  • applicationContext-dao.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  6. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
  7. <!--开启bean注解扫描-->
  8. <context:component-scan base-package="com.xudaxian">
  9. <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController"/>
  10. </context:component-scan>
  11. <!--加载properties文件-->
  12. <context:property-placeholder location="classpath*:jdbc.properties"/>
  13. <!--数据源-->
  14. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
  15. <property name="driverClassName" value="${jdbc.driver}"/>
  16. <property name="url" value="${jdbc.url}"/>
  17. <property name="username" value="${jdbc.username}"/>
  18. <property name="password" value="${jdbc.password}"/>
  19. </bean>
  20. <!--整合mybatis到spring中-->
  21. <bean class="org.mybatis.spring.SqlSessionFactoryBean">
  22. <property name="dataSource" ref="dataSource"/>
  23. <property name="typeAliasesPackage" value="com.xudaxian.mapper"/>
  24. <!--分页插件-->
  25. <property name="plugins">
  26. <array>
  27. <bean class="com.github.pagehelper.PageInterceptor">
  28. <property name="properties">
  29. <props>
  30. <prop key="helperDialect">mysql</prop>
  31. <prop key="reasonable">true</prop>
  32. </props>
  33. </property>
  34. </bean>
  35. </array>
  36. </property>
  37. </bean>
  38. <!--映射扫描-->
  39. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  40. <property name="basePackage" value="com.xudaxian.mapper"/>
  41. </bean>
  42. </beans>

1.2.4 maven-ssm-service

  • 目录结构:

maven-ssm-service的目录结构.png

  • pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>maven-ssm</artifactId>
        <groupId>com.xudaxian</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>maven-ssm-service</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.xudaxian</groupId>
            <artifactId>maven-ssm-dao</artifactId>
        </dependency>
        <!-- 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>
  • com.xudaxian.service.UserService.java
package com.xudaxian.service;

import com.github.pagehelper.PageInfo;
import com.xudaxian.domain.User;

/**
 * @author 许大仙
 * @version 1.0
 * @since 2021-06-14 10:47
 */
public interface UserService {

    /**
     * 保存用户信息
     *
     * @param user 用户信息
     * @return
     */
    boolean save(User user);

    /**
     * 更新用户信息
     *
     * @param user 用户信息
     * @return
     */
    boolean update(User user);

    /**
     * 删除用户信息
     *
     * @param uuid 主键
     * @return
     */
    boolean delete(String uuid);

    /**
     * 根据主键获取用户信息
     *
     * @param uuid 主键
     * @return
     */
    User get(String uuid);

    /**
     * 分页显示用户信息
     *
     * @param page 页码
     * @param size 每页显示条数
     * @return
     */
    PageInfo<User> getAll(int page, int size);

    /**
     * 根据用户名和密码登录
     *
     * @param userName
     * @param password
     * @return
     */
    User login(String userName, String password);
}
  • com.xudaxian.service.impl.UserServiceImpl.java
package com.xudaxian.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xudaxian.domain.User;
import com.xudaxian.mapper.UserMapper;
import com.xudaxian.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author 许大仙
 * @version 1.0
 * @since 2021-06-14 10:48
 */
@Transactional
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public boolean save(User user) {
        return userMapper.save(user);
    }

    @Override
    public boolean update(User user) {
        return userMapper.update(user);
    }

    @Override
    public boolean delete(String uuid) {
        return userMapper.delete(uuid);
    }

    @Override
    public User get(String uuid) {
        return userMapper.get(uuid);
    }

    @Override
    public PageInfo<User> getAll(int page, int size) {
        PageHelper.startPage(page, size);
        List<User> userList = userMapper.getAll();
        return new PageInfo<>(userList);
    }

    @Override
    public User login(String userName, String password) {
        return userMapper.getByUsernameAndPassword(userName, password);
    }
}
  • applicationContext-service.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--开启bean注解扫描-->
    <context:component-scan base-package="com.xudaxian">
        <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController"/>
    </context:component-scan>

    <!-- 导入applicationContext-dao.xml文件   -->
    <import resource="classpath*:applicationContext-dao.xml"/>

    <!--开启注解式事务-->
    <tx:annotation-driven transaction-manager="txManager"/>

    <!--事务管理器-->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

</beans>

1.2.5 maven-ssm-web

  • 目录结构:

maven-ssm-web的目录结构.png

  • pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!-- 定义该工程的父工程 -->
    <parent>
        <artifactId>maven-ssm</artifactId>
        <groupId>com.xudaxian</groupId>
        <version>1.0</version>
        <!-- 填写父工程的pom文件,如果是下面的这种格式,可以省略relativePath -->
        <relativePath>../pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>maven-ssm-web</artifactId>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.xudaxian</groupId>
            <artifactId>maven-ssm-service</artifactId>
        </dependency>
    </dependencies>

    <build>
        <!--设置插件-->
        <plugins>
            <!--具体的插件配置-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  • com.xudaxian.utils.Code.java
package com.xudaxian.utils;

import java.io.Serializable;

/**
 * @author 许大仙
 * @version 1.0
 * @since 2021-06-14 12:42
 */
public class Code implements Serializable {
    //    操作结果编码
    public static final Integer SAVE_OK = 20011;
    public static final Integer UPDATE_OK = 20021;
    public static final Integer DELETE_OK = 20031;
    public static final Integer GET_OK = 20041;

    public static final Integer SAVE_ERROR = 20010;
    public static final Integer UPDATE_ERROR = 20020;
    public static final Integer DELETE_ERROR = 20030;
    public static final Integer GET_ERROR = 20040;

    //    系统错误编码

    //    操作权限编码

    //    校验结果编码

}
  • com.xudaxian.utils.Result.java
package com.xudaxian.utils;

import java.io.Serializable;

/**
 * @author 许大仙
 * @version 1.0
 * @since 2021-06-14 12:42
 */
public class Result implements Serializable {
    //    操作结果编码
    private Integer code;
    //    操作数据结果
    private Object data;
    //    消息
    private String message;

    public Result(Integer code) {
        this.code = code;
    }

    public Result(Integer code, Object data) {
        this.code = code;
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    @Override
    public String toString() {
        return "Result{" +
                "code=" + code +
                ", data=" + data +
                ", message='" + message + '\'' +
                '}';
    }
}
  • com.xudaxian.web.UserController.java
package com.xudaxian.web;

import com.github.pagehelper.PageInfo;
import com.xudaxian.domain.User;
import com.xudaxian.service.UserService;
import com.xudaxian.utils.Code;
import com.xudaxian.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author 许大仙
 * @version 1.0
 * @since 2021-06-14 12:40
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping
    public Result save(User user) {
        boolean flag = userService.save(user);
        return new Result(flag ? Code.SAVE_OK : Code.SAVE_ERROR);
    }

    @PutMapping
    public Result update(User user) {
        boolean flag = userService.update(user);
        return new Result(flag ? Code.UPDATE_OK : Code.UPDATE_ERROR);
    }

    @DeleteMapping("/{uuid}")
    public Result delete(@PathVariable String uuid) {
        boolean flag = userService.delete(uuid);
        return new Result(flag ? Code.DELETE_OK : Code.DELETE_ERROR);
    }

    @GetMapping("/{uuid}")
    public Result get(@PathVariable String uuid) {
        User user = userService.get(uuid);
        return new Result(null != user ? Code.GET_OK : Code.GET_ERROR, user);
    }

    @GetMapping("/{page}/{size}")
    public Result getAll(@PathVariable Integer page, @PathVariable Integer size) {
        PageInfo<User> all = userService.getAll(page, size);
        return new Result(null != all ? Code.GET_OK : Code.GET_ERROR, all);
    }

    @PostMapping("/login")
    public Result login(String userName, String password) {
        User user = userService.login(userName, password);
        return new Result(null != user ? Code.GET_OK : Code.GET_ERROR, user);
    }

}
  • applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <context:component-scan base-package="com.xudaxian">
        <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController"/>
    </context:component-scan>

    <import resource="classpath*:applicationContext-service.xml"/>

</beans>
  • spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <mvc:annotation-driven/>

    <context:component-scan base-package="com.xudaxian.web">
        <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController"/>
    </context:component-scan>

</beans>
  • webapp/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:applicationContext.xml</param-value>
    </context-param>

    <!--启动服务器时,通过监听器加载spring运行环境-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:spring-mvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

第二章:聚合和继承

2.1 聚合

  • 聚合的作用:聚合用于快速构建 maven 工程,一次性构建多个项目/模块。
  • 制作方式:

    • ① 创建项目,打包类型定义为 pom 。

      <!-- 定义该工程用于进行构建管理 -->
      <packaging>pom</packaging>
      
    • ② 定义当前项目进行构建操作时关联的其他模块名称:

      <!-- 管理的工程列表 -->
      <modules>
      <!-- 具体的工程名称 -->
      <module>maven-ssm-pojo</module>
      <module>maven-ssm-dao</module>
      <module>maven-ssm-service</module>
      <module>maven-ssm-web</module>
      </modules>
      

注意事项:参与聚合操作的模块最终执行顺序和模块间的依赖关系有关,和配置顺序无关。

2.2 继承

  • 继承的作用:通过继承可以实现在子工程中沿用父工程的配置。
  • 制作方式:

    • ① 在父工程中定义依赖管理。

      <!-- 声明此处进行依赖管理 -->
      <dependencyManagement>
      <!-- 具体的依赖 -->
      <dependencies>
         <!-- 自定义工程依赖 -->
         <dependency>
             <groupId>com.xudaxian</groupId>
             <artifactId>maven-ssm-service</artifactId>
             <version>1.0</version>
         </dependency>
         <dependency>
             <groupId>com.xudaxian</groupId>
             <artifactId>maven-ssm-pojo</artifactId>
             <version>1.0</version>
         </dependency>
         <dependency>
             <groupId>com.xudaxian</groupId>
             <artifactId>maven-ssm-dao</artifactId>
             <version>1.0</version>
         </dependency>
         <!-- spring的环境 -->
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-context</artifactId>
             <version>5.1.9.RELEASE</version>
         </dependency>
         <!-- Spring整合Junit -->
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-test</artifactId>
             <version>5.1.9.RELEASE</version>
         </dependency>
         <!-- mybatis的环境 -->
         <dependency>
             <groupId>org.mybatis</groupId>
             <artifactId>mybatis</artifactId>
             <version>3.5.3</version>
         </dependency>
         <!--mysql环境-->
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version>8.0.25</version>
         </dependency>
         <!--spring整合jdbc-->
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-jdbc</artifactId>
             <version>5.1.9.RELEASE</version>
         </dependency>
         <!--spring整合mybatis-->
         <dependency>
             <groupId>org.mybatis</groupId>
             <artifactId>mybatis-spring</artifactId>
             <version>2.0.3</version>
         </dependency>
         <!--druid连接池-->
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>druid</artifactId>
             <version>1.1.16</version>
         </dependency>
         <!--分页插件坐标-->
         <dependency>
             <groupId>com.github.pagehelper</groupId>
             <artifactId>pagehelper</artifactId>
             <version>5.1.2</version>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-webmvc</artifactId>
             <version>5.1.9.RELEASE</version>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
             <version>2.9.0</version>
         </dependency>
      </dependencies>
      </dependencyManagement>
      
    • ② 在子工程中声明其父工程坐标和对应的位置。

      <!-- 定义该工程的父工程 -->
      <parent>
      <artifactId>maven-ssm</artifactId>
      <groupId>com.xudaxian</groupId>
      <version>1.0</version>
      <!-- 填写父工程的pom文件,如果是下面的这种格式,可以省略relativePath -->
      <relativePath>../pom.xml</relativePath>
      </parent>
      
  • 继承的资源:
    • groupId:项目组 ID ,项目坐标的核心因素。
    • version:项目版本,项目坐标的核心因素。
    • description:项目的描述信息。
    • organization:项目的组织信息。
    • inceptionYear:项目的创始年份。
    • url:项目的URL地址。
    • developers:项目的开发者信息。
    • contributors:项目的贡献者信息。
    • distributionManagement:项目的部署配置。
    • issueManagement:项目的缺陷跟踪系统信息。
    • CIManagement:项目的持续集成系统信息。
    • scm:项目的版本控制系统。
    • malilingLists:项目的邮件列表信息。
    • properties:自定义的 Maven 属性。
    • dependencies:项目的依赖配置。
    • dependencyManagement:项目的依赖管理配置。
    • repositories:项目的仓库配置。
    • build:包括项目的源码目录配置i、输出目录配置、插件配置、插件管理配置等。
    • reporting:包括项目的报告输出目录配置、报告插件配置等。

2.3 聚合和继承的异同点

  • 作用:
    • 聚合用于快速构建项目。
    • 继承用于快速配置。
  • 相同点:
    • 聚合和继承的 pom.xml 文件打包方式均为 pom ,可以将两种关系制作到同一个 pom 文件中。
    • 聚合和继承均属于设计型模块,并无实际的模块内容。
  • 不同点:
    • 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些。
    • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己。

第三章:属性

3.1 自定义属性

  • 作用:等同于定义变量,方便统一维护。
  • 定义格式:
 <!-- 定义自定义属性 -->
<properties>
    <spring.vresion>5.1.9.RELEASE</spring.vresion>
    <mybatis.version>3.5.3</mybatis.version>
</properties>
  • 调用格式:
<!-- 声明此处进行依赖管理 -->
<dependencyManagement>
    <!-- 具体的依赖 -->
    <dependencies>
        <!-- spring的环境 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.vresion}</version>
        </dependency>
        <!-- mybatis的环境 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

3.2 内置属性

  • 作用:使用 maven 内置属性,快速配置。
  • 调用格式:
${basedir}
${version}

3.3 Settings 属性

  • 作用:使用 maven 配置文件 settings.xml 中的标签属性,用于动态配置。
  • 调用格式:
${settings.localRepository}

3.4 Java 系统属性

  • 作用:读取 Java 系统属性。
  • 调用格式:
${user.home}
  • 系统属性查询方式:
mvn help:system

3.5 环境变量属性

  • 作用:使用 maven 配置文件 settings.xml 中的标签属性,用于动态配置。
  • 调用格式:
${env.JAVA_HOME}
  • 环境变量属性查询方式:
mvn help:system

第四章:版本管理

4.1 工程版本

  • SNAPSHOT(快照版本):
    • 项目开发过程中,为方便团队成员合作,解决模块间依赖和即时更新的问题,开发者对于每个模块进行构建的时候,输出的临时性版本叫做快照版本(测试阶段版本)。
    • 快照版本会随着开发的进展不断的更新。
  • RELEASE(发布版本):
    • 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本对应的构建文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本。

4.2 工程版本号的约定

  • 约定规范:
    • <主版本>.<次版本>.<增量版本>.<里程碑版本>
    • 主版本:表示项目重大架构的变更,如:Spring5 相较于 Spring4 的迭代。
    • 次版本:表示有较大的功能增加和变化,或者全面系统地修复漏洞。
    • 增量版本:表示有重大漏洞的修复。
    • 里程碑版本:表示一个版本的里程碑(版本内部)。这样的版本同下一个正式版本相对,相对来说不是很稳定,有待更多的测试。
  • 范例:5.1.9.RELEASE

第五章:资源配置

  • 资源配置中的资源包括 properties 文件、applicationContext.xml 文件等。
  • 资源配置其实就是将 propertiesapplicationContext.xml 等文件中的信息配置到 Maven 中,由 Maven 统一管理,这样就可以在任意文件中加载 pom 文件中定义的属性了。

  • 示例:

  • jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=root
jdbc.password=123456
  • pom.xml
<!-- 定义自定义属性 -->
<properties>
    <jdbc.url>jdbc:mysql://localhost:3306/maven?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true&amp;useSSL=false&amp;serverTimezone=GMT%2B8&amp;allowPublicKeyRetrieval=true&amp;nullCatalogMeansCurrent=true</jdbc.url>
</properties>

<build>
    <pluginManagement>
        <plugins>
            <!--具体的插件配置-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <port>80</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
    <!-- 配置资源文件对应的信息 -->
    <resources>
        <resource>
            <!-- 设定配置文件对应的位置目录,支持使用属性动态设置路径 -->
            <directory>${project.basedir}/src/main/resources</directory>
            <!-- 开启对配置文件的资源加载过滤 -->
            <filtering>true</filtering>
        </resource>
    </resources>
    <!-- 配置测试资源文件对应的信息 -->
    <testResources>
        <testResource>
            <directory>${project.basedir}/src/test/resources</directory>
            <filtering>true</filtering>
        </testResource>
    </testResources>
</build>

第六章:多环境开发配置

6.1 多环境开发

多环境兼容.png

6.2 多环境配置

  • pom.xml
<!-- 创建多环境 -->
<profiles>
    <!-- 定义具体的环境:开发环境 -->
    <profile>
        <!-- 定义环境对应的唯一id -->
        <id>dev_env</id>
        <!-- 定义环境中专用的属性值 -->
        <properties>
            <jdbc.url>jdbc:mysql://localhost:3306/maven?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true&amp;useSSL=false&amp;serverTimezone=GMT%2B8&amp;allowPublicKeyRetrieval=true&amp;nullCatalogMeansCurrent=true</jdbc.url>
        </properties>
        <!-- 设置默认启动 -->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <!-- 定义具体的环境:测试环境 -->
    <profile>
        <id>test_env</id>
        <properties>
            <jdbc.url>jdbc:mysql://127.0.0.1:3306/maven?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true&amp;useSSL=false&amp;serverTimezone=GMT%2B8&amp;allowPublicKeyRetrieval=true&amp;nullCatalogMeansCurrent=true</jdbc.url>
        </properties>
    </profile>
</profiles>

6.3 加载指定环境

  • 作用:加载指定环境配置。
  • 命令:
mvn 指令 -P 环境定义id
  • 示例:
mvn install -P test_env

第七章:跳过测试

7.1 跳过测试环境的应用场景

  • 整体模块功能未开发。
  • 模块中某个功能未开发完毕。
  • 单个功能更新调试导致其他功能失败。
  • 快速打包。
  • ……

7.2 跳过测试

7.2.1 使用命令跳过测试

  • 命令:
mvn 指令 -D skipTests

注意事项:执行的指令生命周期必须包含测试环节。

  • 示例:
mvn install -D skipTests

7.2.2 IDEA中使用界面跳过测试

IDEA中使用界面跳过测试.png

7.2.3 使用配置跳过测试

  • pom.xml
<build>
    <!-- 使用配置跳过测试 -->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.1</version>
            <configuration>
                <!-- 开启跳过测试 -->
                <skipTests>true</skipTests>
                <!-- 包含指定的测试用例 -->
                <includes>
                    <include>**/User*Test.java</include>
                </includes>
                <!-- 排除指定的测试用例 -->
                <excludes>
                    <exclude>**/User*TestCase.java</exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

第八章:私服

8.1 Nexus

  • Nexus 是 Sonatype 公司的一款 Maven 私服产品。
  • 下载地址

8.2 Nexus的安装、启动和配置

  • 解压即可使用(系统为 win10 )。

Nexus的安装.png

  • 启动服务器:
cd nexus-3.30.1-01
nexus.exe /run nexus
  • 访问服务器(默认端口为 8081 ):
  • http://localhost:8081

  • 修改基础配置信息:安装路径下的 etc 目录中的 nexus-default.properties 文件保存有 nexus 基础配置信息,例如:默认访问端口。

  • 修改服务器运行配置信息:安装路径下 bin 目录中的 nexus.vmoptions 文件保存有 nexus 服务器启动的配置信息,例如:默认占用内存空间。

8.3 私服资源获取

私服资源获取.png

8.4 仓库的分类

  • 宿主仓库 hosted :保存无法从中央仓库获取的资源。
    • 自主研发。
    • 第三方非开源项目。
  • 代理仓库 proxy :代理远程仓库,通过 nexus 访问其它公共仓库,例如:中央仓库。
  • 仓库组 group :
    • 将若干个仓库组成一个群组,简化配置。
    • 仓库组不能保存资源,属于设计型仓库。

8.5 登录Nexus

登录Nexus1.png

登录Nexus2.png

登录Nexus3.png

登录Nexus4.png

登录Nexus5.png

登录Nexus6.png

8.5 创建仓库

创建仓库1.png

创建仓库2.png

创建仓库3.png

创建仓库4.png

8.6 将创建的仓库放入到 maven-public 仓库组中

将创建的仓库放入到maven-public仓库组中1.png

将创建的仓库放入到maven-public仓库组中2.png

将创建的仓库放入到maven-public仓库组中3.png

8.7 手动上传组件

手动上传组件1.png

手动上传组件2.png

手动上传组件3.png

手动上传组件4.png

8.8 IDEA环境中资源上传和下载

8.8.1 概述

IDEA环境中资源上传和下载概述.png

8.8.2 本地仓库访问私服

  • 配置本地仓库访问私服的权限(settings.xml)
<servers>
    <!-- 配置访问服务器的权限 -->
    <server>
        <id>xudaxian-snapshots</id>
        <username>admin</username>
        <password>123456</password>
    </server>
    <server>
        <id>xudaxian-release</id>
        <username>admin</username>
        <password>123456</password>
    </server>
</servers>
  • 配置本地仓库资源来源(settings.xml)
<mirrors>
    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <mirrorOf>central</mirrorOf>
        <url>
            http://maven.aliyun.com/nexus/content/groups/public/
        </url>
    </mirror>
    <!-- 配置本地仓库资源来源 -->
    <mirror>
        <id>nexus</id>
        <mirrorOf>*</mirrorOf>
        <name>本地私服</name>
        <url>http://localhost:8081/repository/maven-public/</url>
    </mirror>
</mirrors>

8.8.3 IDEA 访问私服和组件上传

  • 配置当前项目访问私服上传资源的保存位置(pom.xml)
<!-- 发布配置管理   -->
<distributionManagement>
    <snapshotRepository>
        <id>xudaxian-snapshots</id>
        <url>http://localhost:8081/repository/xudaxian-snapshots/</url>
    </snapshotRepository>
    <repository>
        <id>xudaxian-release</id>
        <url>http://localhost:8081/repository/xudaxian-release/</url>
    </repository>
</distributionManagement>
  • 发布资源到私服的命令:
mvn deploy