Todo el proceso de construcción del marco de SSM

1. Crea un proyecto

Crear proyecto Maven, marque Crear un proyecto simple, la identificación del grupo es cn.tedu.spring, la identificación del artefacto es SpringMVC-02, la selección de empaquetado de guerra.

Cuando se crea el proyecto, primero genere el archivo web.xml; haga clic derecho en el proyecto para configurar las propiedades, verifique Tomcat en Targeted Runtimes; agregue la dependencia spring-webmvc en pom.xml (se recomienda usar la versión 4.2 o superior https: // blog.csdn.net/qq_37669050/article/details/102384613); Copie el archivo de configuración de Spring en el proyecto anterior al nuevo proyecto actual (https://blog.csdn.net/qq_37669050/article/details/102594279).

2. Configurar DispatcherServlet

En primer lugar, debe configurar DispatcherServlet en web.xml. La configuración básica es la siguiente:

    <servlet-mapping>
    	<servlet-name>SpringMVC</servlet-name>
    	<url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <servlet>
  	<servlet-name>SpringMVC</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<init-param><!-- param:参数 -->
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:spring-ajax.xml</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>SpringMVC</servlet-name>
  	<url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <!-- 解决SpringMVC中文乱码问题的过滤器 -->
  <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>

El marco SpringMVC se basa en Spring y se configurará en el archivo de configuración de Spring (spring-mvc.xml) en el futuro. Se espera que el archivo de configuración de Spring se cargue cuando se inicie el proyecto. Sí: En la configuración anterior, configure el parámetro de inicialización contextConfigLocation para DispatcherServlet. El valor de este parámetro es la ubicación del archivo de configuración de Spring. Una vez configurado este parámetro, cuando se inicialice DispatcherServlet, el archivo de configuración de Spring se cargará automáticamente. Luego, configure DispatcherServlet para que se inicie de forma predeterminada, es decir, cuando se inicie Tomcat, inicializará DispatcherServlet, lo que hará que spring-mvc.xml se lea y cargue.

La configuración complementaria es:

<servlet>
	<servlet-name>SpringMVC</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>
	<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
	<servlet-name>SpringMVC</servlet-name>
	<url-pattern>*.do</url-pattern>
</servlet-mapping>

Nota: ¡Se distingue el orden de la configuración y los nodos anteriores!

Si necesita probar si la configuración anterior es exitosa, primero puede configurar el escaneo de componentes en spring-mvc.xml:

<!-- 组件扫描 -->
<context:component-scan base-package="cn.tedu.spring"/>

Luego, cree cualquier clase en el paquete escaneado, agregue anotaciones de Compontent a la clase, personalice el método de construcción y genere una cadena, por ejemplo:

package cn.tedu.spring;

import org.springframework.stereotype.Component;

@Component
public class User {
	
	public User() {
		System.out.println("创建了User类的对象!");
	}

}

Finalmente, inicie el proyecto y debería poder ver el resultado en el método de construcción en la consola de Eclipse.

3. Recibir solicitudes enviadas por usuarios a través del controlador.

A través de la anotación @RequestMapping, puede establecer la relación de mapeo entre la ruta de solicitud y el método de procesamiento de la solicitud, por lo que en la programación real, no es necesario utilizar explícitamente HandlerMapping.

Por lo tanto, puede crear directamente la clase de controlador cn.tedu.spring.HelloController y agregar la anotación @Controller a la clase, de modo que el marco Spring creará el objeto de la clase del controlador y, finalmente, será reconocido y utilizado por el marco SpringMVC.

Luego, agregue un método para procesar la solicitud en la clase del controlador, sobre el diseño del método:

  1. Debería utilizar permisos públicos;
  2. Utilice temporalmente String como tipo de valor de retorno;
  3. El nombre del método se puede personalizar;
  4. La lista de parámetros del método está temporalmente vacía.

Puede agregar métodos:

public String showHello() {
	return null;
}

Necesita usar @RequestMapping antes del método para configurar la relación de mapeo, luego:

@RequestMapping("hello.do")
public String showHello() {
	System.out.println("HelloController.showHello()");
	return null;
}

Nota: Las clases de controlador anteriores deben colocarse en el paquete cn.tedu.spring, ¡porque el escaneo de componentes se configuró previamente en este paquete! Generalmente, la clase de control debe usar la palabra Controlador como sufijo del nombre. Las clases de controlador solo pueden usar la anotación @Controller, no @Component u otras anotaciones.

Una vez finalizado, reinicie el proyecto, abra el navegador y pruebe a través de http: // localhost: 8080 / SpringMVC-02 / hello.do. El resultado correcto debería ser: En la consola de Eclipse, puede ver el resultado del método anterior ! Si la página no ha sido procesada, puede ocurrir un error 404.

4. Página de visualización

De forma predeterminada, si el método en el controlador devuelve datos de tipo String, significa "nombre de vista", y el marco necesita determinar qué componente de vista es responsable de mostrar la respuesta final según el nombre de la vista. Necesita configurar en spring-mvc.xml:

<!-- 模版解析器:ServletContextTemplateResolver -->
<!-- 配置ServletContextTemplateResolver时,HTML文件应该以webapp文件夹为参考 -->
<!-- 配置ClassLoaderTemplateResolver时,HTML文件应该以项目的resources文件夹为参考 -->
<bean id="templateResolver"
	class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
	<property name="prefix" 
		value="/WEB-INF/templates/" />
	<property name="suffix" 
		value=".html" />
	<property name="characterEncoding" 
		value="utf-8" />
	<property name="templateMode" 
		value="HTML" />
	<property name="cacheable" 
		value="false" />
</bean>

<!-- Spring模版引擎:SpringTemplateEngine -->
<bean id="templateEngine"
	class="org.thymeleaf.spring4.SpringTemplateEngine">
	<property name="templateResolver"
		ref="templateResolver" />
</bean>

<!-- 视图解析器:ThymeleafViewResolver -->
<bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
	<property name="templateEngine"
		ref="templateEngine" />
</bean>

Luego, cambie el valor de retorno del método que maneja la solicitud en el controlador a "hola".

Por último, cree hello.html en la carpeta webapp / WEB-INF / templates / y diseñe el contenido de la página usted mismo en HTML. Pruebe a través de http: // localhost: 8080 / SpringMVC-02 / hello.do.
Para crear un proyecto Maven, use cn.tedu.mybatis para Group Id, MyBatis para Artifact Id y war para Packaing (también puede elegir jar).

MyBatis

Una vez creado el proyecto, debe: generar un archivo web.xml; agregar dependencias en pom.xml; copiar spring-mvc.xml del proyecto anterior al proyecto actual; agregar el entorno operativo Tomcat (es posible que este caso no sea necesario); abrir el anterior En web.xml del proyecto, copie la configuración de DispatcherServlet y CharacterEncodingFilter en el proyecto actual.

Esta vez necesitas agregar dependencias:

<!-- MyBatis -->
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.5.1</version>
</dependency>

<!-- MyBatis整合Spring -->
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
	<version>2.0.1</version>
</dependency>

<!-- SpringJDBC -->
<!-- 注意:与当前项目使用的其它spring依赖保持相同的版本号 -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jdbc</artifactId>
	<version>4.3.10.RELEASE</version>
</dependency>

<!-- mysql连接 -->
<!-- 可选版本号:8.0.12~8.0.16,5.1.4~5.1.6 -->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>8.0.16</version>
</dependency>

<!-- 数据库连接池 -->
<dependency>
	<groupId>commons-dbcp</groupId>
	<artifactId>commons-dbcp</artifactId>
	<version>1.4</version>
</dependency>

<!-- 单元测试 -->
<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.12</version>
</dependency>

Luego, copie spring-mvc.xml para obtener spring-dao.xml, ¡elimine la configuración en el archivo spring-dao.xml!

  1. Conectividad de base de datos

Cree un archivo db.properties en src / main / resources para configurar la información relacionada sobre la conexión de la base de datos:

url=jdbc:mysql://localhost:3306/tedu_ums?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
driver=com.mysql.cj.jdbc.Driver
username=root
password=root
initialSize=2
maxActive=10

Al configurar el atributo del controlador, debe prestar atención a la versión de mysql-connector-java utilizada. Si está usando la versión 5.x, el valor del atributo debe ser com.mysql.jdbc.Driver, si está usando 6.xo superior Versión, el valor del atributo debe ser com.mysql.cj.jdbc.Driver, si no está seguro de qué valor debe usarse, puede expandir el archivo jar de mysql-connector-java para observar. Además, hay un archivo META-INF / services / java.sql.Driver en el paquete jar, que registra la clase Driver que se debe usar cuando se usa el paquete jar.

Si está utilizando mysql-connector-java de la versión 6.xo superior, debe establecer explícitamente el valor del parámetro serverTimezone al configurar la URL para conectarse a la base de datos. Los valores disponibles en China continental son Asia / Shanghai y Asia / Chongqing.

Necesita agregar configuración en spring-dao.xml, lea la información de configuración en las db.properties anteriores:

<util:properties id="config" location="classpath:db.properties" />

Luego, al conectarse a la base de datos, la fuente de datos utilizada será BasicDataSource, debe inyectar la información de conexión de la base de datos leída anteriormente en las propiedades de BasicDataSource:

<!-- 配置数据源,保证其能够连接数据库 -->
<bean id="dataSource"
	class="org.apache.commons.dbcp.BasicDataSource">
	<property name="url" value="#{config.url}" />
	<property name="driverClassName" value="#{config.driver}" />
	<property name="username" value="#{config.username}" />
	<property name="password" value="#{config.password}" />
	<property name="initialSize" value="#{config.initialSize}" />
	<property name="maxActive" value="#{config.maxActive}" />
</bean>

Luego, puede escribir y ejecutar pruebas unitarias en la clase de prueba para verificar si la configuración es correcta:

public class Tests {
	
	ClassPathXmlApplicationContext ac;
	
	@Before
	public void doBefore() {
		ac = new ClassPathXmlApplicationContext(
				"spring-dao.xml");
	}
	
	@After
	public void doAfter() {
		ac.close();
	}
	
	@Test
	public void getConnection() throws SQLException {
		BasicDataSource dataSource = ac.getBean("dataSource", BasicDataSource.class);
		Connection conn = dataSource.getConnection();
		System.out.println(conn);
	}

}
  1. Interfaz y método abstracto

Objetivo provisional: utilice MyBatis para insertar nuevos datos de usuario en la tabla de datos.

Al utilizar MyBatis, debe definir métodos abstractos correspondientes a cada función, ¡y estos métodos abstractos deben definirse en la interfaz!

Primero, debe crear el archivo de interfaz cn.tedu.mybatis.UserMapper y luego definir el método abstracto de "insertar datos de usuario" en la interfaz. El principio de diseño del método abstracto:

  • Si necesita realizar una operación de agregar, eliminar o modificar tipos, use Integer como el valor de retorno del método, que indicará el "número de filas afectadas", que puede usarse para juzgar el éxito de la operación, o puede diseñarse como un int, o puede diseñarse Void significa que no se preocupa por el número de filas afectadas;
  • El nombre del método se puede personalizar y no se puede sobrecargar;
  • La lista de parámetros se determina de acuerdo con los parámetros requeridos. Puede consultar los signos de interrogación en SQL al aprender JDBC antes y escribir qué parámetros.

La instrucción SQL que debe ejecutarse para "insertar datos de usuario" es aproximadamente:

insert into (username, password, age, phone, email) values (?,?,?,?,?)

El método abstracto debe escribir 5 parámetros. Si se agregan más campos a la tabla de datos más adelante, se deben escribir más parámetros. Este enfoque es defectuoso. Estos parámetros deben encapsularse en la clase cn.tedu.mybatis.User. en:

public class User {

	private Integer id;
	private String username;
	private String password;
	private Integer age;
	private String phone;
	private String email;

}

El método abstracto se puede diseñar como:

Integer insert(User user);

A continuación, debe configurar "dónde está el archivo de la interfaz" para asegurarse de que la interfaz se pueda encontrar cuando el marco MyBatis funcione:

<!-- 配置MapperScannerConfigurer -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<!-- 配置接口文件在哪里 -->
	<property name="basePackage"
		value="cn.tedu.mybatis" />
</bean>
  1. Configurar la asignación de SQL

Descargue el paquete de compresión de archivos XML para escribir archivos de configuración desde http://doc.tedu.cn/config/mybatis-mapper.zip.

Cree una carpeta llamada mappers en src / main / resources y copie SomeMapper.xml en el paquete comprimido a esta carpeta.

Nota: El archivo XML utilizado para configurar sentencias SQL en MyBatis debe incluir la siguiente sentencia, de lo contrario no funcionará correctamente.

<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

Al configurar el archivo XML, primero debe agregar un nodo raíz y debe configurar el atributo de espacio de nombres. El valor del atributo indica a qué archivo de interfaz corresponde:

<!-- namespace:对应哪个接口 -->
<mapper namespace="cn.tedu.mybatis.UserMapper">

</mapper>

Luego, de acuerdo con el tipo de instrucción SQL que debe ejecutarse, seleccione el nodo secundario de ,,, y. El atributo id del nodo es el nombre del método abstracto. Luego, escriba la instrucción SQL que debe ejecutarse en el contenido del nodo. Use # {} en la parte del parámetro. Formato de marcador de posición, el nombre dentro del marcador de posición es el nombre del atributo en el parámetro de método Clase de usuario:

<!-- id:抽象方法的名称 -->
<insert id="insert">
	INSERT INTO t_user (
		username, password, 
		age, phone, 
		email
	) VALUES (
		#{username}, #{password},
		#{age}, #{phone},
		#{email}
	)
</insert>

Luego, debe configurar "¿Dónde está el archivo XML" y "Qué fuente de datos se utiliza para conectarse a la base de datos" cuando se ejecuta el marco! Por lo tanto, debe agregar la configuración en spring-dao.xml:

<!-- 配置SqlSessionFactoryBean -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
	<!-- 配置XML文件在哪里 -->
	<property name="mapperLocations" 
		value="classpath:mappers/*.xml" />
	<!-- 配置使用哪个数据源连接数据库 -->
	<property name="dataSource"
		ref="dataSource" />
</bean>

Finalmente, escriba y ejecute pruebas unitarias:

@Test
public void insert() {
	User user = new User();
	user.setUsername("zhaoqi");
	user.setPassword("888999");
	user.setPhone("010-88888888");
	Integer rows = userMapper.insert(user);
	System.out.println("rows=" + rows);
}

Supongo que te gusta

Origin blog.csdn.net/qq_37669050/article/details/102594166
Recomendado
Clasificación