目录
项目结构:
- <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.0modelVersion>
-
- <groupId>org.examplegroupId>
- <artifactId>SSM_2022artifactId>
- <version>1.0-SNAPSHOTversion>
- ------------------------------------------------------------------------------------
- <properties>
- <maven.compiler.source>8maven.compiler.source>
- <maven.compiler.target>8maven.compiler.target>
- <spring.version>5.3.1spring.version>
- properties>
-
- <packaging>warpackaging>
- <dependencies>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-contextartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-beansartifactId>
- <version>${spring.version}version>
- dependency>
-
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-webartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-webmvcartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-jdbcartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-aspectsartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-testartifactId>
- <version>${spring.version}version>
- dependency>
-
- <dependency>
- <groupId>org.mybatisgroupId>
- <artifactId>mybatisartifactId>
- <version>3.5.7version>
- dependency>
-
- <dependency>
- <groupId>org.mybatisgroupId>
- <artifactId>mybatis-springartifactId>
- <version>2.0.6version>
- dependency>
-
- <dependency>
- <groupId>com.alibabagroupId>
- <artifactId>druidartifactId>
- <version>1.0.9version>
- dependency>
-
- <dependency>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>4.12version>
- <scope>testscope>
- dependency>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>8.0.16version>
- dependency>
-
- <dependency>
- <groupId>log4jgroupId>
- <artifactId>log4jartifactId>
- <version>1.2.17version>
- dependency>
-
- <dependency>
- <groupId>com.github.pagehelpergroupId>
- <artifactId>pagehelperartifactId>
- <version>5.2.0version>
- dependency>
-
- <dependency>
- <groupId>ch.qos.logbackgroupId>
- <artifactId>logback-classicartifactId>
- <version>1.2.3version>
- dependency>
-
- <dependency>
- <groupId>javax.servletgroupId>
- <artifactId>javax.servlet-apiartifactId>
- <version>3.1.0version>
- <scope>providedscope>
- dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.coregroupId>
- <artifactId>jackson-databindartifactId>
- <version>2.12.1version>
- dependency>
- <dependency>
- <groupId>commons-fileuploadgroupId>
- <artifactId>commons-fileuploadartifactId>
- <version>1.3.1version>
- dependency>
-
- <dependency>
- <groupId>org.thymeleafgroupId>
- <artifactId>thymeleaf-spring5artifactId>
- <version>3.0.12.RELEASEversion>
- dependency>
- dependencies>
-
- project>
Spring提供了监听器ContextLoaderListener,实现ServletContextListener接口,可监听 ServletContext的状态,在web服务器启动时读取Spring的配置文件,创建Spring的IOC容器。Spring的IOC容器的创建必须早于SpringMVC的IOC容器的创建。
- <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_4_0.xsd"
- version="4.0">
-
- <filter>
- <filter-name>CharacterEncodingFilterfilter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
- <init-param>
- <param-name>encodingparam-name>
- <param-value>UTF-8param-value>
- init-param>
- <init-param>
- <param-name>forceEncodingparam-name>
- <param-value>trueparam-value>
- init-param>
- filter>
- <filter-mapping>
- <filter-name>CharacterEncodingFilterfilter-name>
- <url-pattern>/*url-pattern>
- filter-mapping>
-
- <filter>
- <filter-name>HiddenHttpMethodFilterfilter-name>
- <filter-class>org.springframework.web.filter.HiddenHttpMethodFilterfilter-class>
- filter>
- <filter-mapping>
- <filter-name>HiddenHttpMethodFilterfilter-name>
- <url-pattern>/*url-pattern>
- filter-mapping>
-
- <servlet>
- <servlet-name>DispatcherServletservlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
-
- <init-param>
- <param-name>contextConfigLocationparam-name>
- <param-value>classpath:SpringMVC.xmlparam-value>
- init-param>
- <load-on-startup>1load-on-startup>
- servlet>
- <servlet-mapping>
- <servlet-name>DispatcherServletservlet-name>
- <url-pattern>/url-pattern>
- servlet-mapping>
-
-
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
- listener>
-
- <context-param>
- <param-name>contextConfigLocationparam-name>
- <param-value>classpath:Spring.xmlparam-value>
- context-param>
- web-app>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
-
-
- <context:component-scan base-package="ssm.controller"/>
-
- <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">
- <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>
-
-
- <mvc:default-servlet-handler />
-
- <mvc:annotation-driven />
-
- <mvc:view-controller path="/" view-name="index"/>
-
- <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
- beans>
- <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="ssm">
- <context:exclude-filter type="annotation"
- expression="org.springframework.stereotype.Controller"/>
- context:component-scan>
-
- <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>
-
-
- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource"/>
- bean>
-
- <tx:annotation-driven transaction-manager="transactionManager"/>
-
-
- <bean class="org.mybatis.spring.SqlSessionFactoryBean">
-
- <property name="configLocation" value="classpath:mybatis-config.xml"/>
-
- <property name="dataSource" ref="dataSource"/>
-
- <property name="typeAliasesPackage" value="ssm.pojo"/>
-
-
- bean>
-
- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
- <property name="basePackage" value="ssm.mapper"/>
- bean>
- beans>
有一些参数已经在spring配置文件里进行配置了。
- configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
- <settings>
-
- <setting name="mapUnderscoreToCamelCase" value="true"/>
- settings>
- <plugins>
-
- <plugin interceptor="com.github.pagehelper.PageInterceptor"/>
- plugins>
- configuration>
- log4j:configuration SYSTEM "log4j.dtd">
- <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
- <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>
- jdbc.username=root
- jdbc.password=310333
- jdbc.url=jdbc:mysql://localhost:3306/ssm_demodb?serverTimezone=UTC
- jdbc.driver=com.mysql.cj.jdbc.Driver
依赖:
- <dependency>
- <groupId>com.github.pagehelpergroupId>
- <artifactId>pagehelperartifactId>
- <version>5.2.0version>
- dependency>
在MyBatis的核心配置文件中配置插件:
- <plugins>
- <plugin interceptor="com.github.pagehelper.PageInterceptor">plugin>
- plugins>
1.在查询功能之前使用PageHelper.startPage(int pageNum, int pageSize)开启分页功能
pageNum:当前页的页码
pageSize:每页显示的条数
2.在查询获取list集合之后,使用PageInfo pageInfo = new PageInfo<>(List list, int navigatePages)获取分页相关数据 。
list:分页之后的数据
navigatePages:导航分页的页码数
3.分页相关数据
list:查询到的数据
pageNum:当前页的页码
pageSize:每页显示的条数
size:当前页显示的真实条数
total:总记录数
pages:总页数
prePage:上一页的页码
nextPage:下一页的页码
isFirstPage/isLastPage:是否为第一页/最后一页
hasPreviousPage/hasNextPage:是否存在上一页/下一页
navigatePages:导航分页的页码数
navigatepageNums:导航分页的页码,[1,2,3,4,5]
数据库表:
- 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
pojo:
- package ssm.pojo;
-
- public class Employee {
- private Integer empId;
- private String empName;
- private Integer age;
- private String sex;
- private String email;
- public Employee() {
- }
- public Employee(Integer empId, String empName, Integer age, String sex,
- String email) {
- this.empId = empId;
- this.empName = empName;
- this.age = age;
- this.sex = sex;
- this.email = email;
- }
- 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 getSex() {
- return sex;
-
- }
-
- public void setSex(String sex) {
- this.sex = sex;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- }
Controller:
- @Controller
- public class EmployeeController {
- @Autowired
- private EmployeeService employeeService;
-
- /*查询所有员工信息(分页)*/
- @RequestMapping(value = "/employee/page/{pageNum}",method = RequestMethod.GET)
- public String getEmployeePage(@PathVariable("pageNum") Integer pageNum,Model model){
- PageInfo
page=employeeService.getEmployeePage(pageNum);//获取分页数据 - model.addAttribute("page",page);//将分页数据保存到域中
- return "employee_list";//转至员工列表页面
- }
- }
Service:
- public class EmployeeServiceImpl implements EmployeeService {
- @Autowired
- private EmployeeMapper employeeMapper;
-
- //获取所有员工信息
- @Override
- public List
getAllEmployee() { - return employeeMapper.getAllEmployee();
- }
-
- //获取所有员工信息的分页信息
- @Override
- public PageInfo
getEmployeePage(Integer pageNum) { - //开启分页功能,每页显示4条数据
- PageHelper.startPage(pageNum,4);
- //查询所有员工信息
- List
list=employeeMapper.getAllEmployee(); - //获取分页相关数据
- return new PageInfo
(list,5); //导航页显示5页 - }
- }
Mapper:
- public interface EmployeeMapper {
- List
getAllEmployee(); - }
- <mapper namespace="ssm.mapper.EmployeeMapper">
- <select id="getAllEmployee" resultType="Employee">
- select * from t_emp
- select>
- mapper>
employee_list页面(index页面自行设置):
- html>
- <html lang="en" xmlns:th="http://www.thymeleaf.org">
- <head>
- <meta charset="UTF-8">
- <title>员工列表title>
- head>
- <body>
- <div align="center">
- <table border="1" cellspacing="0" >
- <tr>
- <th colspan="6">员工信息th>
- tr>
- <tr>
- <th>流水号th>
- <th>姓名th>
- <th>年龄th>
- <th>性别th>
- <th>邮箱th>
- <th>操作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.sex}">td>
- <td th:text="${employee.email}">td>
- <td>
- <a href="">删除a>
- <a href="">修改a>
- td>
- tr>
- table>
- div>
- <div 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:if="${page.pageNum!=num}" th:href="@{'/employee/page/'+${num}}" th:text="${num}">a>
-
- <span th:if="${page.pageNum==num}" style="color:red " th:text="'['+${num}+']'">span>
- 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>
- body>
- html>
效果: