SpringBoot 集成 Mybatis

2023-11-20

SpringBoot 集成 Mybatis 详细教程

(只有操作,没有理论,仅供参考学习)

一、操作部分

1. 准备数据库

1.1 数据库版本:

C:\WINDOWS\system32>mysql -V
mysql  Ver 8.0.25 for Win64 on x86_64 (MySQL Community Server - GPL)

1.2 启动 mysql 服务:

C:\WINDOWS\system32>net start mysql
The MySQL service is starting..
The MySQL service was started successfully.

1.3 新创建数据库 spring,并创建一个 user 表,user 表详情:

Column Name 		Datatype		PrimaryKey 		Unique
id     				  INT				√			  √
username			  VARCHAR(45)	
password			  VARCHAR(45)	

如下图:

在这里插入图片描述

2. 创建工程

2.1 使用 spring 官网页面创建工程(其他亦可),链接:Spring Initializr 创建 SpringBoot 工程,如下图:

在这里插入图片描述

2.2 用 IDEA 打开工程:

在这里插入图片描述

2.3 配置项目的 maven 环境:
File -> Setting... -> Maven

在这里插入图片描述
2.4 导入依赖 pom.xml 文件:

        <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>
            <scope>runtime</scope>
            <version>8.0.25</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

注意点:由于我的项目运行有报错的原因,我把项目的版本调整了一下:
修正前:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.13</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

修正后:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

配置完成后完整的 pom.xml 文件

<?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 https://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>2.4.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.buzl</groupId>
    <artifactId>main</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>main</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <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>
            <scope>runtime</scope>
            <version>8.0.25</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.5 配置数据库连接文件 application.properties

注意点
第一行的数据库要修改为自己的数据库名称,我的数据库名称是 spring,根据实际需求更改
第二行和第三行是连接数据库的用户名和密码,根据实际需求更改
第四行是数据库的驱动,使用 com.mysql.cj.jdbc.Driver 还是 com.mysql.jdbc.Driver 按需更改
第五行是 mybatis mapper 文件路径,我的文件路径是:resources/mapper/UserMapper.xml,按需更改

spring.datasource.url=jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis.mapper-locations=classpath:mapper/*.xml

2.6 创建 User.java 实体类

public class User {

    /**
     * 主键 id
     */
    private Integer id;

    private String username;

    private String password;
    
    public User(Integer id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    /**
     * 重写 toString 方法
     * @return
     */
    @Override
    public String toString() {
        return "User{" +
                "id = " + id +
                "\t username = " + username +
                "\t password = " + password +
                "}";
    }
    // set and get method ...
}

2.7 创建 UserMapper 接口

@Mapper // 表示这是一个 Mybatis 的 mapper 类
@Repository
public interface UserMapper {

    @Autowired
    int insertUser(User user);
    
    @Autowired
    int deleteByPrimaryKey(Integer id);
    
    @Autowired
    User selectByPrimaryKey(Integer id);
    
    @Autowired
    int updateUserByPrimaryKey(User user);
    
    @Autowired
    List<User> selectAll();
    
}

2.8 创建 UserMapper 控制器

@RestController
@RequestMapping("/mybatis")
public class UserConroller {

    @Resource
    private UserMapper userMapper;

    @GetMapping("/selectAll")
    public List<User> selectAll() {
        List<User> userList = userMapper.selectAll();
        return userList;
    }

    @GetMapping("/selectByPrimaryKey")
    public User selectByPrimaryKey() {
        User user = userMapper.selectByPrimaryKey(111);
        return user;
    }

    @GetMapping("/insertSelective")
    public String insertUser() {
        User user = new User(123, "梅花", "pwd123");
        userMapper.insertUser(user);
        return "insert data to database success!";
    }

    @GetMapping("/updateByPrimaryKeySelective")
    public String updateUserByPrimaryKey() {
        Integer id = 123;
        User user = new User(id, "刘备", "pwd666");
        userMapper.updateUserByPrimaryKey(user);
        return "database updated success!";
    }

    @GetMapping("/deleteByPrimaryKey")
    public String deleteByPrimaryKey() {
        Integer id = 123;
        userMapper.deleteByPrimaryKey(id);
        return "delete database success!";
    }

}

2.6 UserMapper.xml 文件

注意点id 的值要和 UserMapper 接口的函数名称对应上
如:

 xml 文件 id 的值 selectAll 名字和 UserMapper 接口中的函数名一一对应
xml 文件:
<select id="selectAll" resultType="com.buzl.main.entity.User">

UserMapper 接口函数:
@Autowired
List<User> selectAll();
<?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.buzl.main.mapper.UserMapper">

    <!--共通属性抽出-->
    <sql id="Base_Column_List">
        id,username,password
    </sql>

    <!--查询数据库中所有的数据-->
    <select id="selectAll" resultType="com.buzl.main.entity.User">
        <!--select * from spring.user-->
        select <include refid="Base_Column_List" /> from spring.user
    </select>

    <!--通过 id 查询数据-->
    <select id="selectByPrimaryKey" resultType="com.buzl.main.entity.User">
        select <include refid="Base_Column_List" /> from spring.user where id=#{id}
    </select>

    <!--向数据库中插入数据-->
    <insert id="insertUser" parameterType="com.buzl.main.entity.User">
        insert into spring.user(<include refid="Base_Column_List" />) values(#{id},#{username},#{password})
    </insert>

    <!--更新数据库中的数据-->
    <update id="updateUserByPrimaryKey" parameterType="com.buzl.main.entity.User">
        update spring.user set username=#{username},password=#{password} where id=#{id}
    </update>

    <!--通过 id 删除数据-->
    <delete id="deleteByPrimaryKey" parameterType="Integer">
        delete from spring.user where id=#{id}
    </delete>

</mapper>

二、代码部分

1. 项目目录结构:

在这里插入图片描述

2. User 实体类

package com.buzl.main.entity;

/**
 * 实体类
 *
 * @author buzenglai@gmail.com
 * @data 2023-07-10
 */
public class User {

    /**
     * 主键 id
     */
    private Integer id;

    private String username;

    private String password;

    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 getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public User(Integer id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    /**
     * 重写 toString 方法
     * @return
     */
    @Override
    public String toString() {
        return "User{" +
                "id = " + id +
                "\t username = " + username +
                "\t password = " + password +
                "}";
    }

}

3. UserController 控制器类

package com.buzl.main.controller;

import com.buzl.main.mapper.UserMapper;
import com.buzl.main.entity.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

/**
 * controller 实现
 *
 * @author buzenglai@gmail.com
 * @data 2023-07-10
 */
@RestController
@RequestMapping("/mybatis")
public class UserConroller {

    @Resource
    private UserMapper userMapper;

    /**
     * 查询数据操作
     *
     * @return
     */
    @GetMapping("/selectAll")
    public List<User> selectAll() {
        List<User> userList = userMapper.selectAll();
        System.out.println("数据库中所有的 user 数据 :" + userList);
        return userList;
    }

    /**
     * 通过 id 查询操作
     *
     * @return
     */
    @GetMapping("/selectByPrimaryKey")
    public User selectByPrimaryKey() {
        User user = userMapper.selectByPrimaryKey(111);
        System.out.println("通过 id 查询出来的 user : " + user);
        return user;
    }

    /**
     * 插入数据
     *
     * @return
     */
    @GetMapping("/insertSelective")
    public String insertUser() {
        User user = new User(123, "梅花", "pwd123");
        userMapper.insertUser(user);
        System.out.println("user :" + user + " 被成功插入数据库");
        return "insert data to database success!";
    }

    /**
     * 更新数据
     *
     * @return
     */
    @GetMapping("/updateByPrimaryKeySelective")
    public String updateUserByPrimaryKey() {
        Integer id = 123;
        User user = new User(id, "刘备", "pwd666");
        userMapper.updateUserByPrimaryKey(user);
        System.out.println("数据库中 id = " + id + " 的数据已经被更新了");
        return "database updated success!";
    }

    /**
     * 删除数据
     *
     * @return
     */
    @GetMapping("/deleteByPrimaryKey")
    public String deleteByPrimaryKey() {
        Integer id = 123;
        userMapper.deleteByPrimaryKey(id);
        System.out.println("数据库中 id = " + id + " 的 user 数据已经被删除了");
        return "delete database success!";
    }

}

4. UserMapper 接口

package com.buzl.main.mapper;

import com.buzl.main.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 接口类
 *
 * @author buzenglai@gmail.com
 * @data 2023-07-10
 */
@Mapper // 表示这是一个 Mybatis 的 mapper 类
@Repository
public interface UserMapper {

    /**
     * 向数据库中插入一条数据
     *
     * @param user
     * @return
     */
    @Autowired
    int insertUser(User user);

    /**
     * 通过主键 id 删除数据
     *
     * @param id
     * @return
     */
    @Autowired
    int deleteByPrimaryKey(Integer id);

    /**
     * 通过主键 id 删除数据库中的数据
     *
     * @param id
     * @return
     */
    @Autowired
    User selectByPrimaryKey(Integer id);

    /**
     * 通过主键 id 更新数据库中的数据
     *
     * @param user
     * @return
     */
    @Autowired
    int updateUserByPrimaryKey(User user);

    /**
     * 查询数据库中所有的数据
     *
     * @return
     */
    @Autowired
    List<User> selectAll();

}

5. 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.buzl.main.mapper.UserMapper">

    <!--共通属性抽出-->
    <sql id="Base_Column_List">
        id,username,password
    </sql>

    <!--查询数据库中所有的数据-->
    <select id="selectAll" resultType="com.buzl.main.entity.User">
        <!--select * from spring.user-->
        select <include refid="Base_Column_List" /> from spring.user
    </select>

    <!--通过 id 查询数据-->
    <select id="selectByPrimaryKey" resultType="com.buzl.main.entity.User">
        select <include refid="Base_Column_List" /> from spring.user where id=#{id}
    </select>

    <!--向数据库中插入数据-->
    <insert id="insertUser" parameterType="com.buzl.main.entity.User">
        insert into spring.user(<include refid="Base_Column_List" />) values(#{id},#{username},#{password})
    </insert>

    <!--更新数据库中的数据-->
    <update id="updateUserByPrimaryKey" parameterType="com.buzl.main.entity.User">
        update spring.user set username=#{username},password=#{password} where id=#{id}
    </update>

    <!--通过 id 删除数据-->
    <delete id="deleteByPrimaryKey" parameterType="Integer">
        delete from spring.user where id=#{id}
    </delete>

</mapper>

6. 数据库连接配置文件:

spring.datasource.url=jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis.mapper-locations=classpath:mapper/*.xml

7. pom.xml 文件:

<?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 https://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>2.4.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.buzl</groupId>
    <artifactId>main</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>main</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--springboot 集成 mybatis,导入依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>
        <!--mysql 驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>8.0.25</version>
        </dependency>
        <!--jdbc连接数据库-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

三、测试

使用 ApiFox 工具进行测试(用浏览器也是一样)

  1. 查询数据库中所有的数据:

在这里插入图片描述

  1. 通过 id 查询数据库中的数据:

在这里插入图片描述

  1. 向数据库中插入数据:

在这里插入图片描述

在这里插入图片描述

  1. 通过 id 更改数据库中的数据

在这里插入图片描述

在这里插入图片描述

  1. 通过 id 删除数据库的数据
    在这里插入图片描述
    在这里插入图片描述
  2. 控制台打印信息:
数据库中所有的 user 数据 :[User{id = 111	 username = 张三	 password = pwd111}, User{id = 222	 username = 李四	 password = pwd222}]
数据库中所有的 user 数据 :[User{id = 111	 username = 张三	 password = pwd111}, User{id = 222	 username = 李四	 password = pwd222}]
通过 id 查询出来的 user : User{id = 111	 username = 张三	 password = pwd111}
user :User{id = 123	 username = 梅花	 password = pwd123} 被成功插入数据库
数据库中所有的 user 数据 :[User{id = 111	 username = 张三	 password = pwd111}, User{id = 123	 username = 梅花	 password = pwd123}, User{id = 222	 username = 李四	 password = pwd222}]
数据库中 id = 123 的数据已经被更新了
数据库中所有的 user 数据 :[User{id = 111	 username = 张三	 password = pwd111}, User{id = 123	 username = 刘备	 password = pwd666}, User{id = 222	 username = 李四	 password = pwd222}]
数据库中 id = 123 的 user 数据已经被删除了
数据库中所有的 user 数据 :[User{id = 111	 username = 张三	 password = pwd111}, User{id = 222	 username = 李四	 password = pwd222}]

这是结束标志,结束了 ~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot 集成 Mybatis 的相关文章

随机推荐

  • 【笔记】 感受野与权值共享 摄像头标定 相机坐标与世界坐标

    1 卷积神经网络的局部感受野 卷积神经网络的神经元之间的连接模式类似于大脑视觉皮层组织 个体皮层神经元仅在被称为感受野的视野受限区域中对刺激做出反应 局部感受野就是卷积神经网络每一层输出的特征图 Feature Map 上的像素点在原始图像
  • ros安装qt以及编译ros功能包

    2 添加qt到环境变量 sudo nano usr bin qtcreator bin sh export QT HOME home kexue Qt5 9 9 Tools QtCreator bin QT HOME qtcreator s
  • Java线程(Thread)生命周期的6种状态

    当线程被创建并启动以后 它既不是一启动就进入了执行状态 也不是一直处于执行状态 在线程的生命周期中 可能处于不同的状态 java lang Thread State 列举出了这6种线程状态 线程状态 导致状态发生条件 New 新建 线程刚被
  • tcp粘包和拆包的处理方案

    产生tcp粘包和拆包的原因 我们知道tcp是以流动的方式传输数据 传输的最小单位为一个报文段 segment tcp Header中有个Options标识位 常见的标识为mss Maximum Segment Size最大消息长度 指的是
  • 计算某字符出现次数

    描述 写出一个程序 接受一个由字母 数字和空格组成的字符串 和一个字符 然后输出输入字符串中该字符的出现次数 不区分大小写字母 数据范围 1 n 1000 1 le n le 1000 1 n 1000 输入描述 第一行输入一个由字母和数字
  • 深度学习系列37:CLIP模型

    1 模型说明 含义 CLIP Contrastive Language Image Pre training git地址 https github com openai CLIP paper https arxiv org abs 2103
  • SpringCloud使用Zookeeper作为服务注册发现中心

    本篇文章主要记录SpringCloud使用Zookeeper作为服务注册发现中心 通过服务提供者和消费者为例 来真正掌握zk注册中心 目录 一 搭建服务提供者 1 创建cloud provider payment8004项目 2 修改配置
  • BCrypt密码加密的简单使用

    一 BCrypt基础 在一个项目中 只要涉及用户的登陆注册 就涉及到用户密码的保护 用户的密码存在数据库是对管理员是透明的 所以为了防止管理员泄露密码 提高用户密码的安全性 我们通常会对用户密码进行加密后再存入数据库 目前MD5与Bcryp
  • 微信小程序瀑布流布局

  • Spring Boot:从入门到实践的全面指南

    文章目录 1 Spring Boot简介及特性 1 1 简介 什么是Spring Boot 1 2 特性 Spring Boot的优势与特点 1 3 四大核心 Spring Boot的核心组成 2 Spring Boot入门案例 2 1 S
  • 重启CDH服务

    找到cm的目录 cd opt cm 5 13 2 etc init d 查看sever状态 cloudera scm server status 重启server cloudera scm server restart 再次查看sever状
  • Micropython开发篇三--基于F411 CE的移植编译

    Micropython开发篇三 基于F411 CE的移植编译 最近在学操作系统 RTOS与Linux 对Micropython有些新的认知 回头又复习了一下Micropython 简直要不要这么优秀 希望通过这篇文章能带给大家不一样的Mic
  • Python - 函数注解

    Python3提供一种语法 用于为函数声明中的参数和返回值附加元数据 或者也可以称之为注释 def my function Something about your function pass 文档注释可以通过下面这种方式查看 print
  • MyBatis高级查询:一对多映射collection集合实现机构-用户-角色-菜单三级嵌套查询

    学习自MyBatis从入门到精通 嵌套查询 会执行额外的SQL语句 团队网站的结构关系我是做成了机构用户角色菜单三层嵌套查询 今天一天进行了实现 遇到的错误真的很多 我们知道association collection关联的嵌套查询这种方式
  • TCP协议、VLSM、CIDR思维导图

    ICMP 网络层协议 用来在网络设备间传递各种差错 控制 查询等信息 对于收集各种网络信息 诊断和排除各种网络故障
  • CocosCreator列表scrollview滑动速度的修改,鼠标滚动速度修改

    由于cocos creator 在pc端 使用scrollview 鼠标滚动速度太慢 原文地址 CocosCreator列表滑动速度的修改 简书CocosCreator列表滑动速度的修改 简书引擎版本 2 2 2 之后升级的2 4 0直接可
  • Android发送POST网络请求

    参考链接 Android 网络请求 网络请求 Okhttp 51CTO博客 android 网络请求 项目中需要通过发送网络请求获取需要显示的数据内容 请求地址和requestbody如上图所示 网络请求用 implementation c
  • Java顺序表

    1 顺序表的定义 顺序表是用物理地址连续存储单元依次存储元素的线性数据结构 一般底层采用数组存储 其中Arraylist也是一个动态修改的数组 于此大致相同 在计算机科学中 数组是由一组元素 值或变量 组成的数据结构 每个元素有至少一个索引
  • JSONUtils

    package com xiolift mdm common util import com alibaba druid util StringUtils import com alibaba fastjson JSON import co
  • SpringBoot 集成 Mybatis

    SpringBoot 集成 Mybatis 详细教程 只有操作 没有理论 仅供参考学习 一 操作部分 1 准备数据库 1 1 数据库版本 C WINDOWS system32 gt mysql V mysql Ver 8 0 25 for