项目github地址:https://github.com/cenmen/springboot-ssm-cudr-demo1.0
项目文件目录如下:
首先先创建数据库liang和student表:
在eclipse新建maven工程:
修改pom.xml里的配置:
<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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent>
<groupId>com.liang</groupId>
<artifactId>spring-boot-cudr-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 定义全局属性 -->
<properties>
<!-- 定义更改JDK版本属性 -->
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 配置devtools开启热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!-- 配置tomcat启动器(tomcat我们自己提供) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- 在就容器上借助工具运行spring boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-legacy</artifactId>
<version>1.1.0.RELEASE</version>
</dependency>
<!-- 配置MyBatis启动器 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<!-- 配置mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 配置c3p0连接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId> org.springframework.boot </groupId>
<artifactId> spring-boot-maven-plugin </artifactId>
</plugin>
</plugins>
</build>
</project>
新建application.properties:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/liang
spring.datasource.username=root
spring.datasource.password=1074850787
spring.datasource.type=com.mchange.v2.c3p0.ComboPooledDataSource
然后新建包com.liang.student.beans 新建class:Student类(要记得为自己配置好lombok环境,或者定义setter/getter方法也可以)
package com.liang.student.beans;
import lombok.Data;
//lombok注解,在编译时自动为属性生成构造器,getter/setter,tostring等方法
@Data
public class Student {
private String num;
private String name;
private String grade;
private String college;
}
然后新建包com.liang.student.mapper新建interface:StudentMapper接口
package com.liang.student.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.liang.student.beans.Student;
public interface StudentMapper {
/**
* 获取所有的学生
* @return
*/
@Select("select * from student")
List<Student> getStudents();
/**
* 添加学生
* @param student
*/
@Insert("insert into student values(#{num}, #{name}, #{grade}, #{college})")
void addStudent(Student student);
/**
* 根据ID查询学生
* @param student
* @return
*/
@Select("select * from student where num = #{num}")
Student getStudentById(Student student);
/**
* 修改学生
* @param student
*/
@Update("update student set name = #{name}, grade = #{grade}, college = #{college} where num = #{num}")
void updateStudent(Student student);
/**
* 删除学生
* @param student
*/
@Delete("delete from student where num = #{num}")
void deleteStudent(Student student);
}
然后新建包com.liang.student.service新建interface:IStudentService接口
package com.liang.student.service;
import java.util.List;
import com.liang.student.beans.Student;
public interface IStudentService {
/**
* 获取所有学生
* @return
*/
List<Student> findAllStudent();
/**
* 添加学生
* @param student
*/
void addStudent(Student student);
/**
* 根据ID查询学生
* @param id 学生ID
* @return
*/
Student getStudent(String num);
/**
* 修改学生
* @param student
*/
void updateStudent(Student student);
/**
* 删除学生
* @param id
*/
void deleteStudent(String num);
}
然后新建包com.liang.student.service.impl新建class:StudentServiceImpl类
package com.liang.student.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.liang.student.beans.Student;
import com.liang.student.mapper.StudentMapper;
import com.liang.student.service.IStudentService;
@Service
public class StudentServiceImpl implements IStudentService {
@Autowired
private StudentMapper studentMapper;
@Override
public List<Student> findAllStudent() {
return studentMapper.getStudents();
}
@Override
public void addStudent(Student student) {
studentMapper.addStudent(student);
}
@Override
public Student getStudent(String num) {
Student student = new Student();
student.setNum(num);
return studentMapper.getStudentById(student);
}
@Override
public void updateStudent(Student student) {
studentMapper.updateStudent(student);
}
@Override
public void deleteStudent(String num) {
Student student = new Student();
student.setNum(num);
studentMapper.deleteStudent(student);
}
}
然后新建包com.liang.student.controller新建class:AdminController类
package com.liang.student.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.liang.student.beans.Student;
import com.liang.student.service.IStudentService;
@RestController
@RequestMapping("/admin")
public class AdminController {
@Autowired
private IStudentService studentService;
@RequestMapping(path="/addStudent.do")
public void addStudent(Student student) {
studentService.addStudent(student);
}
@RequestMapping(path="/updateStudent.do")
public void updateStudent(Student student) {
studentService.updateStudent(student);
}
@RequestMapping(path="/deleteStudent.do")
public void deleteStudent(String num) {
studentService.deleteStudent(num);
}
@RequestMapping(path="/getAllStudent.do", produces="application/json;charset=utf-8")
public List<Student> getAllStudent(ModelMap modelMap) {
List<Student> studentList = studentService.findAllStudent();
modelMap.addAttribute("studentList", studentList);
System.out.println(studentList);
return studentList;
}
}
然后新建包com.liang.student.test新建class:Application类
package com.liang.student.test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
/*
SpringBoot的启动类
*/
@SpringBootApplication
@ComponentScan(basePackages={"com.liang.student"})
@MapperScan("com.liang.student.mapper")
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
最后在src/main/resources新建Floder:static文件夹后在里面新建system.html
说明:system.html文件中引用bootstrap模板,另外由于create(增加),update(修改),delete(删除)不需要返回内容,直接提交即可,而read(查找)需要返回内容,使用ajax来提交请求,并获取到reponse内容进行处理填充到页面上。
<!DOCTYPE html>
<html>
<head>
<title>System</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/css/bootstrap.min.css">
<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/popper.js/1.12.5/umd/popper.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/js/bootstrap.min.js"></script>
<script>
function findAllStudent()
{
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
obj = JSON.parse(this.responseText);
var str = "";
for(i = 0; i < obj.length; i++){
str += "<tr><td>"+obj[i].num+"</td><td>"+obj[i].name+"</td><td>"+obj[i].grade+"</td><td>"+obj[i].college+"</td></tr>";
};
document.getElementById("mesContent").innerHTML = str;
}
};
xmlhttp.open("GET", "/admin/getAllStudent.do", true);
xmlhttp.send();
}
</script>
</head>
<style type="text/css">
.left-side{ float:left;width:20%;height:500px;border:2px solid black}
.content-side{ float:left;width:76%;height:500px;border:2px solid black;margin-left: 4px;}
.form-control{width: 180px}
.nav-item{width:100%}
</style>
<body>
<div class="container-fluid">
<div class="left-side">
<!-- Nav pills -->
<ul class="nav nav-pills" role="tablist">
<li class="nav-item">
<a class="nav-link active" data-toggle="pill" href="#read">Read</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="pill" href="#create">Create</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="pill" href="#update">Update</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="pill" href="#delete">Delete</a>
</li>
</ul>
</div>
<div class="content-side">
<!-- Tab panes -->
<div class="tab-content">
<div id="read" class="container-fluid tab-pane active"><br>
<h3>Read</h3>
<div >
<table class="table table-bordered">
<thead>
<tr>
<th>num</th>
<th>name</th>
<th>grade</th>
<th>college</th>
</tr>
</thead>
<tbody id="mesContent">
</tbody>
</table>
</div>
<button type="button" onclick="findAllStudent()" class="btn btn-primary">request</button>
</div>
<div id="create" class="container-fluid tab-pane fade"><br>
<h3>Create</h3>
<form action="/admin/addStudent.do" method="post">
<div class="form-group">
<label for="num">num:</label>
<input type="text" class="form-control" id="num" name="num" value ="123">
</div>
<div class="form-group">
<label for="name">name:</label>
<input type="text" class="form-control" id="name" name="name" value ="123">
</div>
<div class="form-group">
<label for="grade">grade:</label>
<input type="text" class="form-control" id="grade" name="grade" value ="123">
</div>
<div class="form-group">
<label for="college">college:</label>
<input type="text" class="form-control" id="college" name="college" value ="123">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
<div id="update" class="container-fluid tab-pane fade"><br>
<h3>Update</h3>
<form action="/admin/updateStudent.do" method="post">
<div class="form-group">
<label for="num">num: (this num must exist in database)</label>
<input type="text" class="form-control" id="num" name="num" value ="123">
</div>
<div class="form-group">
<label for="name">name:</label>
<input type="text" class="form-control" id="name" name="name" value ="456">
</div>
<div class="form-group">
<label for="grade">grade:</label>
<input type="text" class="form-control" id="grade" name="grade" value ="456">
</div>
<div class="form-group">
<label for="college">college:</label>
<input type="text" class="form-control" id="college" name="college" value ="456">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
<div id="delete" class="container-fluid tab-pane fade"><br>
<h3>Delete</h3>
<form action="/admin/deleteStudent.do" method="post">
<div class="form-group">
<label for="num">num: (this num must exist in database)</label>
<input type="text" class="form-control" id="num" name="num" value ="123">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
准备好之后,在application类中右键Run as运行成功后在浏览器输入localhost:8080/system.html