Spring Boot 整合 MyBatis 的例子

作者: 右耳菌 | 来源:发表于2022-04-27 23:58 被阅读0次

一、先创建一个表

CREATE TABLE users (
    `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
    `username` VARCHAR ( 255 ) DEFAULT NULL,
    `password` VARCHAR ( 255 ) DEFAULT NULL,
    `name` VARCHAR ( 255 ) DEFAULT NULL,
PRIMARY KEY ( `id` ) 
) ENGINE = MyISAM AUTO_INCREMENT = 1247 DEFAULT CHARSET = utf8;

二、Spring Boot 整合 MyBatis 流程

springboot里面mybatis流程图

三、例子

1. 创建一个SpringBoot项目
  • 创建项目springboot-mybatis
2. 修改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.6.7</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.lazyfennec</groupId>
    <artifactId>springboot-mybatis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-mybatis</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!-- MyBatis 依赖引入 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>
        <!-- MySQL驱动引入-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

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

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

</project>
3. 修改application.properties
# MySql配置
spring.datasource.url=jdbc:mysql://localhost:3306/cloud_study?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=#### 替换账号
spring.datasource.password=####  替换密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# MyBatis配置
# 设置配置文件路径,默认在resources的目录
mybatis.config-location=classpath:mybatis/mybatis-config.xml
# 设置mapper映射文件路径,默认在resources的目录
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
# 设置项目中实体类的包路径
mybatis.type-aliases-package=cn.lazyfennec.springboot.entity
# 日志打印
# 展示sql语句, DEBUG等级
logging.level.cn.lazyfennec.springboot.repository.UsersDao=debug
4. 创建Users实体类
  • 在cn.lazyfennec.springboot下创建entity文件夹
  • 在cn.lazyfennec.springboot.entity下创建Users
package cn.lazyfennec.springboot.entity;

/**
 * @Author: Neco
 * @Description:
 * @Date: create in 2022/4/27 22:52
 */
public class Users {
    private String id;
    private String username;
    private String password;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String 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 String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Users{" +
                "id='" + id + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}
5. 创建UsersDao
  • 在cn.lazyfennec.springboot下创建repository文件夹
  • 在cn.lazyfennec.springboot.repository 下创建UsersDao
package cn.lazyfennec.springboot.repository;

import cn.lazyfennec.springboot.entity.Users;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface UsersDao {

    List<Users> findAll();

    Users findById(Integer id);

    @Select("select id, username, password, name from users where name like concat('%', #{name}, '%')")
    List<Users> findByName(String name);

}
6. 创建mybatis-config.xml
  • 在resources下创建mybatis文件夹
  • 在mybatis文件夹下创建mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

</configuration>
7. 创建UsersMapper.xml
  • 在resources/mybatis下创建mapper文件夹
  • 在resources/mybatis/mapper下创建UsersMapper.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="cn.lazyfennec.springboot.repository.UsersDao">
    <select id="findAll" resultType="Users">
        select id, username, password, name from users
    </select>

    <select id="findById" resultType="Users">
        select id, username, password, name from users where id = #{id}
    </select>
</mapper>
8. 在XXXApplication.java上添加@MapperScan
  • 在SpringbootMybatisApplication类上添加@MapperScan
package cn.lazyfennec.springboot;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("cn.lazyfennec.springboot.repository")
@SpringBootApplication
public class SpringbootMybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootMybatisApplication.class, args);
    }

}
9. 修改并启动测试类
package cn.lazyfennec.springboot;

import cn.lazyfennec.springboot.repository.UsersDao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

@SpringBootTest
class SpringbootMybatisApplicationTests {

    @Resource
    private UsersDao usersDao;

    @Test
    void contextLoads() {
        System.out.println(usersDao.findAll());
        System.out.println("------------------------------");
        System.out.println(usersDao.findById(1));
        System.out.println("------------------------------");
        System.out.println(usersDao.findByName("德"));
    }

}
10. 运行结果
2022-04-27 23:22:25.738 DEBUG 17420 --- [           main] c.l.s.repository.UsersDao.findAll        : ==>  Preparing: select id, username, password, name from users
2022-04-27 23:22:25.763 DEBUG 17420 --- [           main] c.l.s.repository.UsersDao.findAll        : ==> Parameters: 
2022-04-27 23:22:25.783 DEBUG 17420 --- [           main] c.l.s.repository.UsersDao.findAll        : <==      Total: 2
[Users{id='1', username='liudehua', password='123456', name='刘德华'}, Users{id='2', username='zhangxueyou', password='123456', name='张学友'}]
------------------------------
2022-04-27 23:22:25.789 DEBUG 17420 --- [           main] c.l.s.repository.UsersDao.findById       : ==>  Preparing: select id, username, password, name from users where id = ?
2022-04-27 23:22:25.789 DEBUG 17420 --- [           main] c.l.s.repository.UsersDao.findById       : ==> Parameters: 1(Integer)
2022-04-27 23:22:25.790 DEBUG 17420 --- [           main] c.l.s.repository.UsersDao.findById       : <==      Total: 1
Users{id='1', username='liudehua', password='123456', name='刘德华'}
------------------------------
2022-04-27 23:22:25.791 DEBUG 17420 --- [           main] c.l.s.repository.UsersDao.findByName     : ==>  Preparing: select id, username, password, name from users where name like concat('%', ?, '%')
2022-04-27 23:22:25.791 DEBUG 17420 --- [           main] c.l.s.repository.UsersDao.findByName     : ==> Parameters: 德(String)
2022-04-27 23:22:25.801 DEBUG 17420 --- [           main] c.l.s.repository.UsersDao.findByName     : <==      Total: 1
[Users{id='1', username='liudehua', password='123456', name='刘德华'}]

2022-04-27 23:22:25.822  INFO 17420 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2022-04-27 23:22:25.825  INFO 17420 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

Process finished with exit code 0

11. 其他内容
  1. mybatis-config.xml 可以不用创建
  • 可以删除mybatis-config.xml
  • 顺带删除或注释掉application.properties 中的
# 设置配置文件路径,默认在resources的目录
mybatis.config-location=classpath:mybatis/mybatis-config.xml
  1. 如果不需要使用xml来实现配置查询语句,则可以删除UsersMapper.xml
  • 如果仅用注解来配置SQL语句,则可以删除UsersMapper.xml
  • 如果都不需要xxxMapper.xml,则可以顺带删除或注释掉application.properties中的
# 设置mapper映射文件路径,默认在resources的目录
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
  1. 如果xxxMapper.xml中用的是全路径类名,或不适用xxxMapper.xml,则可以删除别名的配置
  • 这种情况下可以删除或注释掉application.properties中的
# 设置项目中实体类的包路径
mybatis.type-aliases-package=cn.lazyfennec.springboot.entity
  1. 注:以上的application.properties如果是换成yml文件同样适用

相关文章

网友评论

    本文标题:Spring Boot 整合 MyBatis 的例子

    本文链接:https://www.haomeiwen.com/subject/uoalyrtx.html