0.构建项目



1、项目结构如下
 
2、编辑pom.xml文件配置依赖
  - 1 <?xml version="1.0" encoding="UTF-8"?>
- 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- 4 <modelVersion>4.0.0</modelVersion>
- 5 <parent>
- 6 <groupId>org.springframework.boot</groupId>
- 7 <artifactId>spring-boot-starter-parent</artifactId>
- 8 <version>2.7.3</version>
- 9 <relativePath/>
- 10 </parent>
- 11 <groupId>com</groupId>
- 12 <artifactId>sbmxmlday5002</artifactId>
- 13 <version>0.0.1-SNAPSHOT</version>
- 14 <name>sbmxmlday5002</name>
- 15 <description>Demo project for Spring Boot</description>
- 16 <properties>
- 17 <java.version>1.8</java.version>
- 18 </properties>
- 19
- 20 <dependencies>
- 21 <dependency>
- 22 <groupId>org.springframework.boot</groupId>
- 23 <artifactId>spring-boot-starter-jdbc</artifactId>
- 24 </dependency>
- 25 <dependency>
- 26 <groupId>org.springframework.boot</groupId>
- 27 <artifactId>spring-boot-starter-web</artifactId>
- 28 </dependency>
- 29 <dependency>
- 30 <groupId>org.mybatis.spring.boot</groupId>
- 31 <artifactId>mybatis-spring-boot-starter</artifactId>
- 32 <version>2.2.2</version>
- 33 </dependency>
- 34
- 35 <dependency>
- 36 <groupId>mysql</groupId>
- 37 <artifactId>mysql-connector-java</artifactId>
- 38 <version>5.1.38</version>
- 39 </dependency>
- 40
- 41
- 42
- 43 <dependency>
- 44 <groupId>com.github.pagehelper</groupId>
- 45 <artifactId>pagehelper-spring-boot-starter</artifactId>
- 46 <version>1.4.1</version>
- 47 </dependency>
- 48
- 49 <dependency>
- 50 <groupId>org.springframework.boot</groupId>
- 51 <artifactId>spring-boot-starter-test</artifactId>
- 52 <scope>test</scope>
- 53 </dependency>
- 54
- 55 </dependencies>
- 56
- 57 <build>
- 58 <plugins>
- 59 <plugin>
- 60 <groupId>org.springframework.boot</groupId>
- 61 <artifactId>spring-boot-maven-plugin</artifactId>
- 62 </plugin>
- 63 </plugins>
- 64 </build>
- 65
- 66 </project>
复制代码 pom.xml3、在java目录下的com.pojo包下创建持久化类
  - 1 package com.pojo;
- 2 import org.springframework.stereotype.Component;
- 3
- 4 import java.io.Serializable;
- 5
- 6 /**
- 7 * 一方引用多方list集合
- 8 */
- 9 @Component
- 10 public class Dept implements Serializable {
- 11 private Integer deptno ;
- 12 private String dname ;
- 13 private String loc ;
- 14
- 15 public Dept() {
- 16 }
- 17
- 18 public Dept(Integer deptno, String dname, String loc) {
- 19 this.deptno = deptno;
- 20 this.dname = dname;
- 21 this.loc = loc;
- 22 }
- 23
- 24 public Integer getDeptno() {
- 25 return deptno;
- 26 }
- 27
- 28 public void setDeptno(Integer deptno) {
- 29 this.deptno = deptno;
- 30 }
- 31
- 32
- 33 public String getDname() {
- 34 return dname;
- 35 }
- 36
- 37 public void setDname(String dname) {
- 38 this.dname = dname;
- 39 }
- 40
- 41
- 42 public String getLoc() {
- 43 return loc;
- 44 }
- 45
- 46 public void setLoc(String loc) {
- 47 this.loc = loc;
- 48 }
- 49
- 50 @Override
- 51 public String toString() {
- 52 return "Dept{" +
- 53 "deptno=" + deptno +
- 54 ", dname='" + dname + '\'' +
- 55 ", loc='" + loc + '\'' +
- 56 '}';
- 57 }
- 58 }
复制代码 Dept.java  - 1 package com.pojo;
- 2
- 3 import org.springframework.stereotype.Component;
- 4
- 5 import java.io.Serializable;
- 6
- 7 /**
- 8 * 多方引用一方对象
- 9 */
- 10 @Component
- 11 public class Emp implements Serializable{
- 12 private Integer empno ;
- 13 private String ename ;
- 14 private String job ;
- 15 private Integer mgr ;
- 16 private String hiredate ;
- 17 private Double sal ;
- 18 private Double comm ;
- 19 private Dept dept;
- 20
- 21
- 22 public Emp() {
- 23 }
- 24
- 25 public Emp(Integer empno, String ename, String job, Integer mgr, String hiredate, Double sal, Double comm, Dept dept) {
- 26 this.empno = empno;
- 27 this.ename = ename;
- 28 this.job = job;
- 29 this.mgr = mgr;
- 30 this.hiredate = hiredate;
- 31 this.sal = sal;
- 32 this.comm = comm;
- 33 this.dept = dept;
- 34 }
- 35
- 36 public Integer getEmpno() {
- 37 return empno;
- 38 }
- 39
- 40 public void setEmpno(Integer empno) {
- 41 this.empno = empno;
- 42 }
- 43
- 44
- 45 public String getEname() {
- 46 return ename;
- 47 }
- 48
- 49 public void setEname(String ename) {
- 50 this.ename = ename;
- 51 }
- 52
- 53
- 54 public String getJob() {
- 55 return job;
- 56 }
- 57
- 58 public void setJob(String job) {
- 59 this.job = job;
- 60 }
- 61
- 62
- 63 public Integer getMgr() {
- 64 return mgr;
- 65 }
- 66
- 67 public void setMgr(Integer mgr) {
- 68 this.mgr = mgr;
- 69 }
- 70
- 71
- 72 public String getHiredate() {
- 73 return hiredate;
- 74 }
- 75
- 76 public void setHiredate(String hiredate) {
- 77 this.hiredate = hiredate;
- 78 }
- 79
- 80
- 81 public Double getSal() {
- 82 return sal;
- 83 }
- 84
- 85 public void setSal(Double sal) {
- 86 this.sal = sal;
- 87 }
- 88
- 89
- 90 public Double getComm() {
- 91 return comm;
- 92 }
- 93
- 94 public void setComm(Double comm) {
- 95 this.comm = comm;
- 96 }
- 97
- 98 public Dept getDept() {
- 99 return dept;
- 100 }
- 101
- 102 public void setDept(Dept dept) {
- 103 this.dept = dept;
- 104 }
- 105
- 106 @Override
- 107 public String toString() {
- 108 return "Emp{" +
- 109 "empno=" + empno +
- 110 ", ename='" + ename + '\'' +
- 111 ", job='" + job + '\'' +
- 112 ", mgr=" + mgr +
- 113 ", hiredate='" + hiredate + '\'' +
- 114 ", sal=" + sal +
- 115 ", comm=" + comm +
- 116 ", dept=" + dept +
- 117 '}';
- 118 }
- 119 }
复制代码 Emp.java4、在java目录下的com.mapper包下创建映射接口
  - 1 package com.mapper;
- 2 import com.pojo.Dept;
- 3
- 4 import java.util.List;
- 5
- 6 public interface DeptMapper {
- 7 List<Dept> selectAllDept();
- 8 }
复制代码 DeptMapper.java  - 1 package com.mapper;
- 2 import com.pojo.Emp;
- 3
- 4 import java.util.List;
- 5
- 6 public interface EmpMapper {
- 7 List<Emp> selectEmp(Emp emp);
- 8 int insertEmp(Emp emp);
- 9 int updateEmp(Emp emp);
- 10 int deleteEmp(Emp emp);
- 11 }
复制代码 EmpMapper.java5、在java目录下的com.service包下创建业务层接口和实现类
  - 1 package com.service;
- 2
- 3 import com.pojo.Dept;
- 4
- 5 import java.util.List;
- 6
- 7 public interface DeptService {
- 8 List<Dept> downOption();
- 9 }
复制代码 DeptService.java  - 1 package com.service;
- 2
- 3 import com.mapper.DeptMapper;
- 4 import com.pojo.Dept;
- 5 import org.springframework.beans.factory.annotation.Autowired;
- 6 import org.springframework.stereotype.Service;
- 7
- 8 import java.util.List;
- 9
- 10 @Service
- 11 public class DeptServiceImpl implements DeptService{
- 12 @Autowired
- 13 private DeptMapper deptMapper;
- 14
- 15
- 16 @Override
- 17 public List<Dept> downOption() {
- 18 return deptMapper.selectAllDept();
- 19 }
- 20 }
复制代码 DeptServiceImpl.java  - 1 package com.service;
- 2
- 3 import com.github.pagehelper.PageInfo;
- 4 import com.pojo.Emp;
- 5
- 6 import java.util.List;
- 7
- 8 public interface EmpService {
- 9 List<Emp> show(Emp emp);
- 10 PageInfo<Emp> showPage(Integer pageno, Integer pagesize, Emp emp);
- 11 int add(Emp emp);
- 12 int edit(Emp emp);
- 13 int del(Emp emp);
- 14 }
复制代码 EmpService.java  - 1 package com.service;
- 2
- 3 import com.github.pagehelper.PageHelper;
- 4 import com.github.pagehelper.PageInfo;
- 5 import com.mapper.EmpMapper;
- 6 import com.pojo.Emp;
- 7 import org.springframework.beans.factory.annotation.Autowired;
- 8 import org.springframework.stereotype.Service;
- 9 import org.springframework.transaction.annotation.Transactional;
- 10
- 11 import java.util.List;
- 12
- 13 /*
- 14 @Service的功能等同于代理对象在spring的xml文件中动态添加bean节点,
- 15 如果不指定名称,则底层代理在构建bean节点的时候id是类的第一个首字母小写
- 16 <bean id="empServiceImpl" />
- 17 @Service(value = "empse")的功能等同于代理对象在spring的xml文件中动态添加id值为empse的bean节点
- 18 <bean id="empse" />
- 19 */
- 20 @Service
- 21 @Transactional
- 22 public class EmpServiceImpl implements EmpService {
- 23 /*
- 24 @Autowired是spring的资源包下注解,按照对象的类型进行自动注入,
- 25 和对象名称无关,只要类型是匹配的,代理就会在你需要的时候给你注入对象值
- 26 @Resource是javax包下的注解,按照对象属性名进行注入,
- 27 和对象名称关系密切,如果对象名称不匹配,则不能完成注入,会报错
- 28 总结:相比而言,使用@Resource的出错记录更大,因此我们常规选择使用@Autowired
- 29 */
- 30 @Autowired
- 31 private EmpMapper empMapper;
- 32
- 33 // ★★★★
- 34 @Override
- 35 public PageInfo<Emp> showPage(Integer pageno, Integer pagesize, Emp emp) {
- 36 //封装分页参数值
- 37 PageHelper.startPage(pageno,pagesize);
- 38 //查询所有
- 39 List<Emp> empList=empMapper.selectEmp(emp);
- 40 //返回根据分页集合对象再进行分页
- 41 return new PageInfo<Emp>(empList);
- 42 }
- 43
- 44 @Override
- 45 public List<Emp> show(Emp emp) {
- 46 return empMapper.selectEmp(emp);
- 47 }
- 48
- 49 @Override
- 50 public int add(Emp emp) {
- 51 return empMapper.insertEmp(emp);
- 52 }
- 53
- 54 @Override
- 55 public int edit(Emp emp) {
- 56 return empMapper.updateEmp(emp);
- 57 }
- 58
- 59 @Override
- 60 public int del(Emp emp) {
- 61 return empMapper.deleteEmp(emp);
- 62 }
- 63 }
复制代码 EmpServiceImpl.java6、在java目录下的com.controller包下创建控制类CenterController.java
  - 1 package com.controller;
- 2
- 3 import com.github.pagehelper.PageInfo;
- 4 import com.pojo.Dept;
- 5 import com.pojo.Emp;
- 6 import com.service.DeptService;
- 7 import com.service.EmpService;
- 8 import org.springframework.beans.factory.annotation.Autowired;
- 9 import org.springframework.stereotype.Controller;
- 10 import org.springframework.ui.Model;
- 11 import org.springframework.web.bind.annotation.RequestMapping;
- 12 import org.springframework.web.bind.annotation.ResponseBody;
- 13 import org.springframework.web.bind.annotation.RestController;
- 14
- 15 import javax.servlet.http.HttpSession;
- 16 import java.util.HashMap;
- 17 import java.util.List;
- 18 import java.util.Map;
- 19
- 20 @RestController
- 21 public class CenterController {
- 22 @Autowired
- 23 private DeptService deptService;
- 24
- 25 @Autowired
- 26 private EmpService empService;
- 27
- 28 @RequestMapping("/option.do")
- 29 public List<Dept> optionData(){
- 30 return deptService.downOption();
- 31 }
- 32 @RequestMapping("/page.do")
- 33 public PageInfo<Emp> showPage(Integer pageno,Emp emp){
- 34 return empService.showPage(pageno,3,emp);
- 35 }
- 36
- 37 //因为修改页面需要下拉列表和对象给表单value赋值,因此回调时携带一个对象一个集合,因此用map
- 38 @RequestMapping("/info.do")
- 39 public Map<String,Object> info(Emp emp){
- 40 Map<String,Object> map=new HashMap<String,Object>();
- 41 map.put("info",empService.show(emp).get(0));
- 42 map.put("deptlist",deptService.downOption());
- 43 return map;
- 44 }
- 45 @RequestMapping("/edit.do")
- 46 public int edit(Emp emp){
- 47 return empService.edit(emp);
- 48 }
- 49 @RequestMapping("/add.do")
- 50 public int add(Emp emp){
- 51 return empService.add(emp);
- 52 }
- 53
- 54 @RequestMapping("/del.do")
- 55 public int del(Emp emp){
- 56 return empService.del(emp);
- 57 }
- 58
- 59
- 60
- 61
- 62 }
复制代码 CenterController.java7、在resouces目录下mapper文件夹下创建映射xml文件
  - 1 <?xml version="1.0" encoding="UTF-8" ?>
- 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- 3
- 4
- 5
- 6 <mapper namespace="com.mapper.DeptMapper">
- 7 <select id="selectAllDept" resultType="Dept">
- 8 select * from dept
- 9 </select>
- 10 </mapper>
复制代码 DeptMapper.xml  - 1 <?xml version="1.0" encoding="UTF-8" ?>
- 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- 3 <mapper namespace="com.mapper.EmpMapper">
- 4
- 21
- 22
- 23
- 24 <select id="selectEmp" resultMap="empmap" parameterType="Emp">
- 25 select d.dname,d.loc,e.* from emp e,dept d where e.deptno=d.deptno
- 26 <if test="empno!=null">
- 27 and e.empno=#{empno}
- 28 </if>
- 29 <if test="ename!=null">
- 30 and e.ename=#{ename}
- 31 </if>
- 32 <if test="job!=null">
- 33 and e.job=#{job}
- 34 </if>
- 35 <if test="dept!=null and dept.deptno!=null and dept.deptno!=-1">
- 36 and e.deptno=#{dept.deptno}
- 37 </if>
- 38 </select>
- 39
- 40 <resultMap id="empmap" type="Emp">
- 41
- 42 <id column="EMPNO" property="empno"/>
- 43 <result column="ENAME" property="ename"/>
- 44 <result column="JOB " property="job"/>
- 45 <result column="MGR" property="mgr"/>
- 46 <result column="HIREDATE" property="hiredate"/>
- 47 <result column="SAL" property="sal"/>
- 48 <result column="COMM" property="comm"/>
- 49
- 50
- 51
- 52
- 53
- 54 <association property="dept" javaType="Dept" column="DEPTNO">
- 55
- 56 <id column="DEPTNO" property="deptno"/>
- 57 <result column="DNAME" property="dname"/>
- 58 <result column="LOC" property="loc"/>
- 59 </association>
- 60 </resultMap>
- 61
- 62 <insert id="insertEmp" parameterType="Emp">
- 63 INSERT INTO emp(empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES(#{empno},#{ename},#{job},#{mgr},#{hiredate},#{sal},#{comm},#{dept.deptno})
- 64 </insert>
- 65
- 66
- 67 <update id="updateEmp" parameterType="Emp">
- 68 UPDATE emp
- 69 <set>
- 70 <if test="ename!=null">
- 71 ename=#{ename} ,
- 72 </if>
- 73 <if test="job!=null">
- 74 job=#{job} ,
- 75 </if>
- 76 <if test="mgr!=null">
- 77 mgr=#{mgr} ,
- 78 </if>
- 79 <if test="hiredate!=null">
- 80 hiredate=#{hiredate} ,
- 81 </if>
- 82 <if test="sal!=null">
- 83 sal=#{sal},
- 84 </if>
- 85 <if test="comm!=null">
- 86 comm=#{comm},
- 87 </if>
- 88 <if test="dept!=null and dept.deptno!=null">
- 89 deptno=#{dept.deptno} ,
- 90 </if>
- 91 </set>
- 92 <include refid="wherecondition"/>
- 93 </update>
- 94
- 95 <delete id="deleteEmp" parameterType="Emp">
- 96 delete from emp
- 97 <include refid="wherecondition"/>
- 98 </delete>
- 99
- 100
- 101 <sql id="wherecondition">
- 102 <where>
- 103 <if test="empno!=null">
- 104 empno=#{empno}
- 105 </if>
- 106 </where>
- 107 </sql>
- 108
- 109 </mapper>
复制代码 EmpMapper.xml8、在resouces目录下mapper文件夹下编辑核心属性文件
  - 1 server.port=9090
- 2
- 3 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
- 4 spring.datasource.url=jdbc:mysql://localhost:3306/ar
- 5 spring.datasource.username=root
- 6 spring.datasource.password=123456
- 7
- 8 mybatis.type-aliases-package=com.pojo
- 9
- 10 mybatis.mapper-locations=classpath:mapper/*.xml
- 11
- 12 pagehelper.helper-dialect=mysql
复制代码 application.properties10、在resouces目录下的static文件夹下创建js目录,且将jquery的库文件jquery-1.8.3.js拷贝进去
11、在resouces目录下的static文件夹下main.html文件
  - 1 <!DOCTYPE html>
- 2 <html lang="en">
- 3 <head>
- 4 <meta charset="UTF-8">
- 5 <title>Title</title>
- 6
- 7
- 8 </head>
- 9 <body>
- 10 <a target="_blank" href="https://www.cnblogs.com/add.html">添加</a>
- 11
- 12 <select name="dept.deptno" id="deptno"></select>
- 13 <input type="button" value="查询">
- 14
- 15 <table></table>
- 16 <p id="pageroot"></p>
- 17 </body>
- 18 </html>
复制代码 main.html12、在resouces目录下的static文件夹的js目录下创建main.js文件
 [code] 1 $(function () { 2 //下拉列表数据 3 optionData(); 4 //初始化查询所有 5 initData(1,-1); 6 7 $("[type=button]").click(function () { 8 var deptno=$("#deptno").val(); 9 alert(deptno); 10 initData(1,deptno); 11 }); 12 }); 13 14 function optionData() { 15 $.ajax({ 16 url:"option.do", 17 type:"post", 18 dataType:"json", 19 data:{}, 20 async:true, 21 success:function (obj) { 22 //将值打印在控制台 23 console.log(obj); 24 $("select").html(" "); 25 var str="--请选择--"; 26 for(var i=0;i1){ 74 pagestr+="首页"; 75 pagestr+=" "; 76 pagestr+="上一页"; 77 pagestr+=" "; 78 }else{ 79 pagestr+="首页"; 80 pagestr+=" "; 81 pagestr+="上一页"; 82 pagestr+=" "; 83 } 84 if(pageno |