Spring Boot整合MyBatis+MySQL教程(附详细代码)

目录

一、前言

二、创建+整合项目

1.创建SpringBoot项目

2.整合MyBatis

3.整合MySQL

三、测试

四、附:源码

1.源码下载地址 

2.application.yml的完整代码

五、结语

一、前言

Spring Boot作为当下流行的Java开发框架,以其简化配置、快速构建的特点深受开发者青睐。MyBatis作为持久层框架,灵活性强且与SQL语句解耦,搭配MySQL数据库能够高效处理数据操作。本教程旨在提供一套完整的整合方案,帮助开发者快速搭建基于Spring Boot、MyBatis和MySQL的项目环境。

二、创建+整合项目

1.创建SpringBoot项目

1.打开idea,新建springboot项目,配置相关信息(名称、位置、语言、JDK、java版本等)

2.选择合适的依赖(这里搜不到的后续可手动添加到pom文件)

3.创建好之后,项目的层级是下面这样的

4.更改maven仓库指向自己的maven仓库(如果要使用远程仓库自行在pom文件里配置)

5.重新加载maven(建议重载一下)

6.以下是全部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>
    <groupId>org.wal</groupId>
    <artifactId>UserDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>UserDemo</name>
    <description>UserDemo</description>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>org.wal.userdemo.UserDemoApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

7.接下来是创建对应的包和整体的分层架构(推荐),不建议在Service或者Controller直接调用Mapper层接口。

8.说一下SpringBoot项目具体的一个流程:从Controller => Service  => ServiceImpl  =>Mapper  => Mapper.xml 以下是具体的代码:

Controller.java

package org.wal.userdemo.controller;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;
import org.wal.userdemo.entity.UserEntity;
import org.wal.userdemo.service.UserService;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    /**
     * 获取用户信息
     * @param id
     * @return
     */
    @GetMapping("/getUserById")
    public UserEntity getUserById(@RequestParam("id") Integer id) {
        return userService.getUserById(id);
    }
    /**
     * 获取所有用户信息
     * @return List<UserEntity>
     */
    @GetMapping("/getAllUsers")
    public List<UserEntity> getAllUsers() {
        return userService.getAllUsers();
    }
    /**
     * 获取用户数量
     * @return Integer
     */
    @GetMapping("/getUserCount")
    public Integer getUserCount() {
        return userService.getUserCount();
    }
    /**
     * 获取用户分页信息
     * @param pageNum
     * @param pageSize
     * @return List<UserEntity>
     */
    @GetMapping("/getUsersByPage")
    public List<UserEntity> getUsersByPage(@RequestParam("pageNum") Integer pageNum, @RequestParam("pageSize") Integer pageSize) {
        return userService.getUsersByPage(pageNum, pageSize);
    }
    /**
     * 获取用户名称模糊查询信息
     * @param name
     * @return List<UserEntity>
     */
    @GetMapping("/getUsersByName")
    public List<UserEntity> getUsersByName(@RequestParam("name") String name) {
        return userService.getUsersByName(name);
    }
    /**
     * 添加用户信息
     * @param userEntity
     * @return Integer
     */
    @PostMapping("/addUser")
    public Integer addUser(@RequestBody UserEntity userEntity) {
        return userService.addUser(userEntity);
    }
    /**
     * 修改用户信息
     * @param userEntity
     * @return Integer
     */
    @PostMapping("/updateUser")
    public Integer updateUser(@RequestBody UserEntity userEntity) {
        return userService.updateUser(userEntity);
    }
    /**
     * 删除用户信息
     * @param id
     * @return Integer
     */
    @GetMapping("/deleteUser")
    public Integer deleteUser(@RequestParam("id") Integer id) {
        return userService.deleteUser(id);
    }

}

Service.java

package org.wal.userdemo.service;

import org.wal.userdemo.entity.UserEntity;

import java.util.List;

public interface UserService {
    /**
     * 根据id查询用户
     *
     * @param id
     * @return
     */
    UserEntity getUserById(Integer id);

    /**
     * 查询所有用户
     *
     * @return
     */
    List<UserEntity> getAllUsers();

    /**
     * 查询用户数量
     *
     * @return
     */
    Integer getUserCount();

    /**
     * 分页查询用户
     *
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<UserEntity> getUsersByPage(Integer pageNum, Integer pageSize);

    /**
     * 根据名称查询用户
     *
     * @param name
     * @return
     */
    List<UserEntity> getUsersByName(String name);

    /**
     * 添加用户
     *
     * @param userEntity
     * @return
     */
    Integer addUser(UserEntity userEntity);

    /**
     * 修改用户
     *
     * @param userEntity
     * @return
     */
    Integer updateUser(UserEntity userEntity);

    /**
     * 删除用户
     *
     * @param id
     * @return
     */
    Integer deleteUser(Integer id);


}

ServiceImpl.java

package org.wal.userdemo.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.wal.userdemo.entity.UserEntity;
import org.wal.userdemo.mapper.UserMapper;
import org.wal.userdemo.service.UserService;

import java.util.Collections;
import java.util.List;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    /**
     * 获取用户信息
     *
     * @param id
     * @return UserEntity
     */
    @Override
    public UserEntity getUserById(Integer id) {
        return userMapper.getUserById(id);
    }
    /**
     * 获取所有用户信息
     *
     * @return List<UserEntity>
     */
    @Override
    public List<UserEntity> getAllUsers() {
        return userMapper.getAllUsers() ;
    }
    /**
     * 获取用户数量
     *
     * @return Integer
     */
    @Override
    public Integer getUserCount() {
        return userMapper.getUserCount();
    }
    /**
     * 分页获取用户信息
     *
     * @param pageNum
     * @param pageSize
     * @return List<UserEntity>
     */
    @Override
    public List<UserEntity> getUsersByPage(Integer pageNum, Integer pageSize) {
        return userMapper.getUsersByPage(pageNum, pageSize);
    }
    /**
     * 根据用户名获取用户信息
     *
     * @param name
     * @return List<UserEntity>
     */
    @Override
    public List<UserEntity> getUsersByName(String name) {
        return userMapper.getUsersByName( name);
    }
    /**
     * 添加用户
     *
     * @param userEntity
     * @return Integer
     */
    @Override
    public Integer addUser(UserEntity userEntity) {
        return userMapper.addUser(userEntity);
    }
    /**
     * 修改用户信息
     *
     * @param userEntity
     * @return Integer
     */
    @Override
    public Integer updateUser(UserEntity userEntity) {
        return userMapper.updateUser(userEntity);
    }
    /**
     * 删除用户
     *
     * @param id
     * @return Integer
     */
    @Override
    public Integer deleteUser(Integer id) {
        return userMapper.deleteUser( id);
    }
}

entity.java(这里我用的lombok依赖的@Data注解,可以省略getter和setter方法)

package org.wal.userdemo.entity;

import lombok.Data;

@Data
public class UserEntity {

    /**
     * id 主键
     */
    private Integer id;
    /**
     * name 姓名
     */
    private String name;
    /**
     * age 年龄
     */
    private Integer age;

}

9.接下来整理SpringBoot的配置信息(application.properties或者application.yml(推荐)),两者无区别只是展现形式不同,后者维护更容易。

10.接下来就是找到UserDemoApplication运行项目

可以看到项目已经在8080端口正常运行了。

2.整合MyBatis

1.首先在application.yml中添加MyBatis的配置信息,如下;

2.接着在java/*/mapper下创建mapper.java

package org.wal.userdemo.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.wal.userdemo.entity.UserEntity;

import java.util.List;

@Mapper
public interface UserMapper {
    /**
     * 根据id查询用户
     *
     * @param id
     * @return
     */
    UserEntity getUserById(Integer id);

    /**
     * 查询所有用户
     *
     * @return
     */
    List<UserEntity> getAllUsers();

    /**
     * 查询用户数量
     *
     * @return
     */
    Integer getUserCount();

    /**
     * 分页查询用户
     *
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<UserEntity> getUsersByPage(Integer pageNum, Integer pageSize);

    /**
     * 根据名称查询用户
     *
     * @param name
     * @return
     */
    List<UserEntity> getUsersByName(String name);

    /**
     * 添加用户
     *
     * @param userEntity
     * @return
     */
    Integer addUser(UserEntity userEntity);

    /**
     * 修改用户
     *
     * @param userEntity
     * @return
     */
    Integer updateUser(UserEntity userEntity);

    /**
     * 删除用户
     *
     * @param id
     * @return
     */
    Integer deleteUser(Integer id);
}

3.在resource下创建文件夹mapper,在mapper下创建mapper.xml,与mapper.java里的接口一一对应。

<?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="org.wal.userdemo.mapper.UserMapper">

    <resultMap id="BaseResultMap" type="org.wal.userdemo.entity.UserEntity">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="age" property="age" />
    </resultMap>

    <select id="getUserById" resultMap="BaseResultMap" parameterType="Integer">
        select * from user where id = #{id};
    </select>

    <select id="getAllUsers" resultMap="BaseResultMap" >
        select * from user;
    </select>

    <select id="getUserCount" resultMap="BaseResultMap">
        select count(*) from user;
    </select>

    <select id="getUsersByPage" resultMap="BaseResultMap" parameterType="String">
        select *
        from user limit #{pageNum}, #{pageSize};
    </select>

    <select id="getUsersByName" resultMap="BaseResultMap" parameterType="String">
        select * from user where name like concat('%',#{name},'%');
    </select>

    <insert id="addUser" useGeneratedKeys="true" keyProperty="id" parameterType="org.wal.userdemo.entity.UserEntity">
        insert into user (name, age) values (#{name}, #{age});
    </insert>

    <update id="updateUser" parameterType="org.wal.userdemo.entity.UserEntity">
        update user set name = #{name}, age = #{age} where id = #{id};
    </update>

    <delete id="deleteUser" parameterType="Integer">
        delete from user where id = #{id};
    </delete>

</mapper>

 如此MyBatis就整合完成了。

3.整合MySQL

1.首先在application.yml中配置数据源信息,如下:

2.创建entity.java所需的表(需要可以直接用)

CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '姓名',
  `age` int DEFAULT NULL COMMENT '年龄',
  KEY `zhujian` (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='测试';


INSERT INTO `user` (`id`,`name`,`age`) VALUES('1','张','19');
INSERT INTO `user` (`id`,`name`,`age`) VALUES('2','李','27');
INSERT INTO `user` (`id`,`name`,`age`) VALUES('3','赵','99');
INSERT INTO `user` (`id`,`name`,`age`) VALUES('4','王','17');

如此 MySQL也整合完成了。

三、测试

1.整合完成后再重启一下项目

2.使用postman模拟请求,可以看到能查询到数据库的数据,如下:

其他接口不再测试。

四、附:源码

1.源码下载地址 

https://gitee.com/wangaolin/user-demo

同学们可以自行下载查看使用。

2.application.yml的完整代码

server:
  # 端口
  port: 8080
spring:
  datasource:
    # 数据库连接地址
    url: jdbc:mysql://127.0.0.1:3306/wal?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
# mybatis 配置
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.wal.userdemo.entity
# 日志
logging:
  level:
    com.example.demo.mapper: debug

五、结语

本文详细介绍了Spring Boot整合MyBatis和MySQL的步骤,包括项目创建、配置、编写实体类、Mapper、Service和Controller,并进行了简单的测试。通过这个整合,我们可以方便地使用MyBatis进行数据库操作。

注意:在实际开发中,我们可能还需要进行异常处理、事务管理、统一返回、日志处理等操作,这些可以在后续的文章中展开。

希望这篇博客对你有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值