1 分模块开发和设计
1.1 项目目录结构
1.2 相关模块及代码
1.2.1 maven-ssm
- 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">
<modelVersion>4.0.0</modelVersion>
<groupId>top.open1024</groupId>
<artifactId>maven-ssm</artifactId>
<version>1.0</version>
<!-- 定义该工程用于进行构建管理 -->
<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>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<!-- 声明此处进行依赖管理 -->
<dependencyManagement>
<!-- 具体的依赖 -->
<dependencies>
<!-- 自定义工程依赖 -->
<dependency>
<groupId>top.open1024</groupId>
<artifactId>maven-ssm-service</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>top.open1024</groupId>
<artifactId>maven-ssm-pojo</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>top.open1024</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>
<!--
可以在子工程中定义依赖关系,无需声明依赖版本,版本将参考父工程中依赖的版本。
当然,我直接定义在父工程了。
-->
<dependencies>
<!-- spring的环境 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<!-- Spring整合Junit -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<!-- mybatis的环境 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<!--mysql环境-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--spring整合jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<!--spring整合mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</dependency>
<!--druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<!--分页插件坐标-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
<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>
</build>
</project>
1.2.2 maven-ssm-pojo
- 目录结构:
- 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>top.open1024</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven-ssm-pojo</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
</project>
- top.open1024.domain.User.java
package top.open1024.domain;
import java.io.Serializable;
import java.util.Date;
/**
* User
*
* @author open1024
* @version 1.0
* @since 2021 -06-14 07:25
*/
public class User implements Serializable {
private String uuid;
private String username;
private String password;
private String realName;
private Integer gender;
private Date birthday;
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public Integer getGender() {
return gender;
}
public void setGender(Integer gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User{" +
"uuid='" + uuid + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
", realName='" + realName + '\'' +
", gender=" + gender +
", birthday=" + birthday +
'}';
}
}
1.2.3 maven-ssm-dao
- 目录结构:
- 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>top.open1024</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven-ssm-dao</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<!-- 导入资源文件pojo -->
<dependency>
<groupId>top.open1024</groupId>
<artifactId>maven-ssm-pojo</artifactId>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
- top.open1024.mapper.UserMapper.java
package top.open1024.mapper;
import top.open1024.domain.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author open1024
* @version 1.0
* @since 2021-06-14 08:40
*/
@Mapper
public interface UserMapper {
/**
* 添加用户信息
*
* @param user 用户信息对象
* @return 如果新增成功,则返回true;否则,返回false
*/
boolean save( User user);
/**
* 修改用户信息
*
* @param user 用户信息对象
* @return 如果修改成功,则返回true;否则,返回false
*/
boolean update( User user);
/**
* 删除用户信息
*
* @param uuid 主键
* @return 如果删除成功,则返回true;否则,返回false
*/
boolean delete(String uuid);
/**
* 根据主键查询用户信息
*
* @param uuid 主键
* @return 用户信息
*/
User get(String uuid);
/**
* 查询全部用户信息
*
* @return 全部用户信息
*/
List<User> getAll();
/**
* 根据用户名和密码查询用户信息
*
* @param username 用户名
* @param password 密码
* @return 用户信息
*/
User getByUsernameAndPassword(@Param("username") String username, @Param("password") String password);
}
- com/xudaxian/mapper/UserMapper.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="top.open1024.mapper.UserMapper">
<insert id="save">
INSERT INTO `user` (uuid, username, password, realName, gender, birthday)
VALUES (#{uuid}, #{username}, #{password}, #{realName}, #{gender}, #{birthday})
</insert>
<update id="update">
UPDATE `user`
SET username=#{username},
password=#{password},
realName=#{realName},
gender=#{gender},
birthday=#{birthday}
WHERE uuid = #{uuid}
</update>
<delete id="delete">
DELETE
FROM `user`
WHERE uuid = #{uuid}
</delete>
<select id="get" resultType="top.open1024.domain.User">
SELECT *
FROM `user`
WHERE uuid = #{uuid}
</select>
<select id="getAll" resultType="top.open1024.domain.User">
SELECT *
FROM `user`
</select>
<select id="getByUsernameAndPassword" resultType="top.open1024.domain.User">
SELECT *
FROM `user`
WHERE username = #{username}
AND password = #{password}
</select>
</mapper>
- jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/maven?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
jdbc.username=root
jdbc.password=123456
- applicationContext-dao.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: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">
<!--开启bean注解扫描-->
<context:component-scan base-package="top.open1024">
<context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController"/>
</context:component-scan>
<!--加载properties文件-->
<context:property-placeholder location="classpath*:jdbc.properties"/>
<!--数据源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--整合mybatis到spring中-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="typeAliasesPackage" value="top.open1024.mapper"/>
<!--分页插件-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<prop key="helperDialect">mysql</prop>
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
<!--映射扫描-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="top.open1024.mapper"/>
</bean>
</beans>
1.2.4 maven-ssm-service
- 目录结构:
- 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>top.open1024</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>top.open1024</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>
- top.open1024.service.UserService.java
package top.open1024.service;
import com.github.pagehelper.PageInfo;
import top.open1024.domain.User;
/**
* @author open1024
* @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);
}
- top.open1024.service.impl.UserServiceImpl.java
package top.open1024.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import top.open1024.domain.User;
import top.open1024.mapper.UserMapper;
import top.open1024.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 open1024
* @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="top.open1024">
<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
- 目录结构:
- 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>top.open1024</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>top.open1024</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>
- top.open1024.utils.Code.java
package top.open1024.utils;
import java.io.Serializable;
/**
* @author open1024
* @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;
// 系统错误编码
// 操作权限编码
// 校验结果编码
}
- top.open1024.utils.Result.java
package top.open1024.utils;
import java.io.Serializable;
/**
* @author open1024
* @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 + '\'' +
'}';
}
}
- top.open1024.web.UserController.java
package top.open1024.web;
import com.github.pagehelper.PageInfo;
import top.open1024.domain.User;
import top.open1024.service.UserService;
import top.open1024.utils.Code;
import top.open1024.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author open1024
* @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="top.open1024">
<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="top.open1024.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 聚合和继承
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>top.open1024</groupId>
<artifactId>maven-ssm-service</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>top.open1024</groupId>
<artifactId>maven-ssm-pojo</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>top.open1024</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>top.open1024</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 属性
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 版本管理
4.1 工程版本
-
SNAPSHOT(快照版本):
-
项目开发过程中,为方便团队成员合作,解决模块间依赖和即时更新的问题,开发者对于每个模块进行构建的时候,输出的临时性版本叫做快照版本(测试阶段版本)。
-
快照版本会随着开发的进展不断的更新。
-
-
RELEASE(发布版本):
- 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本对应的构建文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本。
4.2 工程版本号的约定
-
约定规范:
-
<主版本>
.<次版本>
.<增量版本>
.<里程碑版本>
。 -
主版本:表示项目重大架构的变更,如:
Spring5
相较于Spring4
的迭代。 -
次版本:表示有较大的功能增加和变化,或者全面系统地修复漏洞。
-
增量版本:表示有重大漏洞的修复。
-
里程碑版本:表示一个版本的里程碑(版本内部)。这样的版本同下一个正式版本相对,相对来说不是很稳定,有待更多的测试。
-
-
范例:
5.1.9.RELEASE
。
5 资源配置
-
资源配置中的资源包括
properties
文件、applicationContext.xml
文件等。 -
资源配置其实就是将
properties
、applicationContext.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&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&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 多环境开发配置
6.1 多环境开发
6.2 多环境配置
- pom.xml
<!-- 创建多环境 -->
<profiles>
<!-- 定义具体的环境:开发环境 -->
<profile>
<!-- 定义环境对应的唯一id -->
<id>dev_env</id>
<!-- 定义环境中专用的属性值 -->
<properties>
<jdbc.url>jdbc:mysql://localhost:3306/maven?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&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&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true</jdbc.url>
</properties>
</profile>
</profiles>
6.3 加载指定环境
-
作用:加载指定环境配置。
-
命令:
mvn 指令 -P 环境定义id
- 示例:
mvn install -P test_env
7 跳过测试
7.1 跳过测试环境的应用场景
-
整体模块功能未开发。
-
模块中某个功能未开发完毕。
-
单个功能更新调试导致其他功能失败。
-
快速打包。
-
……
7.2 跳过测试
7.2.1 使用命令跳过测试
- 命令:
mvn 指令 -D skipTests
注意事项:执行的指令生命周期必须包含测试环节。
- 示例:
mvn install -D skipTests
7.2.2 IDEA中使用界面跳过测试
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 私服
8.1 Nexus
-
Nexus是Sonatype公司的一款Maven私服产品。
-
下载地址。
8.2 Nexus的安装、启动和配置
- 解压即可使用(系统为win10)。
- 启动服务器:
cd nexus-3.30.1-01
nexus.exe /run nexus
-
访问服务器(默认端口为8081):
-
修改基础配置信息:安装路径下的etc目录中的
nexus-default.properties
文件保存有nexus基础配置信息,例如:默认访问端口。 -
修改服务器运行配置信息:安装路径下bin目录中的
nexus.vmoptions
文件保存有nexus服务器启动的配置信息,例如:默认占用内存空间。
8.3 私服资源获取
8.4 仓库的分类
-
宿主仓库hosted:保存无法从中央仓库获取的资源。
-
自主研发。
-
第三方非开源项目。
-
-
代理仓库proxy:代理远程仓库,通过nexus访问其它公共仓库,例如:中央仓库。
-
仓库组group:
-
将若干个仓库组成一个群组,简化配置。
-
仓库组不能保存资源,属于设计型仓库。
-
8.5 登录Nexus
8.5 创建仓库
8.6 将创建的仓库放入到maven-public仓库组中
8.7 手动上传组件
8.8 IDEA环境中资源上传和下载
8.8.1 概述
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
评论区