当前位置: 首页 > news >正文

SSM整合

SSM整合

ContextLoaderListener

Spring提供了监听器ContextLoaderListener,实现ServletContextListener接口,可监听 ServletContext的状态,在web服务器的启动,读取Spring的配置文件,创建Spring的IOC容器。
web 应用中必须在web.xml中配置

<listener>
<!--
配置Spring的监听器,在服务器启动时加载Spring的配置文件 Spring配置文件默认位置和名称:/WEB-INF/applicationContext.xml 可通过上下文参数自定义Spring配置文件的位置和名称
--><listener-
class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--自定义Spring配置文件的位置和名称--> <context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value>
</context-param>

准备工作

  1. 创建Maven Module

  2. 导入依赖

<?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>com.bijing</groupId><artifactId>ssm</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><java.version>11</java.version><spring.version>5.3.1</spring.version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><!--springmvc--><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-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><!-- 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>2.0.6</version></dependency><!-- 连接池 --> <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.9</version></dependency><!-- junit测试 --> <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- MySQL驱动 --> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency><!-- log4j日志 --> <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!--分页插件 https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version></dependency><!-- 日志 --> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency><!-- ServletAPI --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.1</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><!-- Spring5和Thymeleaf整合包 --> <dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.12.RELEASE</version></dependency></dependencies>
</project>
  1. 创建表
CREATE TABLE `t_emp` (`emp_id` int(11) NOT NULL AUTO_INCREMENT,`emp_name` varchar(20) DEFAULT NULL,`age` int(11) DEFAULT NULL,`sex` char(1) DEFAULT NULL,`email` varchar(50) DEFAULT NULL,PRIMARY KEY (`emp_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

配置web.xml

<!-- 配置Spring的编码过滤器 --> <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>
<!-- 配置处理请求方式PUT和DELETE的过滤器 --> <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>
<!-- 配置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:SpringMVC.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>
<!-- 设置Spring的配置文件的位置和名称 --> <context-param><param-name>contextConfigLocation</param-name><param-value>classpath:Spring.xml</param-value>
</context-param>
<!-- 配置Spring的监听器 --> <listener><listener-
class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

创建SpringMVC的配置文件并配置

<?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: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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--    扫描控制层组件--><context:component-scan base-package="com.bijing.controller"></context:component-scan><!--    配置视图解析器--><bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver"><property name="order" value="1"/><property name="characterEncoding" value="UTF-8"/><property name="templateEngine"><bean class="org.thymeleaf.spring5.SpringTemplateEngine"><property name="templateResolver"><!-- 物理视图(当前要访问页面的完整路径) ="视图前缀+逻辑视图+视图后缀"--><!-- 如/WEB-INF/templates/index.html = 前置/WEB-INF/templates/ + 逻辑视图index +后缀.html--><bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"><!-- 视图前缀 --><property name="prefix" value="/WEB-INF/templates/"/><!-- 视图后缀 --><property name="suffix" value=".html"/><property name="templateMode" value="HTML5"/><property name="characterEncoding" value="UTF-8"/></bean></property></bean></property></bean><!--    配置默认的servlet处理静态资源--><mvc:default-servlet-handler/><!--    开启mvc的注解驱动--><mvc:annotation-driven/><!--    配置视图控制器--><mvc:view-controller path="/" view-name="index"/><!--    配置文件上传解析器,必须配置id="multipartResolver"--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean></beans>

搭建MyBatis环境

  1. 创建属性文件jdbc.properties
jdbc.user=root
jdbc.password=root1234
jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
jdbc.driver=com.mysql.cj.jdbc.Driver
  1. 创建MyBatis的核心配置文件mybatis-config.xml
    基本都可以在spring.xml中配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--    MyBatis核心配置文件中的标签必须按照指定的顺序配置:properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?--><!--    引入properties文件,此后就可以在当前文件中使用的方式访问value--><!--<properties resource="jdbc.properties"></properties>--><!-- <settings>&lt;!&ndash;        将下划线映射为驼峰&ndash;&gt;<setting name="mapUnderscoreToCamelCase" value="true"/></settings>--><!--    typeAliases:设置类型别名,即为某个具体的数据类型设置一个别名在MyBatis的范围中,就可以使用别名来表示一个具体的类型--><!--   <typeAliases><package name=""/></typeAliases>--><!--   &lt;!&ndash;    配置连接数据库的环境default:设置默认使用的环境id&ndash;&gt;<environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments>--><!--&lt;!&ndash;    引入mybatis的映射文件&ndash;&gt;<mappers><package name=""/></mappers>--><!--   <plugins>&lt;!&ndash;        配置分页插件&ndash;&gt;<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin></plugins>-->
</configuration>
  1. 创建Mapper接口和映射文件
    EmployeeMapper.xml
public interface EmployeeMapper {List<Employee> getEmployeeList();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bijing.mapper.EmployeeMapper"><resultMap id="empResultMap" type="Employee"><id column="emp_id" property="empId"></id><result column="emp_name" property="empName"></result><result column="age" property="age"></result><result column="gender" property="gender"></result></resultMap><select id="getAllEmployee" resultMap="empResultMap">SELECT *FROM t_emp</select>
</mapper>   
  1. 创建日志文件log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM"http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration debug="true"><appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"><param name="Encoding" value="UTF-8"/><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}
%m (%F:%L) \n"/></layout></appender><logger name="java.sql"><level value="debug"/></logger><logger name="org.apache.ibatis"><level value="info"/></logger><root><level value="debug"/><appender-ref ref="STDOUT"/></root>
</log4j:configuration>

创建Spring的配置文件并配置

<?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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://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.bijing"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!--    下面是整合mybatis--><!--    引入jdbc.properties配置文件--><context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder><!--    配置数据源--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"></property><property name="url" value="${jdbc.url}"></property><property name="username" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property></bean><!--    配置事务管理器--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!--    开启事务的注解驱动,tx结尾的那个将使用@Translational标识的方法或类中所有的方法进行事务管理--><tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven><!--    配置SqlSessionFactoryBean,可以直接在Spring的IOC中获取SqlSessionFactory对象--><bean class="org.mybatis.spring.SqlSessionFactoryBean"><!--        设置Mybatis核心配置文件的路径--><property name="configLocation" value="classpath:mybatis-config.xml"></property><!--        设置数据源--><property name="dataSource" ref="dataSource"></property><!--        设置类型别名所对应的包--><property name="typeAliasesPackage" value="com.bijing.pojo"></property><!--        设置映射文件的路径,mappers文件夹直属于resources,为了应对映射文件的包和mapper接口的包不一致的情况如果下面的MapperScannerConfigurer配置了,这个标签可以不写--><!--        <property name="mapperLocations" value="classpath:mappers/*.xml"></property>--><property name="configurationProperties"><props><prop key="mapUnderscoreToCamelCase">true</prop></props></property><!--        配置分页插件--><property name="plugins"><array><bean class="com.github.pagehelper.PageInterceptor"></bean></array></property></bean><!--    配置mapper接口的扫描,可以将指定包下所有的mapper接口,通过sqlSession创建代理实现类对象,并将这些对象交给ioc容器管理--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.bijing.mapper"></property></bean></beans>

测试功能

  1. 创建组件
    实体类Employee
public class Employee {private Integer empId;private String empName;private Integer age;private String gender;private String email;public Employee(Integer empId, String empName, Integer age, String gender, String email) {this.empId = empId;this.empName = empName;this.age = age;this.gender = gender;this.email = email;}public Employee() {}public Integer getEmpId() {return empId;}public void setEmpId(Integer empId) {this.empId = empId;}public String getEmpName() {return empName;}public void setEmpName(String empName) {this.empName = empName;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "Employee{" +"empId=" + empId +", empName='" + empName + '\'' +", age=" + age +", gender='" + gender + '\'' +", email='" + email + '\'' +'}';}
}

创建控制层组件EmployeeController


/*** @author 毕晶* @date 2023/2/11 17:39* 查询所有的员工信息-->/employee-->get* 根据id查询员工信息-->/employee/1-->get* 跳转到添加页面-->/to/add-->get* 添加员工信息-->/employee-->post* 修改员工信息-->/employee-->put* 删除员工信息-->/employee/1-->delete*/
@Controller
public class EmployeeController {@Autowiredprivate EmployeeService employeeService;@RequestMapping(value = "/employee", method = RequestMethod.GET)public String getAllEmployee(Model model) {
//        查询所有的员工信息List<Employee> list = employeeService.getAllEmployee();list.forEach(System.out::println);
//        将员工信息在请求域中共享model.addAttribute("list", list);
//        跳转到employee_list.html页面return "employee_list";}@RequestMapping(value = "/employee/page/{pageNum}", method = RequestMethod.GET)public String getEmployeeByPage(@PathVariable("pageNum") Integer pageNum, Model model) {
//        获取员工分页信息PageInfo<Employee> page = employeeService.getEmployeeByPage(pageNum);
//        将分页数据共享到请求域model.addAttribute("page", page);return "employee_list";}
}

创建接口EmployeeService

public interface EmployeeService {/*** 查询所有的员工信息** @return*/List<Employee> getAllEmployee();/*** 获取员工分页信息** @param pageNum* @return*/PageInfo<Employee> getEmployeeByPage(Integer pageNum);
}

创建实现类EmployeeServiceImpl

@Service
@Transactional
public class EmployeeServiceImpl implements EmployeeService {@Autowiredprivate EmployeeMapper employeeMapper;@Overridepublic List<Employee> getAllEmployee() {return employeeMapper.getAllEmployee();}@Overridepublic PageInfo<Employee> getEmployeeByPage(Integer pageNum) {
//        开启分页功能PageHelper.startPage(pageNum, 4);
//        查询所有员工信息List<Employee> list = employeeMapper.getAllEmployee();
//        获取分页相关数据return new PageInfo<>(list, 5);}
}
  1. 创建页面
<div><table><tr><th colspan="6">员工列表</th></tr><tr><th>流水号</th><th>员工姓名</th><th>年龄</th><th>性别</th><th>邮箱</th><th>options(<a th:href="@{/to/add}">add</a>)</th></tr><tr th:each="employee,status:${page.list}"><td th:text="${status.count}"></td><td th:text="${employee.empName}"></td><td th:text="${employee.age}"></td><td th:text="${employee.gender}"></td><td th:text="${employee.email}"></td><td><a>删除</a><a>修改</a></td></tr></table><div style="text-align: center"><a th:if="${page.hasPreviousPage}" th:href="@{/employee/page/1}">首页</a><a th:if="${page.hasPreviousPage}" th:href="@{'/employee/page/'+${page.prePage}}">上一页</a><span th:each="num:${page.navigatepageNums}"><a th:href="@{'/employee/page/'+${num}}" th:text="${num}"></a></span><a th:if="${page.hasNextPage}" th:href="@{'/employee/page/'+${page.nextPage}}">下一页</a><a th:if="${page.hasNextPage}" th:href="@{'/employee/page/'+${page.pages}}">末页</a></div>
</div>
  1. 访问测试分页功能
    localhost:8080/employee/page/1
http://www.lryc.cn/news/7548.html

相关文章:

  • Android平台版本所对应的 API 级别
  • 入职字节外包一个月,我离职了
  • 中创教育PMP分享,复盘没效果?该怎么办
  • Kubelet监控指标说明
  • python中的数据类型(价值6980的全能工程师课程笔记)
  • Tomcat 配置IPV6
  • JavaEE——MyBatis的简单介绍和使用
  • 主数据管理平台如何进行模型管理
  • 在 Kubernetes 上运行《我的世界》
  • 万字长文掌握Python高并发
  • 高性能办公娱乐迷你主机——Maxtang大唐AMD5600U
  • 牛客教你用雇主品牌力抢人才!附6类校招玩法
  • leaflet: 鼠标mouseover显示城市信息,mouseout隐藏信息(067)
  • docker部署springboot项目
  • 简单实用的CSS属性(滑轮滚动保持头部不动、暂无数据显示、元素隔开距离、带背景的文字效果、网页上禁止选中文字、校验值有效为绿色无效为红色、)
  • Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍
  • Python-第六天 Python数据容器
  • 【C/C++基础练习题】复习题三,易错点知识点笔记
  • Mysql sql优化
  • vnode 在 Vue 中的作用
  • SQL语句实现找到一行中数据最大值(greatest)/最小值(least);mysql行转列
  • 记一次以小勃大,紧张刺激的渗透测试(2017年老文)
  • LeetCode 61. 旋转链表
  • 数据库(4)--视图的定义和使用
  • pandas表格并表(累加合并)
  • 汽车直营模式下OTD全流程
  • 如何在 Canvas 上实现图形拾取?
  • 适用于媒体行业的管理数据解决方案—— StorageGRID Webscale
  • Springboot+ElasticSearch构建博客检索系统-学习笔记01
  • vue3+element-plus el-descriptions 详情组件二次封装(vue3项目)