整合SpringBoot结合SpringMVC + Thymeleaf 进行简单的CRUD操作
添加pom依赖
<!-- spring boot web项目 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 前端Thymeleaf框架 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- spring boot整合mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>RELEASE</version>
</dependency>
<!-- mysql数据库服务 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
<!-- spring boot整合druid数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.14</version>
</dependency>
<!-- 热部署工具 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
启动类
@SpringBootApplication
// 配置扫描mybatis的mapper接口
@MapperScan("com.example.demo.mapper")
public class SpringbootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootDemoApplication.class, args);
}
}
配置文件
server.port=8081
spring.freemarker.suffix=.ftl
spring.servlet.multipart.enabled=true
#设置单个文件上传的大小
spring.servlet.multipart.max-file-size=20MB
#设置一次上传文件总的大小
spring.servlet.multipart.max-request-size=20MB
#mysql连接配置信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasouce.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC
spring.datasouce.username=root
spring.datasource.password=123456
#连接池配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#mybatis的xml bean路径
mybatis.type-aliases-package=com.example.demo.bean
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
数据库表和实体bean
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`age` int(3) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
@Component
public class User {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public User() {
System.out.println("This is constructor method.");
}
public User(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
}
定义mapper接口UserMapper
public interface UserMapper {
public List<User> query(User user);
public void save(User user);
public User queryById(Integer id);
public void update(User user);
}
定义xml映射文件UserMapper.xml
注意:映射文件名字必须和对应的Mapper接口名字一致
<?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.example.demo.mapper.UserMapper">
<select id="query" resultType="Users">
select * from t_user
</select>
<insert id="save" parameterType="User">
insert into t_user(name, age) values(#{name}, #{age})
</insert>
<select id="queryById" resultType="User">
select * from t_user where id = #{id}
</select>
<update id="update" parameterType="User">
update t_user set name=#{name}, age=#{age} where id=#{id}
</update>
<delete id="remove"">
delete from t_user where id=#{id}
</delete>
</mapper>
业务层Service
public interface IUserService {
public List<User> query(User user);
public void save(User user);
public User queryById(Integer id);
public void update(User user);
public void remove(Integer id);
}
@Service
public class UserServiceImpl implements IUserService {
@Autowired
UserMapper userMapper;
@Override
public List<User> query(User user) {
return userMapper.query(user);
}
@Override
public void save(User user) {
return userMapper.save(user);
}
@Override
public User queryById(Integer id) {
return userMapper.queryById(id);
}
@Override
public void update(User user) {
return userMapper.update(user);
}
@Override
public void remove(Integer id) {
return userMapper.remove(id);
}
}
控制层Controller
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
IUserService userService;
// 请求访问具体html页面,比如新增用户界面
@RequestMapping("page")
public String showPage(@PathVariable String page) {
return page;
}
@RequestMapping("query")
public List<User> query(Model model) {
model.addAttribute("list", userService.query(null));
return "user";
}
@RequestMapping("save")
public String save(User user) {
userService.save(user);
return "redirect:/user/query";
}
@RequestMapping("edit")
public String edit(Integer id, Model model) {
User user = userService.queryById(id);
mode.addAttribute("user", user);
return "edit";
}
@RequestMapping("update")
public String update(User user) {
userService.update(user);
return "redirect:/user/query";
}
@RequestMapping("remove")
public String remove(Integer id) {
userService.remove(id);
return "redirect:/user/query";
}
}
定义前台页面
/resources/templates/user.html
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>用户列表</title>
</head>
<body>
<h1>用户列表</h1>
<table border="1" style="width: 500px;">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
</tr>
<tr th:each="user:${list}">
<td th:text=${user.id}></td>
<td th:text=${user.name}></td>
<td th:text=${user.age}></td>
<td><a th:href="@{/user/edit(id=${user.id})}">修改</a></td>
<td><a th:href="@{/user/remove(id=${user.id})}">删除</a></td>
</tr>
</table>
</body>
</html>
/resources/templates/addUser.html
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>添加用户</title>
</head>
<body>
<h1>添加用户</h1>
<form th:action="@{/user/save}" method="post">
<label>姓名:</label><input type="text" name="name"><br>
<label>年龄:</label><input type="text" name="age"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
/resources/templates/edit.html
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>编辑用户</title>
</head>
<body>
<h1>编辑用户</h1>
<form th:action="@{/user/update}" method="post">
<input type="hidden" name="id" th:value="${user.id}">
<label>姓名:</label><input type="text" name="name" th:value="${user.name}"><br>
<label>年龄:</label><input type="text" name="age" th:value="${user.age}"><br>
<input type="submit" value="提交">
</form>
</body>
</html>