- 项目结构
create database en004;
use en004;
# 班级表
create table tb_class(
c_id varchar(32) primary key comment '班级ID',
c_name varchar(50) comment '班级名称',
`desc` varchar(200) comment '班级描述'
);
insert into tb_class(`c_id`,`c_name`,`desc`) values('c001','Java12班','。。。。');
insert into tb_class(`c_id`,`c_name`,`desc`) values('c002','Java34班','。。。。');
# 学生表
create table tb_student(
s_id varchar(32) primary key comment '学生ID',
sname varchar(50) comment '姓名',
age int comment '年龄',
birthday date comment '生日',
c_id varchar(32)
);
alter table tb_student add constraint foreign key (c_id) references tb_class (c_id);
insert into tb_student(`s_id`,`sname`,`age`,`birthday`,`c_id`) values('s001','赵三',19,'2001-01-17','c001');
insert into tb_student(`s_id`,`sname`,`age`,`birthday`,`c_id`) values('s002','钱四',19,'2001-05-16','c001');
insert into tb_student(`s_id`,`sname`,`age`,`birthday`,`c_id`) values('s003','孙五',18,'2002-03-15','c001');
insert into tb_student(`s_id`,`sname`,`age`,`birthday`,`c_id`) values('s004','李三',19,'2001-04-14','c002');
insert into tb_student(`s_id`,`sname`,`age`,`birthday`,`c_id`) values('s005','周四',19,'2001-02-13','c002');
insert into tb_student(`s_id`,`sname`,`age`,`birthday`,`c_id`) values('s006','王五',18,'2002-06-12','c002');
- resources
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.czxy.mapper.StudentMapper">
<resultMap id="studentResultMap" type="com.czxy.domain.Student">
<id property="sId" column="s_id"></id>
<id property="cId" column="c_id"></id>
<result property="sname" column="sname"></result>
<result property="age" column="age"></result>
<result property="birthday" column="birthday"></result>
<association property="aClasses" column="c_id" select="com.czxy.mapper.ClassesMapper.selectByPrimaryKey"></association>
</resultMap>
<select id="findAll" resultMap="studentResultMap">
select * from tb_student
<where>
<if test="className !=null and className != ''">
and c_id = #{className}
</if>
<if test="studentName !=null and studentName != ''">
and sname like '%${studentName}%'
</if>
<if test="startAge !=null and startAge != ''">
and age >= #{startAge}
</if>
<if test="endAge !=null and endAge != ''">
and age <= #{endAge}
</if>
</where>
</select>
</mapper>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
欢迎来到首页~
<a href="student_list.html">查询学生列表</a>
</body>
</html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>添加学生</title>
</head>
<body>
<table border="1">
<tr>
<td>所属班级:</td>
<td>
<select name="" id="">
<option value="">--请选择班级--</option>
<option value="">Java12</option>
<option value="">Java34</option>
</select>
</td>
</tr>
<tr>
<td>学生ID:</td>
<td><input type="text"></td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text"></td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text"></td>
</tr>
<tr>
<td>生日</td>
<td><input type="text"></td>
</tr>
<tr>
<td></td>
<td>
<input type="button" value="添加">
<input type="button" value="返回">
</td>
</tr>
</table>
</body>
</html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>修改学生</title>
</head>
<body>
<table border="1">
<tr>
<td>所属班级:</td>
<td>
<select name="" id="">
<option value="">--请选择班级--</option>
<option value="">Java12</option>
<option value="">Java34</option>
</select>
</td>
</tr>
<tr>
<td>学生ID:</td>
<td><input type="text"></td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text"></td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text"></td>
</tr>
<tr>
<td>生日</td>
<td><input type="text"></td>
</tr>
<tr>
<td></td>
<td>
<input type="button" value="修改">
<input type="button" value="返回">
</td>
</tr>
</table>
</body>
</html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>雇员列表</title>
<script type="text/javascript" src="js/jquery-3.3.1.js"></script>
<script>
$(function () {
$.ajax({
"url":"/classes",
"type":"get",
"dataType":"json",
"success":function (data) {
$(data.data).each(function (index,classes) {
var obj =`<option value="${classes.cId}">${classes.cName}</option>`
$("#className").append(obj)
})
}
})
findAll()
})
function findAll() {
var student={
"className":$("#className").val(),
"studentName":$("#studentName").val(),
"startAge":$("#startAge").val(),
"endAge":$("#endAge").val()
}
$.ajax({
"url":"/student/condition",
"type":"post",
"contentType":"application/json;charset=UTF-8",
"data":JSON.stringify(student),
"dataType":"json",
"success":function (data) {
$("#tid").html(`<tr>
<td>学生ID</td>
<td>班级</td>
<td>姓名</td>
<td>年龄</td>
<td>生日</td>
<td>操作</td>
</tr>`)
if (data.code==1){
$(data.data).each(function (index,student) {
var obj =` <tr>
<td>${student.sId}</td>
<td>${student?student.aClasses.cName:''}</td>
<td>${student.sname}</td>
<td>${student.age}</td>
<td>${student.birthday}</td>
<td>
<a href="student_edit.html?id=${student.sId}">修改</a>
</td>
</tr>`
$("#tid").append(obj)
})
}
},
"error":function () {
alert("操作错误")
}
})
}
</script>
</head>
<body>
<a href="index.html">返回首页</a>
<a href="student_add.html">添加学生</a> <br/>
<table >
<tr>
<td>班级</td>
<td>
<select name="" id="className">
<option value="">--选择班级--</option>
</select>
</td>
<td>姓名:</td>
<td>
<input type="text" placeholder="请输入姓名" size="10" id="studentName">
</td>
<td>年龄:</td>
<td>
<input type="text" placeholder="请输入开始年龄" size="10" id="startAge">
--
<input type="text" placeholder="请输入结束年龄" size="10" id="endAge">
</td>
<td><input type="button" value="查询" onclick="findAll()"></td>
</tr>
</table>
<hr />
<table border="1" width="800" id="tid">
<tr>
<td>学生ID</td>
<td>班级</td>
<td>姓名</td>
<td>年龄</td>
<td>生日</td>
<td>操作</td>
</tr>
<!-- <tr>-->
<!-- <td>s001</td>-->
<!-- <td>Java34班</td>-->
<!-- <td>张三</td>-->
<!-- <td>18</td>-->
<!-- <td>2018-09-12</td>-->
<!-- <td>-->
<!-- <a href="student_edit.html">修改</a>-->
<!-- </td>-->
<!-- </tr>-->
</table>
</body>
</html>
- application.properties
server.port=8080
server.port=8080
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/en004?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.druid.initial-size=1
spring.datasource.druid.min-idle=1
spring.datasource.druid.max-active=20
spring.datasource.druid.test-on-borrow=true
mapper.not-empty=false
mapper.identity=MYSQL
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.mapper-locations=classpath:mapper/*.xml
logging.level.com.czxy.dao=debug
src–>main–>java
新项目使用Swagger UI自动生成接口文档,不需要频繁更新接口文档,保证接口文档与代码的一致,值得学习。
package com.czxy.controller;
import com.czxy.domain.Classes;
import com.czxy.service.ClassesService;
import com.czxy.vo.BaseResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* Created by xxx on 2020/9/28.
*/
@RestController
@RequestMapping("/classes")
public class ClassesController {
@Resource
private ClassesService classesService;
@GetMapping
public BaseResult findAll(){
List<Classes>list= classesService.findAll();
return BaseResult.ok("查询成功",list);
}
}
package com.czxy.controller;
import com.czxy.domain.Student;
import com.czxy.service.StudentService;
import com.czxy.vo.BaseResult;
import com.czxy.vo.StudentVo;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* Created by xxx on 2020/9/28.
*/
@RestController
@RequestMapping("/student")
public class StudentController {
@Resource
private StudentService studentService;
@PostMapping("/condition")
public BaseResult findAll(@RequestBody StudentVo studentVo){
List<Student>list=studentService.
findAll(studentVo);
return BaseResult.ok("查询成功",list);
}
}
package com.czxy.domain;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* Created by xxx on 2020/9/28.
*/
@Table(name = "tb_class")
public class Classes {
@Id
@Column(name = "c_id")
private String cId;
@Column(name = "c_name")
private String cName;
@Column(name = "`desc`")
private String desc;
public Classes() {
}
public Classes(String cId, String cName, String desc) {
this.cId = cId;
this.cName = cName;
this.desc = desc;
}
public String getcId() {
return cId;
}
public void setcId(String cId) {
this.cId = cId;
}
public String getcName() {
return cName;
}
public void setcName(String cName) {
this.cName = cName;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
@Override
public String toString() {
return "Class{" +
"cId='" + cId + '\'' +
", cName='" + cName + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
package com.czxy.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import javax.persistence.Column;
import javax.persistence.Id;
import java.util.Date;
/**
* Created by xxx on 2020/9/28.
*/
public class Student {
@Id
@Column(name = "s_id")
private String sId;
@Column(name = "sname")
private String sname;
@Column(name = "age")
private Integer age;
@Column(name = "birthday")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private Date birthday;
@Column(name = "c_id")
private String cId;
private Classes aClasses;
public Student() {
}
public Student(String sId, String sname, Integer age, Date birthday, String cId, Classes aClasses) {
this.sId = sId;
this.sname = sname;
this.age = age;
this.birthday = birthday;
this.cId = cId;
this.aClasses = aClasses;
}
public String getsId() {
return sId;
}
public void setsId(String sId) {
this.sId = sId;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getcId() {
return cId;
}
public void setcId(String cId) {
this.cId = cId;
}
public Classes getaClasses() {
return aClasses;
}
public void setaClasses(Classes aClasses) {
this.aClasses = aClasses;
}
@Override
public String toString() {
return "Student{" +
"sId='" + sId + '\'' +
", sname='" + sname + '\'' +
", age=" + age +
", birthday=" + birthday +
", cId='" + cId + '\'' +
", aClass=" + aClasses +
'}';
}
}
package com.czxy.mapper;
import com.czxy.domain.Classes;
import tk.mybatis.mapper.common.Mapper;
/**
* Created by xxx on 2020/9/28.
*/
@org.apache.ibatis.annotations.Mapper
public interface ClassesMapper extends Mapper<Classes> {
}
package com.czxy.mapper;
import com.czxy.domain.Student;
import com.czxy.vo.StudentVo;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* Created by xxx on 2020/9/28.
*/
@org.apache.ibatis.annotations.Mapper
public interface StudentMapper extends Mapper<Student> {
List<Student> findAll(StudentVo studentVo);
}
package com.czxy.service;
import com.czxy.domain.Classes;
import com.czxy.mapper.ClassesMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
* Created by xxx on 2020/9/28.
*/
@Service
@Transactional
public class ClassesService {
@Resource
private ClassesMapper classesMapper;
public List<Classes> findAll() {
return classesMapper.selectAll();
}
}
package com.czxy.service;
import com.czxy.domain.Student;
import com.czxy.mapper.StudentMapper;
import com.czxy.vo.StudentVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
* Created by xxx on 2020/9/28.
*/
@Service
@Transactional
public class StudentService {
@Resource
private StudentMapper studentMapper;
public List<Student> findAll(StudentVo studentVo) {
return studentMapper.findAll(studentVo);
}
}
package com.czxy.vo;
import java.util.HashMap;
import java.util.Map;
/**
* @author xxx
* @email xxx
*/
public class BaseResult<T> {
//成功状态码
public static final int OK = 1;
//失败状态码
public static final int ERROR = 0;
//返回码
private Integer code;
//返回消息
private String message;
//存放数据
private T data;
//其他数据
private Map<String,Object> other = new HashMap<>();
public BaseResult() {
}
public BaseResult(Integer code, String message) {
this.code = code;
this.message = message;
}
public BaseResult(Integer code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}
/**
* 快捷成功BaseResult对象
* @param message
* @return
*/
public static BaseResult ok(String message){
return new BaseResult(BaseResult.OK , message);
}
public static BaseResult ok(String message, Object data){
return new BaseResult(BaseResult.OK , message, data );
}
/**
* 快捷失败BaseResult对象
* @param message
* @return
*/
public static BaseResult error(String message){
return new BaseResult(BaseResult.ERROR , message);
}
/**
* 自定义数据区域
* @param key
* @param msg
* @return
*/
public BaseResult append(String key , Object msg){
other.put(key , msg);
return this;
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
public T getData() {
return data;
}
public Map<String, Object> getOther() {
return other;
}
}
package com.czxy.vo;
/**
* Created by xxx on 2020/9/28.
*/
public class StudentVo {
private String className;
private String studentName;
private Integer startAge;
private Integer endAge;
public StudentVo() {
}
public StudentVo(String className, String studentName, Integer startAge, Integer endAge) {
this.className = className;
this.studentName = studentName;
this.startAge = startAge;
this.endAge = endAge;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public Integer getStartAge() {
return startAge;
}
public void setStartAge(Integer startAge) {
this.startAge = startAge;
}
public Integer getEndAge() {
return endAge;
}
public void setEndAge(Integer endAge) {
this.endAge = endAge;
}
@Override
public String toString() {
return "StudentVo{" +
"className='" + className + '\'' +
", studentName='" + studentName + '\'' +
", startAge=" + startAge +
", endAge=" + endAge +
'}';
}
}
package com.czxy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Created by xxx on 2020/9/28.
*/
@SpringBootApplication
public class ClassesApplication {
public static void main(String[] args) {
SpringApplication.run(ClassesApplication.class,args);
}
}
- jquery-3.3.1.js
http://way2tutorial.com/jquery/jquery_download.php
pom文件
<?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.czxy</groupId>
<artifactId>exam-classmanagement</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- jar包版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<mybatis.starter.version>1.3.2</mybatis.starter.version>
<mapper.starter.version>2.0.2</mapper.starter.version>
<mysql.version>5.1.32</mysql.version>
<pageHelper.starter.version>1.2.5</pageHelper.starter.version>
<durid.starter.version>1.1.10</durid.starter.version>
</properties>
<!-- 导入需要依赖(坐标/jar包) -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- mybatis启动器 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.starter.version}</version>
</dependency>
<!-- 通用Mapper启动器 -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>${mapper.starter.version}</version>
</dependency>
<!-- 分页助手启动器 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pageHelper.starter.version}</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- Druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${durid.starter.version}</version>
</dependency>
<!--swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
</dependencies>
</project>