Proceso de construcción del marco del MUS
primavera+primaveraMVC+MyBatis
Herramientas de preparación:
Versión empresarial de idea + Maven (imagen de Ali + variables de entorno) + Tomcat (variables de entorno local)
1. idea para crear un proyecto
2. Verifique la configuración de IDEA-Maven
3. Elimine la clase de caso de Servlet generada y reescriba index.jsp
contenido del cuerpo vacío index.jsp
4. Introducir la dependencia Spring+SpringMVC+MyBatis+MySQL+JSON
pom.xml agregar dependencias
contenido de configuración de propiedades
<properties>
<spring-version>5.2.3.RELEASE</spring-version>
<aspectj-version>1.8.9</aspectj-version>
<junit-version>4.11</junit-version>
</properties>
1. Dependencias de primavera
<!-- Spring依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-version}</version>
</dependency>
2. Dependencia de Spring MVC
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-version}</version>
</dependency>
3. Aspecto del paquete proxy
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version></version>
</dependency>
4. paquete de prueba junit
<!--测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
Cinco, paquetes relacionados con servlet-api
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
6. Paquete MySQL-j
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
7. Paquete json y @Responsebody (jackson)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
<!-- Fastjoson JSON处理工具 --><!-- TODO:gai -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.78</version>
</dependency>
8. Carga y descarga de archivos
<!-- 文件上传下载-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
9.paquete lombok
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
10. Paquete Mybatis
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- mybatis集成spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
11. Grupo de conexiones Ali druida
<!-- 阿里的druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
<scope>compile</scope>
</dependency>
12. Paquete de verificación de datos (atributo de verificación requerido, verificación por correo electrónico)
<!-- 数据校验 -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.1.0.CR2</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.0.Final</version>
</dependency>
13. Captcha
<!--Easy-Captcha Java图形验证码-->
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency>
14. Paquete de registro
<!--日志-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
15.mybatis buscapersonasHepler
<!-- github分页 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.2.1</version>
</dependency>
16. Generador de documentación API-Swagger
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
5. Modificar la configuración de Tomcat.
6. Cree varios archivos de configuración.
1.archivo de configuración de spring (contiene la función mvc)
El contenido predeterminado del archivo de configuración de Spring, el nombre del archivo es spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 集成SpringMV的配置 -->
</beans>
2. Cree el archivo de configuración mybatis
Nombre del archivo: Mybatis.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 集成SpringMVC时Mybatis配置文件也将使用SpringBean的方式来配置 -->
</beans>
3. Archivo de configuración de conexión a la base de datos
Nombre: base de datos.properties
url= jdbc:mysql://localhost:3306/javatest?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username=root
password=cxk666
driver=com.mysql.cj.jdbc.Driver
7. Modifique el archivo de configuración web: web.xml
Establezca el nombre del proyecto y cargue el archivo de configuración mybatis
<!-- 设置项目名称 -->
<display-name>ssm</display-name>
<!-- 配置SpringMVC容器加载时的初始化参数 -->
<context-param>
<!-- 加载mybatis配置文件 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:mybatis.xml</param-value>
</context-param>
<!-- 能够将ServletContext读取的内容加载到SpringMVC的application对象中 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Agregar la configuración del controlador frontal springMVC
<!-- 配置前端控制器 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 当前端控制器加载时要加载springMVC配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</init-param>
<!-- 让前端控制器Servlet在项目启动加载阶段就进行实例 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
filtro de conjunto de codificación de caracteres
<!-- 过滤器:字符编码集过滤器(自动将请求和响应的字符编码集按照规则编解码) -->
<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>
<!-- 是否进行强制字符集转换 -->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Un filtro que implementa la especificación RestFul.
<!-- RestFul规范请求:让mvc支持put、delete等等rest规范的请求 -->
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
8. Defina la ruta de la estructura del paquete del proyecto.
definición del nodo del paquete raíz
Cada método de definición de subnodo empresarial
Estructura del paquete principal del marco
cambios en el directorio de la aplicación web
9. Configurar el empaquetado de Maven
Los archivos estáticos en el directorio del código fuente deben participar en el paquete (como: archivo xml de mapeo mybatis), el directorio estático debe agregarse al paquete y el directorio de recursos debe agregarse al paquete.
Al final del archivo pom.xml (en el mismo nivel que la etiqueta de dependencias, después de eso, en la etiqueta del proyecto)
<build>
<!-- 静态资源参与打包 -->
<resources>
<!-- resources目录下配置文件参与打包 -->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.js</include>
<include>**/*.css</include>
<include>**/*.html</include>
</includes>
<filtering>false</filtering>
</resource>
<!-- 源代码目录参与打包 -->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.js</include>
<include>**/*.css</include>
<include>**/*.html</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<!-- maven打包工具组件 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
</plugin>
</plugins>
</build>
10. Escriba archivos de configuración SpringMVC
ver solucionador
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp" />
</bean>
Anotaciones automáticas de escaneo de paquetes
<!-- 自动实现ioc注入:@Controller @Component @Service -->
<context:component-scan base-package="com.huawei.ssmdemo2023" />
Anotaciones relacionadas con la validación de datos, inyección de dependencia
<mvc:annotation-driven />
Configuración de carga y descarga de archivos
<!-- 文件上传下载 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5000000000" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
Configurar el mapeo de acceso a recursos estáticos
<!-- 静态资源目录配置(注意:之后controller请求路径不要出现static路径) -->
<mvc:resources location="/static/" mapping="/static/**" />
11. Escribe la configuración de mybatis.
1. Vuelva a escribir el archivo base de datos.properties
url= jdbc:mysql://localhost:3306/javatest?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username=root
password=cxk666
driver=com.mysql.cj.jdbc.Driver
#定义初始连接数
initialSize=2
#定义最大连接数
maxActive=30
#定义最小空闲
minIdle=1
#定义最长等待时间
maxWait=60000
2. Cargue el proyecto del archivo de configuración de la base de datos en el archivo de configuración mybatis.
<!-- 加载database.proterties配置项目内容 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:database.properties" />
</bean>
3. Configure el grupo de conexiones Ali druid en el archivo de configuración mybatis
<!-- druid连接池配置 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<!-- 数据源连接属性 -->
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="${initialSize}" />
<property name="minIdle" value="${minIdle}" />
<property name="maxActive" value="${maxActive}" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="${maxWait}" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<!-- 检测空闲是否开启 -->
<property name="testWhileIdle" value="true" />
<!-- 这里建议配置为TRUE,防止取到的连接不可用 -->
<property name="testOnBorrow" value="true" />
<property name="testOnReturn" value="false" />
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="50" />
<!-- 这里配置提交方式,默认就是TRUE,可以不用配置 -->
<property name="defaultAutoCommit" value="true" />
<!-- 验证连接有效与否的SQL,不同的数据配置不同 mysql:select 1 ;oracle : select 1 from dual -->
<property name="validationQuery" value="select 1 from dual" />
<property name="filters" value="wall,stat" />
<property name="proxyFilters">
<list>
<ref bean="logFilter" />
<ref bean="stat-filter" />
</list>
</property>
</bean>
<!-- 慢SQL记录 -->
<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
<!-- 慢sql时间设置,即执行时间大于50毫秒的都是慢sql -->
<property name="slowSqlMillis" value="50"/>
<property name="logSlowSql" value="true"/>
</bean>
<!-- 启用慢sql日志记录时,需要引入slf4j日志包 -->
<bean id="logFilter" class="com.alibaba.druid.filter.logging.Slf4jLogFilter">
<property name="dataSourceLogEnabled" value="true" />
<property name="statementExecutableSqlLogEnable" value="true" />
</bean>
4. Configure el centro de monitoreo de datos del grupo de conexiones druidas en el archivo web.xml
<!-- druid连接池数据监控中心 -->
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<!-- 监控中心的进入路径 -->
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
5. Configuración de Mybatis: instancia de clase de fábrica SQLSessionFactory
<!-- spring和mybatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- ref指向数据源配置id -->
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描包中的类生成别名,如:com.a.User包 别名可以是User或user -->
<property name="typeAliasesPackage" value="com.huawei.ssmdemo2023" />
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:com/huawei/ssmdemo2023/mybatis/dao/**/*.xml"></property>
</bean>
6. Configuración de Mybatis: clase SQLSession
<!-- SQLsession配置规则 -->
<!-- DAO接口所在的包名,spring会自动查找其下的类,!注意这句 value="sqlSessionFactory",不是ref而是value -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指向mybatis接口文件所在的包 -->
<property name="basePackage" value="com.huawei.ssmdemo2023.mybatis.dao" />
<!-- value指向配置sqlSessionFactory类的id -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
11. MyBatis integra la herramienta de paginación Pagehepler
1. Introducir dependencias de herramientas de paginación.
<!-- github分页 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.2.1</version>
</dependency>
2. Configure el interceptor de paginación en el archivo de configuración mybatis
<!-- pageHepler分页拦截器 -->
<bean id="pageInterceptor" class="com.github.pagehelper.PageHelper">
<property name="properties">
<props>
<prop key="helperDialect">mysql</prop>
<prop key="reasonable">true</prop>
<prop key="supportMethodsArguments">true</prop>
<prop key="params">count=countSql</prop>
</props>
</property>
</bean>
3. Agregue un elemento de configuración de herramienta de paginación en la configuración de SQLSessionFactory
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
... ...
<!-- 配置分页工具 -->
<property name="plugins" ref="pageInterceptor" />
</bean>
12. Abra @Mapper para configuración.
Escriba en el archivo de configuración mybatis
<!-- 自动扫描@Mapper注解,将mybatis接口自动实现实例且交由给springMVC管理 -->
<context:component-scan base-package="com.huawei.ssmdemo2023.mybatis.dao">
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Service" />
</context:component-scan>
13. Activa el registro
1. Cree un log4j.properties en el directorio de recursos.
######################## ????DEBUG????????consoleh?file?????, console?file?????????
log4j.rootLogger=DEBUG,console,file
log4j.appender.syslog.encoding=UTF-8
########################??????????
log4j.appender.console = org.apache.log4j.ConsoleAppender
#??????
log4j.appender.console.Target = System.out
#?DEBUG????
log4j.appender.console.Threshold = DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
#????
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
# mybatis日志集成
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
2. Caso completo de desarrollo de procesos de negocio.
1. Caso 1: consultar la información de un estudiante a través de la identificación del estudiante
capa controladora
/**
* 模块名称: 学生信息管理-控制器
* 模块类型:C-控制器
* 编码人:高靖博
* 创建时间:2023/2/22
* 联系电话:18587388612
*/
@Controller
@RequestMapping("/student")
@Slf4j //提供一个日志log对象注入到当前类
public class StudentController {
// 注入业务层实例
@Resource(name = "studentServiceImpl")
private StudentService studentService;
@RequestMapping(value = "/getStudentByID",method = RequestMethod.GET)
@ResponseBody
public MyResult getStudentByID(String id){
log.debug("学生信息管理:获取学生信息通过学生id [param:id"+id+"]");
MyResult result = new MyResult();
//调用业务层
StudentDO studentDO = studentService.getStudentByID(id);
if(studentDO==null){
result.setCode(500);
result.setMsg("没有查询到任何学生数据!");
}else{
result.setMsg("学生信息查询成功!");
result.setData(studentDO);
}
return result;
}
}
interfaz empresarial
public interface StudentService {
StudentDO getStudentByID(String id);
}
capa de realización empresarial
@Service
public class StudentServiceImpl implements StudentService {
// mybatis接口使用自动注入的方法实现实例注入!!!!!!!!!!!!
@Autowired
private StudentMapper studentMapper;
public StudentDO getStudentByID(String id) {
StudentDO studentByID = studentMapper.getStudentByID(id);
return studentByID;
}
}
Interfaz mybatis-dao (el nombre de la interfaz es el mismo que el nombre del archivo xml)
@Mapper
public interface StudentMapper {
StudentDO getStudentByID(String id);
}
archivo de mapeo mybatis-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.huawei.ssmdemo2023.mybatis.dao.student.StudentMapper">
<select id="getStudentByID" resultType="com.huawei.ssmdemo2023.mybatis.domain.student.StudentDO">
select * from student where id = #{id}
</select>
</mapper>