• Java框架 SSM整合


    1、ContextLoaderListener

            Spring提供了监听器 ContextLoaderListener,实现ServletContextListener接口,可监听 ServletContext的状态,在web服务器的启动,读取Spring的配置文件,创建SpringIOC容器。web 应用中必须在web.xml中配置:
    1. <listener>
    2. <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
    3. listener>
    4. <context-param>
    5. <param-name>contextConfigLocationparam-name>
    6. <param-value>classpath:spring.xmlparam-value>
    7. context-param>

    代码示例:

    web.xml:

    1. <servlet>
    2. <servlet-name>DispatcherServletservlet-name>
    3. <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    4. <init-param>
    5. <param-name>contextConfigLocationparam-name>
    6. <param-value>classpath:springmvc.xmlparam-value>
    7. init-param>
    8. <load-on-startup>1load-on-startup>
    9. servlet>
    10. <servlet-mapping>
    11. <servlet-name>DispatcherServletservlet-name>
    12. <url-pattern>/url-pattern>
    13. servlet-mapping>
    14. <listener>
    15. <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
    16. listener>
    17. <context-param>
    18. <param-name>contextConfigLocationparam-name>
    19. <param-value>classpath:spring.xmlparam-value>
    20. context-param>

    spring.xml:

    	<context:component-scan base-package="com.chenyixin.ssm.service"/>

    springmvc.xml:

    1. <context:component-scan base-package="com.chenyixin.ssm.controller"/>
    2. <bean id="viewResolver"
    3. class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
    4. <property name="order" value="1"/>
    5. <property name="characterEncoding" value="UTF-8"/>
    6. <property name="templateEngine">
    7. <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
    8. <property name="templateResolver">
    9. <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
    10. <property name="prefix" value="/WEB-INF/templates/"/>
    11. <property name="suffix" value=".html"/>
    12. <property name="templateMode" value="HTML5"/>
    13. <property name="characterEncoding" value="UTF-8"/>
    14. bean>
    15. property>
    16. bean>
    17. property>
    18. bean>
    19. <mvc:annotation-driven/>
    20. <mvc:view-controller path="/" view-name="index"/>

    创建 Service 层(除注解外,无代码内容)

     创建 Controller 层

    1. @Controller
    2. public class HelloController {
    3. @Autowired
    4. private HelloService helloService;
    5. }

    index.html:

    1. <head>
    2. <meta charset="UTF-8">
    3. <title>首页title>
    4. head>
    5. <body>
    6. <h1>index.htmlh1>
    7. body>

    结果:运行服务器,正常运行

    若将监听器注释掉,则服务器运行报错:

    2、准备工作

    ① 创建Maven Module

    ② 导入依赖

    1. <properties>
    2. <spring.version>5.3.1spring.version>
    3. properties>
    4. <dependencies>
    5. <dependency>
    6. <groupId>org.springframeworkgroupId>
    7. <artifactId>spring-contextartifactId>
    8. <version>${spring.version}version>
    9. dependency>
    10. <dependency>
    11. <groupId>org.springframeworkgroupId>
    12. <artifactId>spring-beansartifactId>
    13. <version>${spring.version}version>
    14. dependency>
    15. <dependency>
    16. <groupId>org.springframeworkgroupId>
    17. <artifactId>spring-webartifactId>
    18. <version>${spring.version}version>
    19. dependency>
    20. <dependency>
    21. <groupId>org.springframeworkgroupId>
    22. <artifactId>spring-webmvcartifactId>
    23. <version>${spring.version}version>
    24. dependency>
    25. <dependency>
    26. <groupId>org.springframeworkgroupId>
    27. <artifactId>spring-jdbcartifactId>
    28. <version>${spring.version}version>
    29. dependency>
    30. <dependency>
    31. <groupId>org.springframeworkgroupId>
    32. <artifactId>spring-aspectsartifactId>
    33. <version>${spring.version}version>
    34. dependency>
    35. <dependency>
    36. <groupId>org.springframeworkgroupId>
    37. <artifactId>spring-testartifactId>
    38. <version>${spring.version}version>
    39. dependency>
    40. <dependency>
    41. <groupId>org.springframeworkgroupId>
    42. <artifactId>spring-ormartifactId>
    43. <version>5.3.1version>
    44. dependency>
    45. <dependency>
    46. <groupId>org.mybatisgroupId>
    47. <artifactId>mybatisartifactId>
    48. <version>3.5.7version>
    49. dependency>
    50. <dependency>
    51. <groupId>org.mybatisgroupId>
    52. <artifactId>mybatis-springartifactId>
    53. <version>2.0.6version>
    54. dependency>
    55. <dependency>
    56. <groupId>com.alibabagroupId>
    57. <artifactId>druidartifactId>
    58. <version>1.0.9version>
    59. dependency>
    60. <dependency>
    61. <groupId>junitgroupId>
    62. <artifactId>junitartifactId>
    63. <version>4.12version>
    64. <scope>testscope>
    65. dependency>
    66. <dependency>
    67. <groupId>mysqlgroupId>
    68. <artifactId>mysql-connector-javaartifactId>
    69. <version>8.0.16version>
    70. dependency>
    71. <dependency>
    72. <groupId>log4jgroupId>
    73. <artifactId>log4jartifactId>
    74. <version>1.2.17version>
    75. dependency>
    76. <dependency>
    77. <groupId>com.github.pagehelpergroupId>
    78. <artifactId>pagehelperartifactId>
    79. <version>5.2.0version>
    80. dependency>
    81. <dependency>
    82. <groupId>ch.qos.logbackgroupId>
    83. <artifactId>logback-classicartifactId>
    84. <version>1.2.3version>
    85. dependency>
    86. <dependency>
    87. <groupId>javax.servletgroupId>
    88. <artifactId>javax.servlet-apiartifactId>
    89. <version>3.1.0version>
    90. <scope>providedscope>
    91. dependency>
    92. <dependency>
    93. <groupId>com.fasterxml.jackson.coregroupId>
    94. <artifactId>jackson-databindartifactId>
    95. <version>2.12.1version>
    96. dependency>
    97. <dependency>
    98. <groupId>commons-fileuploadgroupId>
    99. <artifactId>commons-fileuploadartifactId>
    100. <version>1.3.1version>
    101. dependency>
    102. <dependency>
    103. <groupId>org.thymeleafgroupId>
    104. <artifactId>thymeleaf-spring5artifactId>
    105. <version>3.0.12.RELEASEversion>
    106. dependency>
    107. dependencies>

    ③ 创建表

    1. CREATE TABLE `t_emp` (
    2. `emp_id` int(11) NOT NULL AUTO_INCREMENT,
    3. `emp_name` varchar(20) DEFAULT NULL,
    4. `age` int(11) DEFAULT NULL,
    5. `sex` char(1) DEFAULT NULL,
    6. `email` varchar(50) DEFAULT NULL,
    7. PRIMARY KEY (`emp_id`)
    8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    9. INSERT INTO t_emp VALUES
    10. (1001,'admin',20,'男','admin@qq.com'),
    11. (NULL,'zhangsan',21,'女','zhangsan@qq.com'),
    12. (NULL,'lisi',21,'女','lisi@qq.com'),
    13. (NULL,'wangwu',21,'男','wangwu@qq.com'),
    14. (NULL,'zaoliu',21,'男','zaoliu@qq.com'),
    15. (NULL,'tianqi',22,'女','tianqi@qq.com'),
    16. (NULL,'张三',21,'女','zhangsan@qq.com'),
    17. (NULL,'李四',21,'女','lisi@qq.com'),
    18. (NULL,'王五',21,'男','wangwu@qq.com'),
    19. (NULL,'赵六',21,'男','zaoliu@qq.com'),
    20. (NULL,'田七',22,'女','tianqi@qq.com'),
    21. (NULL,'xioaming',22,'男','xioaming@qq.com'),
    22. (NULL,'xiaohua',22,'男','xiaohua@qq.com'),
    23. (NULL,'xiaozhang',22,'男','xiaozhang@qq.com'),
    24. (NULL,'xiaowang',22,'男','xiaowang@qq.com'),
    25. (NULL,'xiaofang',22,'女','xiaofang@qq.com'),
    26. (NULL,'小明',22,'男','xioaming@qq.com'),
    27. (NULL,'小华',22,'男','xiaohua@qq.com'),
    28. (NULL,'小张',22,'男','xiaozhang@qq.com'),
    29. (NULL,'小王',22,'男','xiaowang@qq.com'),
    30. (NULL,'小芳',22,'女','xiaofang@qq.com')

    ④ 创建实体类Employee

    1. package com.chenyixin.ssm.pojo;
    2. public class Employee {
    3. private Integer empId;
    4. private String empName;
    5. private Integer age;
    6. private String sex;
    7. private String email;
    8. public Employee(Integer empId, String empName, Integer age, String sex, String email) {
    9. this.empId = empId;
    10. this.empName = empName;
    11. this.age = age;
    12. this.sex = sex;
    13. this.email = email;
    14. }
    15. public Employee() {
    16. }
    17. public Integer getEmpId() {
    18. return empId;
    19. }
    20. public void setEmpId(Integer empId) {
    21. this.empId = empId;
    22. }
    23. public String getEmpName() {
    24. return empName;
    25. }
    26. public void setEmpName(String empName) {
    27. this.empName = empName;
    28. }
    29. public Integer getAge() {
    30. return age;
    31. }
    32. public void setAge(Integer age) {
    33. this.age = age;
    34. }
    35. public String getSex() {
    36. return sex;
    37. }
    38. public void setSex(String sex) {
    39. this.sex = sex;
    40. }
    41. public String getEmail() {
    42. return email;
    43. }
    44. public void setEmail(String email) {
    45. this.email = email;
    46. }
    47. @Override
    48. public String toString() {
    49. return "Employee{" +
    50. "empId=" + empId +
    51. ", empName='" + empName + '\'' +
    52. ", age=" + age +
    53. ", sex='" + sex + '\'' +
    54. ", email='" + email + '\'' +
    55. '}';
    56. }
    57. }

    3、配置 xml 文件

    3.1、配置 web.xml 文件

    1. <filter>
    2. <filter-name>CharacterEncodingFilterfilter-name>
    3. <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
    4. <init-param>
    5. <param-name>encodingparam-name>
    6. <param-value>UTF-8param-value>
    7. init-param>
    8. <init-param>
    9. <param-name>forceEncodingparam-name>
    10. <param-value>trueparam-value>
    11. init-param>
    12. filter>
    13. <filter-mapping>
    14. <filter-name>CharacterEncodingFilterfilter-name>
    15. <url-pattern>/*url-pattern>
    16. filter-mapping>
    17. <filter>
    18. <filter-name>HiddenHttpMethodFilterfilter-name>
    19. <filter-class>org.springframework.web.filter.HiddenHttpMethodFilterfilter-class>
    20. filter>
    21. <filter-mapping>
    22. <filter-name>HiddenHttpMethodFilterfilter-name>
    23. <url-pattern>/*url-pattern>
    24. filter-mapping>
    25. <servlet>
    26. <servlet-name>DispatcherServletservlet-name>
    27. <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    28. <init-param>
    29. <param-name>contextConfigLocationparam-name>
    30. <param-value>classpath:springmvc.xmlparam-value>
    31. init-param>
    32. <load-on-startup>1load-on-startup>
    33. servlet>
    34. <servlet-mapping>
    35. <servlet-name>DispatcherServletservlet-name>
    36. <url-pattern>/url-pattern>
    37. servlet-mapping>
    38. <listener>
    39. <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
    40. listener>
    41. <context-param>
    42. <param-name>contextConfigLocationparam-name>
    43. <param-value>classpath:spring.xmlparam-value>
    44. context-param>

    3.2、创建SpringMVC的配置文件并配置

    1. <context:component-scan base-package="com.chenyixin.ssm.controller"/>
    2. <bean id="viewResolver"
    3. class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
    4. <property name="order" value="1"/>
    5. <property name="characterEncoding" value="UTF-8"/>
    6. <property name="templateEngine">
    7. <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
    8. <property name="templateResolver">
    9. <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
    10. <property name="prefix" value="/WEB-INF/templates/"/>
    11. <property name="suffix" value=".html"/>
    12. <property name="templateMode" value="HTML5"/>
    13. <property name="characterEncoding" value="UTF-8"/>
    14. bean>
    15. property>
    16. bean>
    17. property>
    18. bean>
    19. <mvc:default-servlet-handler/>
    20. <mvc:annotation-driven/>
    21. <mvc:view-controller path="/" view-name="index"/>

    3.3、创建Spring的配置文件并配置

    1. <context:component-scan base-package="com.chenyixin.ssm">
    2. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    3. context:component-scan>
    4. <context:property-placeholder location="classpath:jdbc.properties"/>
    5. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    6. <property name="driverClassName" value="${jdbc.driver}"/>
    7. <property name="url" value="${jdbc.url}"/>
    8. <property name="username" value="${jdbc.username}"/>
    9. <property name="password" value="${jdbc.password}"/>
    10. bean>
    11. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    12. <property name="dataSource" ref="dataSource"/>
    13. bean>
    14. <tx:annotation-driven transaction-manager="transactionManager"/>

    4、搭建MyBatis环境

    ① 创建属性文件jdbc.properties

    1. jdbc.driver=com.mysql.cj.jdbc.Driver
    2. jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
    3. jdbc.username=root
    4. jdbc.password=root

    ② 在 Spring 的配置文件中添加 MyBatis 的配置

    1. <bean class="org.mybatis.spring.SqlSessionFactoryBean">
    2. <property name="configLocation" value="classpath:mybatis-config.xml"/>
    3. <property name="dataSource" ref="dataSource"/>
    4. <property name="typeAliasesPackage" value="com.chenyixin.ssm.pojo"/>
    5. bean>
    6. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    7. <property name="basePackage" value="com.chenyixin.ssm.mapper"/>
    8. bean>

    ③ 创建MyBatis的核心配置文件mybatis-config.xml

    1. "1.0" encoding="UTF-8" ?>
    2. configuration
    3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
    5. <configuration>
    6. <settings>
    7. <setting name="mapUnderscoreToCamelCase" value="true"/>
    8. settings>
    9. <plugins>
    10. <plugin interceptor="com.github.pagehelper.PageInterceptor">plugin>
    11. plugins>
    12. configuration>

    ④ 创建Mapper接口和映射文件

    EmployeeMapper 接口:

    1. public interface EmployeeMapper {
    2. }

    EmployeeMapper.xml 映射文件:

    1. "1.0" encoding="UTF-8" ?>
    2. mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.chenyixin.ssm.mapper.EmployeeMapper">
    6. mapper>

    ⑤ 创建日志文件log4j.xml

    1. "1.0" encoding="UTF-8" ?> log4j:configuration SYSTEM "log4j.dtd">
    2. <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    3. <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    4. <param name="Encoding" value="UTF-8"/>
    5. <layout class="org.apache.log4j.PatternLayout">
    6. <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n"/>
    7. layout>
    8. appender>
    9. <logger name="java.sql">
    10. <level value="debug"/>
    11. logger>
    12. <logger name="org.apache.ibatis">
    13. <level value="info"/>
    14. logger>
    15. <root>
    16. <level value="debug"/>
    17. <appender-ref ref="STDOUT"/>
    18. root>
    19. log4j:configuration>

    5、功能实现

    5.1、功能清单

     

    5.2、访问首页

    创建 index.html:

    1. html>
    2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>首页title>
    6. head>
    7. <body>
    8. <h1>index.htmlh1>
    9. <a th:href="@{/employee}">员工信息列表a>
    10. body>
    11. html>

    5.3、查询全部数据(含分页功能)

    ① Java 代码

    EmployeeController :

    1. @Controller
    2. public class EmployeeController {
    3. @Autowired
    4. private EmployeeService employeeService;
    5. @GetMapping("/employee/page/{pageNum}")
    6. public String getAllEmployee(Model model,@PathVariable("pageNum") Integer pageNum) {
    7. PageInfo page = employeeService.getAllEmployee(pageNum);
    8. model.addAttribute("page", page);
    9. return "employee_list";
    10. }
    11. }

    EmployeeService :

    1. public interface EmployeeService {
    2. /**
    3. * 查询所有员工信息
    4. * @return List
    5. */
    6. PageInfo getAllEmployee(Integer pageNum);
    7. }

    EmployeeServiceImpl 

    1. @Service
    2. @Transactional
    3. public class EmployeeServiceImpl implements EmployeeService {
    4. @Autowired
    5. private EmployeeMapper employeeMapper;
    6. @Override
    7. public PageInfo getAllEmployee(Integer pageNum) {
    8. // 开启分页功能,并传入 当前页面,和每页显示的条数
    9. PageHelper.startPage(pageNum,4);
    10. List list = employeeMapper.selectAllEmployee();
    11. // 创建 PageInfo ,传入 list 和 导航分页的页码数
    12. return new PageInfo<>(list, 5);
    13. }
    14. }

    EmployeeMapper 

    1. public interface EmployeeMapper {
    2. /**
    3. * 查询所有员工信息
    4. * @return List
    5. */
    6. List selectAllEmployee();
    7. }

    ② Mybaits 代码

    1. <mapper namespace="com.chenyixin.ssm.mapper.EmployeeMapper">
    2. <select id="selectAllEmployee" resultType="employee">
    3. select * from t_emp
    4. select>
    5. mapper>

    ③ employee_list.html

    1. html>
    2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
    3. <link rel="stylesheet" th:href="@{/static/css/index_work.css}">
    4. <head>
    5. <meta charset="UTF-8">
    6. <title>员工信息表title>
    7. head>
    8. <body>
    9. <table>
    10. <tr>
    11. <th colspan="6">员工信息th>
    12. tr>
    13. <tr>
    14. <th>流水号th>
    15. <th>姓名th>
    16. <th>年龄th>
    17. <th>性别th>
    18. <th>邮箱th>
    19. <th>操作th>
    20. tr>
    21. <tr th:each="employee , status: ${page.list}">
    22. <td th:text="${status.count}">td>
    23. <td th:text="${employee.empName}">td>
    24. <td th:text="${employee.age}">td>
    25. <td th:text="${employee.sex}">td>
    26. <td th:text="${employee.email}">td>
    27. <td>
    28. <a>删除a>
    29. <a>修改a>
    30. td>
    31. tr>
    32. <tr>
    33. <td colspan="6">
    34. <span th:if="${page.hasPreviousPage}">
    35. <a th:href="@{/employee/page/1}">首页a>
    36. <a th:href="@{'/employee/page/'+${page.prePage}}">上一页a>
    37. span>
    38. <span th:each="num : ${page.navigatepageNums}">
    39. <a th:if="${page.pageNum == num}" style="color: orangered" th:href="@{'/employee/page/'+${num}}" th:text="'【'+${num}+'】'">a>
    40. <a th:if="${page.pageNum != num}" th:href="@{'/employee/page/'+${num}}" th:text="${num}">a>
    41. span>
    42. <span th:if="${page.hasNextPage }">
    43. <a th:href="@{'/employee/page/'+${page.nextPage}}">下一页a>
    44. <a th:href="@{'/employee/page/'+${page.pages}}">末页a>
    45. span>
    46. td>
    47. tr>
    48. table>
    49. body>
    50. html>

    5.4 删除功能

    ① 修改employee_list.html,并添加事件

    1. html>
    2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
    3. <link rel="stylesheet" th:href="@{/static/css/index_work.css}">
    4. <head>
    5. <meta charset="UTF-8">
    6. <title>员工信息表title>
    7. head>
    8. <body>
    9. <table id="dataTable">
    10. <tr>
    11. <th colspan="6">员工信息th>
    12. tr>
    13. <tr>
    14. <th>流水号th>
    15. <th>姓名th>
    16. <th>年龄th>
    17. <th>性别th>
    18. <th>邮箱th>
    19. <th>操作th>
    20. tr>
    21. <tr th:each="employee , status: ${page.list}">
    22. <td th:text="${status.count}">td>
    23. <td th:text="${employee.empName}">td>
    24. <td th:text="${employee.age}">td>
    25. <td th:text="${employee.sex}">td>
    26. <td th:text="${employee.email}">td>
    27. <td>
    28. <a @click="deleteEmployee" th:href="@{'/employee/'+${employee.empId}}">删除a>
    29. <a>修改a>
    30. td>
    31. tr>
    32. <tr>
    33. <td colspan="6">
    34. <span th:if="${page.hasPreviousPage}">
    35. <a th:href="@{/employee/page/1}">首页a>
    36. <a th:href="@{'/employee/page/'+${page.prePage}}">上一页a>
    37. span>
    38. <span th:each="num : ${page.navigatepageNums}">
    39. <a th:if="${page.pageNum == num}" style="color: orangered" th:href="@{'/employee/page/'+${num}}"
    40. th:text="'['+${num}+'] '">a>
    41. <a th:if="${page.pageNum != num}" th:href="@{'/employee/page/'+${num}}" th:text="${num+' '}">a>
    42. span>
    43. <span th:if="${page.hasNextPage }">
    44. <a th:href="@{'/employee/page/'+${page.nextPage}}">下一页a>
    45. <a th:href="@{'/employee/page/'+${page.pages}}">末页a>
    46. span>
    47. td>
    48. <td>
    49. <form id="delete_form" method="post">
    50. <input type="hidden" name="_method" value="delete"/>
    51. form>
    52. td>
    53. tr>
    54. table>
    55. <script type="text/javascript" th:src="@{/static/js/vue.js}">script>
    56. <script type="text/javascript">
    57. var vue = new Vue({
    58. el: "#dataTable",
    59. methods: {
    60. // event 表示当前事件
    61. deleteEmployee: function (event) {
    62. // 通过 id 获取表单标签
    63. var delete_form = document.getElementById("delete_form");
    64. // 将触发事件的超链接的 href 属性为表单的 action 属性赋值
    65. delete_form.action = event.target.href;
    66. // 提交表单
    67. delete_form.submit();
    68. // 阻止超链接的默认跳转行为
    69. event.preventDefault();
    70. }
    71. }
    72. });
    73. script>
    74. body>
    75. html>

    ② 控制器方法

    1. @DeleteMapping("/employee/{id}")
    2. public String deleteEmployeeById(@PathVariable Integer id, @RequestHeader("Referer") String referer) {
    3. employeeService.deleteEmployeeById(id);
    4. return "redirect:" + referer;
    5. }

    5.5 添加员工信息功能

    ① 修改employee_list.html

    作用:跳转到添加数据页面

     

    ② 创建employee_add.html

    1. html>
    2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
    3. <link rel="stylesheet" th:href="@{/static/css/index_work.css}">
    4. <head>
    5. <meta charset="UTF-8">
    6. <title>添加员工信息title>
    7. head>
    8. <body>
    9. <form th:action="@{/employee}" method="post">
    10. <table id="dataTable">
    11. <tr>
    12. <th colspan="2">添加员工信息th>
    13. tr>
    14. <tr>
    15. <td>姓名td>
    16. <td>
    17. <input type="text" name="empName"/>
    18. td>
    19. tr>
    20. <tr>
    21. <td>年龄td>
    22. <td>
    23. <input type="text" name="age" />
    24. td>
    25. tr>
    26. <tr>
    27. <td>性别td>
    28. <td>
    29. <input type="text" name="sex">
    30. td>
    31. tr>
    32. <tr>
    33. <td>邮箱td>
    34. <td>
    35. <input type="text" name="email" >
    36. td>
    37. tr>
    38. <tr>
    39. <th colspan="2">
    40. <input type="submit" value="添加">
    41.         
    42. <input type="reset" value="重置">
    43. th>
    44. tr>
    45. table>
    46. form>
    47. body>
    48. html>

    ③ 控制器方法

    1. @RequestMapping("/employee/to/add")
    2. public String toADD(@RequestHeader("Referer") String referer) {
    3. this.referer = referer;
    4. return "employee_add";
    5. }
    6. @PostMapping("/employee")
    7. public String addEmployee(Employee employee) {
    8. employeeService.addEmployee(employee);
    9. return "redirect:"+referer;
    10. }

    ④ 添加方法

    EmployeeService 接口:

    1. /**
    2. * 添加用户信息
    3. * @param employee
    4. */
    5. void addEmployee(Employee employee);

    EmployeeServiceImpl 实现类:

    1. @Override
    2. public void addEmployee(Employee employee) {
    3. employeeMapper.insertEmployee(employee);
    4. }

    EmployeeMapper 接口:

    1. /**
    2. * 添加用户信息
    3. * @param employee
    4. */
    5. void insertEmployee(Employee employee);

    EmployeeMapper.xml 配置文件:

    1. <insert id="insertEmployee">
    2. insert into t_emp values(null,#{empName},#{age},#{sex},#{email})
    3. insert>

    5.6 更新员工数据功能

    ① 修改超链接

     

    ② 创建employee_update.html

    1. html>
    2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
    3. <link rel="stylesheet" th:href="@{/static/css/index_work.css}">
    4. <head>
    5. <meta charset="UTF-8">
    6. <title>修改员工信息title>
    7. head>
    8. <body>
    9. <form th:action="@{/employee}" method="post">
    10. <input type="hidden" name="_method" value="put">
    11. <input type="hidden" name="empId" th:value="${employee.empId}">
    12. <table id="dataTable">
    13. <tr>
    14. <th colspan="2">修改员工信息th>
    15. tr>
    16. <tr>
    17. <td>姓名td>
    18. <td>
    19. <input type="text" name="empName" th:value="${employee.empName}"/>
    20. td>
    21. tr>
    22. <tr>
    23. <td>年龄td>
    24. <td>
    25. <input type="text" name="age" th:value="${employee.age}"/>
    26. td>
    27. tr>
    28. <tr>
    29. <td>性别td>
    30. <td>
    31. <input type="radio" name="sex" value="男" th:field="${employee.sex}">
    32. <input type="radio" name="sex" value="女" th:field="${employee.sex}">
    33. td>
    34. tr>
    35. <tr>
    36. <td>邮箱td>
    37. <td>
    38. <input type="text" name="email" th:value="${employee.email}">
    39. td>
    40. tr>
    41. <tr>
    42. <th colspan="2">
    43. <input type="submit" value="修改">
    44.         
    45. <input type="reset" value="重置">
    46. th>
    47. tr>
    48. table>
    49. form>
    50. body>
    51. html>

    ③ 控制器方法

    1. @GetMapping("/employee/{id}")
    2. public String toUpdate(@RequestHeader("Referer") String referer, @PathVariable Integer id, Model model) {
    3. Employee employee = employeeService.getEmployeeById(id);
    4. model.addAttribute("employee", employee);
    5. this.referer = referer;
    6. return "employee_update";
    7. }
    8. @PutMapping("/employee")
    9. public String UpdateEmployee(Employee employee) {
    10. employeeService.updateEmployee(employee);
    11. return "redirect:" + referer;
    12. }

    ④ 修改方法

    EmployeeService 接口:

    1. /**
    2. * 根据 id 查询员工信息
    3. * @param id
    4. */
    5. Employee getEmployeeById(Integer id);
    6. /**
    7. * 修改用户信息
    8. * @param employee
    9. */
    10. void updateEmployee(Employee employee);

    EmployeeServiceImpl 实现类:

    1. @Override
    2. public Employee getEmployeeById(Integer id) {
    3. return employeeMapper.selectEmployeeById(id);
    4. }
    5. @Override
    6. public void updateEmployee(Employee employee) {
    7. employeeMapper.updateEmployee(employee);
    8. }

    EmployeeMapper 接口:

    1. /**
    2. * 根据 id 查询员工信息
    3. * @param id
    4. */
    5. Employee selectEmployeeById(Integer id);
    6. /**
    7. * 修改用户信息
    8. * @param employee
    9. */
    10. void updateEmployee(Employee employee);

    EmployeeMapper.xml 配置文件:

    1. <select id="selectEmployeeById" resultType="employee">
    2. select *
    3. from t_emp
    4. where emp_id = #{id}
    5. select>
    6. <update id="updateEmployee">
    7. update t_emp
    8. set emp_name = #{empName},
    9. age = #{age},
    10. sex = #{sex},
    11. email = #{email}
    12. where emp_id = #{empId}
    13. update>

  • 相关阅读:
    每周一算法:最短路计数
    【Javascript】运算符(赋值,算术,自增,自减)
    java使用了未经检查或不安全的操作。的解决方法
    35岁危机,有哪10种解法?
    【Elixr】 introduce
    Windows 11 22621.1 , 10.0.22622.290 文件资源管理器中启用多标签,全新导航栏
    Java垃圾回收_1
    jar包应用的简单启停脚本
    Notepad++使用技巧
    SBF vs. 火柴大王
  • 原文地址:https://blog.csdn.net/weixin_65637841/article/details/126494322