SpringBoot整合MyBatis
前面的博客中已经讲过SpringBoot,SpringMVC,Thymeleaf的使用,此次我们将学习如何整合MyBatis持久层框架,同时我们将前面所学整合起来,做一次对数据库的增删改查;
主要内容:
①添加一条用户数据;
②删除一条用户数据;
③修改一条用户数据;
④查询所有用户数据;
(一)创建一个SpringBoot项目
项目创建完毕;
修改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.kenewstar</groupId>
<artifactId>springboot03</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
</parent>
<dependencies>
<!-- springboot启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
<!-- springboot整合thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- springboot整合mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<!-- mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
<!-- 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
</dependencies>
</project>
此时项目环境搭建完毕;
(二)创建数据库及数据表
创建user表,属性id,主键,自增
属性username,用户名,属性userage,用户年龄
至于如何创建表以及他的DDL语句这里不做叙述;
(三)创建application.properties全局配置文件
如下代码所示,配置数据库连接信息,配置数据库连接池,这里我们使用的是阿里巴巴的Druid数据库连接池,mybatis.type-aliases-package配置类型别名,这里是为pojo包下的实体类配置别名,配置后,别名为首字母小写的驼峰式规则,例如User类全名为:com.kenewstar.pojo.User,别名为user,使用时,我们可以使用user在userMapper.xml文件中代替User类的全名;在(五)中userMapper.xml文件中parameterType属性中填写user,如果不配置别名,则必须使用全名:com.kenewstar.pojo.User;最后一个则是配置扫描sql映射文件,使得程序能够加载sql映射文件;
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
mybatis.type-aliases-package=com.kenewstar.pojo
mybatis.mapper-locations=classpath:sqlMapper/*Mapper.xml
(四)创建用户实体类
该用户实体类,类与数据表做映射;
创建pojo包,com.kenewstar.pojo
创建User.java
User.java代码如下:
package com.kenewstar.pojo;
/**
* @Author:kenewstar
* @Description: 用户实体类
* @Date:Created in 2020/4/24
*/
public class User {
private Integer id;
private String username;
private String userage;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserage() {
return userage;
}
public void setUserage(String userage) {
this.userage = userage;
}
}
(五)创建UserMapper接口以及userMapper.xml映射文件
创建com.kenewstar.mapper包,我们的UserMapper接口放在此包下;
它相当于DAO层对象,而userMapper.xml相当于UserMapper接口的实现类,只是作对比而已;
1 创建UserMapper接口
UserMapper.java代码如下:
package com.kenewstar.mapper;
import com.kenewstar.pojo.User;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* springboot整合mybatis
* 用户mapper接口
*/
public interface UserMapper {
//添加一个用户
int insertUser(User user);
//查询所有用户
List<User> selectAllUser();
//根据id删除用户
int deleteById(int id);
//根据id查询用户
User selectUserById(int id);
//修改用户
int updateUser(User user);
}
2 创建userMapper.xml sql映射文件
首先在resources资源目录下创建sqlMapper目录,用来放置sql映射文件,如下图:
userMapper.xml的代码如下:
<?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.kenewstar.mapper.UserMapper">
<insert id="insertUser" parameterType="user">
insert into user(username,userage) values(#{username},#{userage})
</insert>
<select id="selectAllUser" resultType="user">
select * from user
</select>
<delete id="deleteById" parameterType="int">
delete from user where id=#{id}
</delete>
<select id="selectUserById" parameterType="int" resultType="user">
select * from user where id=#{id}
</select>
<update id="updateUser" parameterType="user">
update user set username=#{username},userage=#{userage} where id=#{id}
</update>
</mapper>
由此,数据访问层完毕;
(六)创建业务逻辑层service
1 创建UserService接口
创建com.kenewstar.service包;
UserService.java代码如下:
package com.kenewstar.service;
import com.kenewstar.pojo.User;
import java.util.List;
/**
* springboot整合mybatis
* 业务逻辑层接口
*/
public interface UserService {
//添加一个用户
int addUser(User user);
//查询所有用户
List<User> findAllUser();
//根据用户id删除用户
int deleteById(int id);
//根据用户id查询用户
User findUserById(int id);
//修改用户
int updateUser(User user);
}
2 创建UserServiceImpl接口实现类
UserServiceImpl.java代码如下:
package com.kenewstar.service.impl;
import com.kenewstar.mapper.UserMapper;
import com.kenewstar.pojo.User;
import com.kenewstar.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @Author:kenewstar
* @Description: 业务逻辑层接口实现类
* @Date:Created in 2020/4/24
*/
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public int addUser(User user) {
int flag = this.userMapper.insertUser(user);
return flag;
}
@Override
public List<User> findAllUser() {
List<User> list = this.userMapper.selectAllUser();
return list;
}
@Override
public int deleteById(int id) {
int flag = this.userMapper.deleteById(id);
return flag;
}
@Override
public User findUserById(int id) {
User user = this.userMapper.selectUserById(id);
return user;
}
@Override
public int updateUser(User user) {
int flag = this.userMapper.updateUser(user);
return flag;
}
}
业务逻辑层接口实现类调用mapper接口,获取mapper代理对象,对数据进行增删改查操作;
业务逻辑层完毕;
(七)创建用户控制器类
创建com.kenewstar.controller包
创建UserController类
UserController.java代码如下:
package com.kenewstar.controller;
import com.kenewstar.pojo.User;
import com.kenewstar.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
/**
* @Author:kenewstar
* @Description: 用户控制器类
* @Date:Created in 2020/4/24
*/
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
//跳转首页
@RequestMapping("/")
public String indexPage(){
return "index";
}
//用于控制页面跳转
@RequestMapping("/{page}")
public String showPage(@PathVariable String page){
return page;
}
//添加一个用户
@RequestMapping("/addUser")
public String addUser(User user){
int flag = this.userService.addUser(user);
if(flag==1){
return "ok";
}else{
return "error";
}
}
//查询所有用户
@RequestMapping("/findAllUser")
public String findAllUser(Model model){
List<User> list = this.userService.findAllUser();
model.addAttribute("list",list);
return "showAllUser";
}
//根据用户id删除用户
@RequestMapping("/deleteById")
public String deleteById(Integer id,Model model){
System.out.println(id);
int flag = this.userService.deleteById(id);
List<User> list = null;
if(flag==1){
//用户删除成功
list = this.userService.findAllUser();
model.addAttribute("list",list);
return "showAllUser";
}else{
model.addAttribute("list",list);
model.addAttribute("msg","删除失败");
return "showAllUser";
}
}
//根据用户id查询用户
@RequestMapping("/updateById")
public String findUserById(Integer id,Model model){
User user = this.userService.findUserById(id);
model.addAttribute("user",user);
return "updateUser";
}
//修改用户
@RequestMapping("/updateUser")
public String updateUser(User user,Model model){
int flag = this.userService.updateUser(user);
List<User> list = null;
if (flag==1){
//更新成功
list = this.userService.findAllUser();
model.addAttribute("list",list);
return "showAllUser";
}else{
model.addAttribute("list",list);
return "showAllUser";
}
}
}
(八)创建视图层
使用Thymeleaf模板技术做视图层,向用户展示数据
首先需要在resources资源目录下创建templates目录,将所有html页面放在该目录下;
1 创建index.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>用户管理系统</title>
</head>
<body>
<h2>用户管理系统</h2>
<hr/>
<a th:href="@{/user/addUser.html}">添加一个用户</a>
<hr/>
<a th:href="@{/user/findAllUser}">显示所有用户信息</a>
<hr/>
</body>
</html>
2 创建ok.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>操作成功</title>
</head>
<body>
<h2>用户操作成功</h2>
<hr/>
</body>
</html>
3 创建error.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户操作失败</title>
</head>
<body>
<h2>用户操作失败</h2>
<hr/>
</body>
</html>
4 创建addUser.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>添加用户</title>
</head>
<body>
<h2>用户添加</h2>
<hr/>
<form th:action="@{/user/addUser}" method="post">
用户名:<input type="text" name="username"/><br/>
年龄:<input type="text" name="userage"/><br/>
<input type="submit" value="添加"/>
</form>
</body>
</html>
5 创建showAllUser.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>显示所有用户信息</title>
</head>
<body>
<h2>所有用户信息</h2>
<hr/>
<table border="1" width="500px">
<tr>
<th>ID</th>
<th>NAME</th>
<th>AGE</th>
<th>操作</th>
</tr>
<tr th:each="user : ${list}">
<td th:text="${user.id}"></td>
<td th:text="${user.username}"></td>
<td th:text="${user.userage}"></td>
<td>
<a th:href="@{/user/updateById(id=${user.id})}">修改用户</a>
<a th:href="@{/user/deleteById(id=${user.id})}">删除用户</a>
</td>
</tr>
</table>
</body>
</html>
6 创建updateUser.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>修改用户信息</title>
</head>
<body>
<h2>修改用户信息</h2>
<hr/>
<form th:action="@{/user/updateUser}" method="post">
<input type="hidden" name="id" th:field="${user.id}"/>
用户名:<input type="text" name="username" th:field="${user.username}"/><br/>
年龄:<input type="text" name="userage" th:field="${user.userage}"/><br/>
<input type="submit" value="修改"/>
</form>
</body>
</html>
到此所有页创建完毕;
(九)创建SpringBoot启动类
package com.kenewstar;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @Author:kenewstar
* @Description: SpringBoot启动类
* @Date:Created in 2020/4/24
*/
@SpringBootApplication
@MapperScan("com.kenewstar.mapper")
public class App {
public static void main(String[] args) {
//启动springboot
SpringApplication.run(App.class,args);
}
}
上述代码中多了一个@MapperScan注解它的作用就是用来扫描mapper包下的mapper接口;
到此所有代码书写完毕;
(十)测试项目
启动项目从浏览器地址栏输入localhost:8080/即可
因为我们做了首页跳转,如图:
我们点击显示所有用户,显示所有用户:
点击修改用户,对用户信息进行修改:
点击第四条,将用户名和年龄修改:
点击修改之后,结果如下:
数据修改成功;
点击删除用户后,显示结果如图:
地址栏中显示了我们删除了id为5的用户
返回到首页去,点击添加用户:
输入信息后,跳转到操作成功页面;
再去显示所有用户信息:
如图成功添加了一条数据;
项目整体目录结构如下所示: