SpringBoot学习6之整合MyBatis做CRUD(SpringBoot+MyBatis+SpringMVC+Thymeleaf)

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的用户

返回到首页去,点击添加用户:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
输入信息后,跳转到操作成功页面;

在这里插入图片描述
再去显示所有用户信息:
在这里插入图片描述
如图成功添加了一条数据;

项目整体目录结构如下所示:
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值