07.Spring Boot 实战~Spring Boot整合Mybatis
本文是上一篇文章的后续,详情点击该链接
本文用到的数据库表
【声明:本文数据库内的信息是随机添加用来学习,如有雷同,纯属巧合】
启动依赖器
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
application.properties配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
#数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#下面这个就可以扫描到配置文件
mybatis.mapper-locations: classpath:mybatis/*.xml
mybatis.type-aliases-package: com.alvin.domain
搭好项目框架
导入依赖
<?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.alvin</groupId>
<artifactId>SpringBootAndMybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>SpringBootAndMybatis Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!-- Spring Boot启动 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.0.RELEASE</version>
</dependency>
<!-- Spring boot整合Mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<!--Thymeleaf启动器坐标-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.3.0.RELEASE</version>
</dependency>
<!--数据库驱动坐标-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<!-- druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
当项目有多个Maven时,需要继承无法使用多个parent,可以有以下两种解决方案
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.1.RELEASE</version>
<configuration>
<executable>true</executable>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
PageController
@Controller
public class PageController {
//页面跳转方法
@RequestMapping("/{page}")
public String showPage(@PathVariable String page){
return page;
}
}
实体类
public class Student implements Serializable {
private String son;
private String realname;
private String password;
private String classname;
private Double score;
}//get set就不在文章里面写了
启动类
@SpringBootApplication
@MapperScan("com.alvin.mapper") //接口扫描
public class SpringBootAndMybatis {
public static void main(String[] args) {
SpringApplication.run(SpringBootAndMybatis.class,args);
}
}
需求:完成查询全部学生信息操作
Mapper
public interface StudentMapper {
//查询全部信息
@Select("select * from student")
List<Student>FindAll();
}
Service
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentMapper studentMapper;
@Override
public List<Student> FindAll() {
return studentMapper.FindAll();
}
}
Controller
@Controller
@RequestMapping("/alvin")
public class MyController {
@Autowired
private StudentService studentService;
@RequestMapping("/FindAll")
public String FindAll(Model model){
model.addAttribute("list",studentService.FindAll());
return "mainStu";
}
}
视图
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<link rel="shortcut icon" href="../resources/favicon.ico" th:href="@{/static/favicon.ico}"/>
<head>
<meta charset="UTF-8">
<title>学生信息首页</title>
</head>
<body>
<table border="1px" align="center">
<tr>
<td>学号</td>
<td>姓名</td>
<td>密码</td>
<td>院系</td>
<td>成绩</td>
<td>功能</td>
</tr>
<!--/*@thymesVar id="list" type=""*/-->
<tr th:each="student : ${list}">
<td th:text="${student.getSon()}"></td>
<td th:text="${student.getRealname()}"></td>
<td th:text="${student.getPassword()}"></td>
<td th:text="${student.getClassname()}"></td>
<td th:text="${student.getScore()}"></td>
<td>
<a th:href="@{/alvin/MyControllerFindBySon (son=${student.getSon()})}">修改</a>
<a th:href="@{/alvin/MyControllerDel (son=${student.getSon()})}">删除</a>
</td>
</tr>
</table>
</body>
</html>
需求:新增学生信息
Mapper
@Insert("insert into student value(#{son},#{realname},#{password},#{classname},#{score})")
int Insert(Student student);
Service
@Override
public int Insert(Student student) {
return studentMapper.Insert(student);
}
Controller
@RequestMapping("/InsertStu")
public String Insert(Student student){
int n = studentService.Insert(student);
if(n > 0){
//说明成功
return "succeed";
}
//失败跳回去
return "InsertStu";
}
视图
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<link rel="shortcut icon" href="../resources/favicon.ico" th:href="@{/static/favicon.ico}"/>
<head>
<meta charset="UTF-8">
<title>添加学生</title>
</head>
<body>
<form action="/alvin/InsertStu" method="post">
学号: <input type="text" name="son"/><br/>
姓名: <input type="text" name="realname"/><br/>
密码: <input type="password" name="password"/><br/>
院系: <input type="text" name="classname"/><br/>
成绩: <input type="text" name="score"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
需求:按学号查询信息,发送到修改页面
Mapper
@Select("select * from student where son = #{param1}")
Student FindBySon(String son);
Service
@Override
public Student FindBySon(String son) {
return studentMapper.FindBySon(son);
}
Controller
@RequestMapping("/MyControllerFindBySon")
public String Update(String son,Model model){
Student student = studentService.FindBySon(son);
model.addAttribute("stu",student);
return "UpdateStu";
}
视图
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<link rel="shortcut icon" href="../resources/favicon.ico" th:href="@{/static/favicon.ico}"/>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/alvin/MyControllerUpdate" method="post">
学号: <input type="text" name="son" th:value="${stu.getSon()}"/><br/>
姓名: <input type="text" name="realname" th:value="${stu.getRealname()}"/><br/>
密码: <input type="password" name="password" th:value="${stu.getPassword()}"/><br/>
院系: <input type="text" name="classname" th:value="${stu.getClassname()}"/><br/>
成绩: <input type="text" name="score" th:value="${stu.getScore()}"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
修改操作
Mapper
@Update("update student set password = #{password},score = #{score} where son = #{son}")
int UpdateStu(Student student);
Service
@Override
public int UpdateStu(Student student) {
return studentMapper.UpdateStu(student);
}
Controller
@RequestMapping("/MyControllerUpdate")
public String MyControllerUpdate(Student student){
int n = studentService.UpdateStu(student);
if(n > 0) {
return "succeed";
}
return "UpdateStu";
}
}
需求:删除学生信息
Mapper
@Delete("delete from student where son = #{son}")
void Del(String son);
Service
@Override
public void Del(String son) {
studentMapper.Del(son);
}
Controller
@RequestMapping("/MyControllerDel")
public String MyControllerDel(String son){
studentService.Del(son);
return "succeed";
}