目录
1. 结构
2. 环境:
3. controller
4. mapper
5. service
6. serviceImpl
7. mapper.xml
8. emplist.html
9. update
1. 结构
2. 环境:
SSM整合 Spring SprintMVC Mybatishttps://blog.csdn.net/qq_41950447/article/details/128033971
3. controller
package com.zt.ssm.controller;import com.github.pagehelper.PageInfo;
import com.zt.ssm.pojo.Emp;
import com.zt.ssm.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;import javax.jws.WebParam;
import java.util.List;@Controller
public class EmpController {@Autowiredprivate EmpService empService;@RequestMapping(value = "/emplist", method = RequestMethod.GET)public String EmpsAll(Model model){List<Emp> emplist = empService.getEmpsList();model.addAttribute("emplist",emplist);return "emplist";}/**** 删除用户信息** @问题:* 没有设置隐藏域 会报 Request method 'POST' not supported* 没有设置处理请球方法put和delete的hiddenhttpmethodfilter过滤器 会报Request method 'POST' not supported错误* 重定向的时候 没有加斜线!!!!"redirect:/emplist"* @return*/@RequestMapping(value = "/emplist/{empId}", method = RequestMethod.DELETE)public String deleteEmp(@PathVariable("empId") Integer empId){System.out.println("=========================");System.out.println(empId);System.out.println("=========================");empService.deleteEmp(empId);
// 这里记得加斜线return "redirect:/emplist";}/*** 更新数据*/@RequestMapping(value = "emplist" ,method = RequestMethod.PUT)public String updateEmp(@RequestParam("empId") Integer empId,@RequestParam("empName") String empName,@RequestParam("age") Integer age ,@RequestParam("gender")String gender,@RequestParam("email") String email ){Emp emp = new Emp(empId,empName,age,gender,email);empService.updateEmp(emp);System.out.println(emp);return "redirect:/emplist";}//数据回显@RequestMapping(value = "emplist/{empId}" , method = RequestMethod.GET)public String getEmpById(@PathVariable("empId")Integer empId, Model model){Emp emp = empService.getEmpById(empId);model.addAttribute("emp", emp);return "updateEmp";}/**** 分页查询*/@RequestMapping(value = "emplist/page/{pageNum}" , method = RequestMethod.GET)public String getEmpByPageNum(@PathVariable("pageNum")Integer pageNum, Model model){PageInfo<Emp> pageInfo = empService.getEmpPage(pageNum);model.addAttribute("page", pageInfo);System.out.println(pageInfo);return "emplist";}}
4. mapper
package com.zt.ssm.mapper;import com.zt.ssm.pojo.Emp;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface EmpMapper {// 获取所有员工列表 员工列表功能List<Emp> getEmpsList();// 根据id删除员工信息void deleteEmp(@Param("empId") Integer empId);
// 修改员工信息void updateEmp(Emp emp);
// 更新时数据回显Emp getEmpById(@Param("empId") Integer empId);
}
pojo
package com.zt.ssm.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Emp {private Integer empId;private String empName;private Integer age;private String gender;private String email;
}
5. service
package com.zt.ssm.service;import com.github.pagehelper.PageInfo;
import com.zt.ssm.pojo.Emp;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;import java.util.List;public interface EmpService {/*** 获取所有列表* @return*/List<Emp> getEmpsList();/*** 根据id删除* @param empId*/void deleteEmp(@Param("empId") Integer empId);/*** 修改员工信息*/void updateEmp(Emp emp);/*** 数据回显*/Emp getEmpById(@Param("empId") Integer empId);/*** 分页*/PageInfo<Emp> getEmpPage(Integer pageNum);
}
6. serviceImpl
package com.zt.ssm.service.impl;import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zt.ssm.mapper.EmpMapper;
import com.zt.ssm.pojo.Emp;
import com.zt.ssm.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.List;@Service
@Transactional
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;@Overridepublic List<Emp> getEmpsList() {return empMapper.getEmpsList();}@Overridepublic void deleteEmp(Integer empId) {empMapper.deleteEmp(empId);}@Overridepublic void updateEmp(Emp emp) {empMapper.updateEmp(emp);}@Overridepublic Emp getEmpById(Integer empId) {return empMapper.getEmpById(empId);}@Overridepublic PageInfo<Emp> getEmpPage(Integer pageNum) {PageHelper.startPage(pageNum, 3);List<Emp> empsList = empMapper.getEmpsList();//获取分页相关数据PageInfo<Emp> page = new PageInfo<>(empsList, 3);return page;}
}
7. mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace :对应的mapper接口 -->
<mapper namespace="com.zt.ssm.mapper.EmpMapper"><!-- 获取所有员工列表List<Emp> getEmpsList();
--><select id="getEmpsList" resultType="emp">select * from t_emp</select>
<!-- void deleteEmp(@Param("empId") Integer empId);--><delete id="deleteEmp">delete from t_emp where emp_id = #{empId}</delete><!-- void updateEmp(@Param("empId") Integer empId);--><update id="updateEmp" >update t_emp set emp_name = #{empName}, age=#{age}, gender=#{gender}, email={email} where empId=#{empId}</update><!-- Emp getEmpById(@Param("empId") Integer empId);--><select id="getEmpById" resultType="emp">select * from t_emp where emp_id=#{empId}</select>
</mapper>
8. 页面emplist.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>emplist</title><script type="text/javascript" th:src="@{/static/js/vue.js}"></script>
</head>
<body>
<h1>emploee</h1><div id="table"><table border="1" cellpadding="0" cellspacing="0" style="text-align: center;"><tr id="tr1"><th colspan="6">员工列表</th></tr><tr id="tr2"><th>序号</th><th>姓名</th><th>年龄</th><th>性别</th><th>邮箱</th><th>操作</th></tr><tr th:each="emp, status:${page.list}" id="tr3"><!-- status.count获取循环的次数--><td th:text="${status.count}"></td><td th:text="${emp.empName}"></td><td th:text="${emp.age}"></td><td th:text="${emp.gender}"></td><td th:text="${emp.email}"></td><td><a @click="deleteEmp" th:href="@{'/emplist/'+${emp.empId}}">删除</a><a th:href="@{'/emplist/'+${emp.empId}}">修改</a></td></tr></table><a th:if="${page.hasPreviousPage}" th:href="@{/emplist/page/1}">首页</a>
<!-- model里的数据拼接到路径中 路径拼接--><a th:if="${page.hasPreviousPage}" th:href="@{'/emplist/page/'+${page.prePage}}">上一页</a><span th:each="nn:${page.navigatepageNums}"><a th:if="${page.pageNum == nn}" style="color: red;" th:href="@{'/emplist/page/'+${nn}}" th:text="'['+${nn}+']'"></a><a th:if="${page.pageNum != nn}" th:href="@{'/emplist/page/'+${nn}}" th:text="${nn}"></a></span><a th:if="${page.hasNextPage}" th:href="@{'/emplist/page/'+${page.nextPage}}">下一页</a><a th:if="${page.hasNextPage}" th:href="@{'/emplist/page/'+${page.pages}}">末页</a><!-- 作用:通过超链接控制表单的提交,将post请求转换为delete请求 --><form id="delete_form" method="post"><!-- HiddenHttpMethodFilter要求:必须传输_method请求参数,并且值为最终的请求方式 --><input type="hidden" name="_method" value="delete"/></form></div><script type="text/javascript">var vue = new Vue({el:"#table",methods:{//event表示当前事件deleteEmp:function (event) {//通过id获取表单标签var delete_form = document.getElementById("delete_form");//将触发事件的超链接的href属性为表单的action属性赋值delete_form.action = event.target.href;console.log("delete_form.action")console.log(delete_form.action)console.log("delete_form.action")//提交表单delete_form.submit();//阻止超链接的默认跳转行为event.preventDefault();}}});
</script>
</body>
</html><!--<style>--><!-- #table{-->
<!-- border: 1px solid black;-->
<!-- width: 100%;-->
<!-- border-collapse:collapse;-->
<!-- }-->
<!-- #tr1{-->
<!-- border: 1px solid black;-->
<!-- }-->
<!-- #tr2{-->
<!-- border: 1px solid black;-->
<!-- }-->
<!-- #tr3{-->
<!-- border: 1px solid black;-->
<!-- }-->
<!--</style>-->
9. update
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns="http://www.w3.org/1999/html">
<head><meta charset="UTF-8"><title>UpdateEmp</title>
</head>
<body>
<form th:method="put" th:action="@{/emplist}"><input type="hidden" name="_method" value="put">empId:<input type="text" name="empId" th:value="${emp.empId}"></br>empName:<input type="text" name="empName" th:value="${emp.empName}"></br>age:<input type="text" name="age" th:value="${emp.age}"></br>gender:<input type="text" name="gender" th:value="${emp.gender}"></br>email:<input type="text" name="email" th:value="${emp.email}"></br>
<input type="submit" th:value="提交"></form>
</body>
</html>