La primera vez que utilizo el marco SSM para escribir adiciones, eliminaciones, modificaciones y paginación de listas.

Consejo: Una vez escrito el artículo, la tabla de contenido se puede generar automáticamente. Cómo generarla puede consultar el documento de ayuda a la derecha.


prefacio

Este es un proyecto práctico para aprender a usar SSM antes de realizar el proyecto de diseño del curso. Incluye la construcción del marco, la adición, eliminación, modificación y paginación de la lista, y la realización de funciones de paginación y comunicación correcta.


1. Construcción del marco

Mi construcción del marco SSM se aprende en la estación B. No es necesario que yo mismo escriba la construcción del marco, basta con copiar el marco de otros lugares y aprenderlo, basta con conocer el papel de cada posición en el marco. 

construcción del proyecto ssm_哔哩哔哩_bilibili

Adjunto aquí un video del estudio marco, la conferencia de UP es muy clara y hay documentos correspondientes.

Hay tres secciones en el marco SSM: capa Dao, capa de servicio y capa de controlador.

La capa Dao es la capa inferior, responsable de llamar y modificar los datos en la base de datos; la capa de Servicio es la capa intermedia, responsable de la transmisión de datos y la conexión entre la capa Dao y la capa Controlador, y la capa Controlador es la capa superior , responsable de procesar los datos relevantes de la página web y devolver datos a las páginas web.

Por ejemplo, restaurantes.

Cuando un cliente (página web) viene a comer, primero pide comida (solicitud de datos) al camarero (capa Controlador), y el camarero escribe la comida ordenada por el cliente (solicitud de datos) en la ventana trasera de la cocina (capa Servicio). y la cocina trasera (capa Dao) de acuerdo con los requisitos de la ventana Procese los ingredientes (datos de la base de datos) y colóquelos en la ventana, y el camarero llevará los platos a los clientes.

¿Sería más fácil entender el papel general del MUS de esta manera?

A continuación, hablemos del proyecto específico, una lista de información de los estudiantes. Se recomienda aprender a integrar después de aprender las tres secciones principales de Spring, SpringMVC y MyBatis.

 Al final, mi archivo con marco se creó como se muestra en la imagen a continuación.

El archivo de página jsp se muestra en la figura siguiente. Los archivos de configuración posteriores establecerán el prefijo y el sufijo del archivo jsp.

La función de web.xml es configurar DispatcherServlet, que se utiliza para interceptar solicitudes de URL de páginas web y distribuirlas.

El siguiente filtro se utiliza para resolver el problema de la codificación confusa.

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>springLearn</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
	 <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:applicationContext.xml</param-value>
	    </init-param>
	    <load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
	    <servlet-name>DispatcherServlet</servlet-name>
	    <!--注意这里不能配置成/*-->
	    <url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<!--encodingFilter-->
	<filter>
	    <filter-name>encodingFilter</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>encodingFilter</filter-name>
	    <url-pattern>/*</url-pattern>
	</filter-mapping>
  
</web-app>

Este marco se escribe dividiendo el contenido de applicationContext.xml en tres partes, y este archivo integra los tres subarchivos.

applicationContext.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:context="http://www.springframework.org/schema/context" 
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx.xsd">
        
        <import resource="classpath:spring-dao.xml"/>
        <import resource="classpath:spring-service.xml"/>
        <import resource="classpath:spring-mvc.xml"/>
        
</beans>

 El archivo Mybatis-config.xml se utiliza para configurar alias y escanear archivos de interfaz de capa dao

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
	<!-- 配置别名 -->
    <typeAliases>
    	<package name="com.pojo"/>
	</typeAliases>
	<!-- 配置扫描dao层接口 -->
	<mappers>
	    <package name="com.dao"/>
	</mappers>
</configuration>

 spring-dao.xml se utiliza para la configuración de archivos relacionados en la parte inferior del marco SSM, es decir, la capa conectada a la base de datos.

<?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:context="http://www.springframework.org/schema/context" 
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx.xsd">
        
        <!-- 数据库连接池 -->
		<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
		    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
            <!-- cj是mysql8.0的一个特性 -->
		    <property name="url" value="jdbc:mysql://localhost:3306/student?serverTimezone=UTC"/>
		    <property name="username" value="root"/>
		    <property name="password" value="123456"/>
		</bean>
		
		<!-- 配置SqlSessionFactory对象 -->
		<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		    <property name="dataSource" ref="dataSource" />
		    <!-- mybatis配置文件的位置 -->
		    <property name="configLocation" value="classpath:mybatis-config.xml"/>
		</bean>
		
		
		<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        	<property name="basePackage" value="com.dao"/>
    	</bean>

		
		
</beans>

spring-mvc.xml es la configuración del analizador de vistas y las anotaciones, es decir, la configuración del prefijo y sufijo del archivo jsp y el escaneo de alias del método de la clase de entidad de la capa pojo, que es más conveniente para escribir métodos.

<?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:context="http://www.springframework.org/schema/context" 
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx.xsd">

   		<!-- 1.开启SpringMVC注解驱动 -->
		<mvc:annotation-driven/>
		
		<!-- 2.静态资源默认servlet配置-->
		<mvc:default-servlet-handler/>
		
		<!-- 3.配置jsp 显示ViewResolver视图解析器 -->
		<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
		    <!-- /WEB-INF/jsp/+视图名+.jsp -->
		    <!-- 前缀 -->
		    <property name="prefix" value="/WEB-INF/jsp/" />
		    <!-- 后缀 -->
		    <property name="suffix" value=".jsp" />
		</bean>
		
		<context:component-scan base-package="com.controller"></context:component-scan>
		

</beans>

spring-service es el escaneo del método de servicio

<?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:context="http://www.springframework.org/schema/context" 
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx.xsd">
        
        <context:component-scan base-package="com.service"></context:component-scan>
        
</beans>

En segundo lugar, el método específico para escribir los pasos.

1. Método de la capa del controlador

@RequestMapping completa la URL de la página web, es decir, ingresa en el navegador http://localhost:8080/StudentSSM/pagelistStudent , donde StudentSSM es el nombre del proyecto y la lista de páginas detrás de él es el contenido de @

La página que se redirigirá es el contenido de setViewName, que debe ser el nombre de la página jsp (dado que el prefijo y el sufijo se configuraron en el archivo de configuración, simplemente complete el nombre de la página jsp aquí)

package com.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.pojo.Page;
import com.pojo.Student;
import com.service.StudentService;

@Controller
public class Studentcontroller {
	@Autowired
	StudentService studentservice;
	@RequestMapping("/listStudent")
	public ModelAndView listStudent() {
		ModelAndView mav = new ModelAndView();
		List<Student> stduents=studentservice.list();
		mav.addObject("students",stduents);
		mav.setViewName("listStudent");
		return mav;
	}
	@RequestMapping("/pagelistStudent")
	public ModelAndView pagelistStudent(Page page) {
		
		ModelAndView mav = new ModelAndView();
		int total = studentservice.total();
        //设置页码防溢出
		if(page.getstart()<0)
			page.setstart(0);
		if(page.getstart()>total)
			page.setstart(total-1);
		page.calculatelast(total);
		List<Student> pagestudents=studentservice.pagelist(page);
		mav.addObject("pagestudents",pagestudents);
		mav.setViewName("listStudent");
		return mav;
	}
	@RequestMapping("/getStudent")
	public ModelAndView getStudent(int sno) {
		ModelAndView mav = new ModelAndView();
		Student student = studentservice.get(sno);
		List<Student> get = new ArrayList<Student>();
		get.add(student);
		mav.addObject("get",get);
		mav.setViewName("getStudent");
		return mav;
	}
	@RequestMapping("/deleteStudent")
	public ModelAndView deleteStudent(int sno,Page page) {
		ModelAndView mav = new ModelAndView();
		studentservice.delete(sno);
		int total = studentservice.total();
		if(page.getstart()<0)
			page.setstart(0);
		if(page.getstart()>total)
			page.setstart(total-1);
		page.calculatelast(total);
		List<Student> delete=studentservice.pagelist(page);
		mav.addObject("delete",delete);
		mav.setViewName("listStudent");
		return mav;
	}
	@RequestMapping("/beforeinsertStudent")
	public ModelAndView beforeinsertStudent() {
		ModelAndView mav = new ModelAndView();
		mav.setViewName("insertStudent");
		return mav;
	}

	@RequestMapping("/insertStudent")
	public ModelAndView insertStudent(int sno,String sname,Page page) {
		ModelAndView mav = new ModelAndView();
		studentservice.insert(sno,sname);
		int total = studentservice.total();
		if(page.getstart()<0)
			page.setstart(0);
		if(page.getstart()>total)
			page.setstart(total-1);
		page.calculatelast(total);
		List<Student> insert=studentservice.pagelist(page);
		mav.addObject("insert",insert);
		mav.setViewName("listStudent");
		return mav;
	}
	@RequestMapping("/beforeupdateStudent")
	public ModelAndView beforeupdateStudent(int id,int sno,String sname) {
		ModelAndView mav = new ModelAndView();
		mav.addObject("id",id);
		mav.addObject("sno",sno);
		mav.addObject("sname",sname);
		mav.setViewName("updateStudent");
		return mav;
	}
	@RequestMapping("/updateStudent")
	public ModelAndView updateStudent(int id,int sno,String sname) {
		ModelAndView mav = new ModelAndView();
		studentservice.update(id,sno,sname);
		List<Student> update = studentservice.list();
		mav.addObject("update",update);
		mav.setViewName("listStudent");
		return mav;
	}
}

2. Método de capa de servicio

 A través de la interfaz para realizar el método de llamar al método de la capa Controlador y el método de llamar a la capa Dao

package com.service;

import java.util.List;

import com.pojo.Page;
import com.pojo.Student;

public interface StudentService {
	
	List<Student> list();
	
	List<Student> pagelist(Page page);
	int total();
	
	void delete(int sno);
	
	Student get(int sno);
	
	void insert(int sno,String sname);
	
	void update(int id,int sno,String sname);

}
package com.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.dao.StudentMapper;
import com.pojo.Page;
import com.pojo.Student;
import com.service.StudentService;

@Service
public class StudentServiceImpl implements StudentService{
	
	@Autowired
	StudentMapper studentmapper;
	
	@Override
	public List<Student> list(){
		return studentmapper.list();
	}
	
	@Override
	public Student get(int sno) {
		return studentmapper.get(sno);
	}
	
	@Override
	public void delete(int sno) {
		studentmapper.delete(sno);
	}
	
	@Override
	public void insert(int sno,String sname) {
		studentmapper.insert(sno,sname);
	}
	
	@Override
	public void update(int id,int sno,String sname) {
		studentmapper.update(id,sno,sname);
	}

	@Override
	public List<Student> pagelist(Page page) {
		// TODO Auto-generated method stub
		return studentmapper.pagelist(page);
	}

	@Override
	public int total() {
		// TODO Auto-generated method stub
		return studentmapper.total();
	}
}

3. Método de la capa Dao

 La capa Dao llama al método subyacente.

package com.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.pojo.Page;
import com.pojo.Student;

public interface StudentMapper {
	
	public List<Student> list();
	
	public List<Student> pagelist(Page page);
	
	public int total();
	
	public void delete(int sno);
	
	public Student get(int sno);
	
	public void insert(@Param("sno")int sno,@Param("sname")String sname);
	
	public void update(@Param("id")int id,@Param("sno")int sno,@Param("sname")String sname);
	
	
}
<?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">
  <!-- namespace:命名空间,填写对应接口的全限定类名 -->      
<mapper namespace="com.dao.StudentMapper">
	<!-- id:list 对应接口的方法-->
	<select id="list" resultType="Student">
		select * from student
	</select>
	<select id="pagelist" resultType="Student">
		select * from student
		<if test="start!=null and count!=null">
			limit #{start},#{count}
		</if>
	</select>
	<select id="total" resultType="int">
		select count(*) from student
	</select>
	<select id="get" resultType="Student" parameterType="int">
		select * from student where Sno = #{sno}
	</select>
	
	<delete id="delete" parameterType="Student">
		delete from student where Sno = #{sno}
	</delete>
	<insert id="insert" parameterType="Student">
		insert into student(Sno,Sname) value(#{sno},"${sname}")
	</insert>
	<update id="update" parameterType="Student">
		update student set Sno=#{sno},Sname=#{sname} where id=#{id}
	</update>
</mapper>

Tres, la visualización de la página web específica

Finalmente, se mostrará un formulario de este tipo, en el que los nombres y números de los estudiantes no tienen nada que ver con la situación real y solo se utilizan como datos en el formulario.


Resumir

En general, después de construir el marco y comprender la escritura de los métodos relacionados, el trabajo será extremadamente simple, solo dedique tiempo a comprenderlo.

Supongo que te gusta

Origin blog.csdn.net/laodaye_xiaolizi/article/details/125673126
Recomendado
Clasificación