SpringBoot整合MyBatis超详细教程

1.整合MyBatis操作

前面一篇提到了SpringBoot整合基础的数据源JDBC、Druid操作,实际项目中更常用的还是MyBatis框架,而SpringBoot整合MyBatis进行CRUD也非常方便。

下面从配置模式、注解模式、混合模式三个方面进行说明MyBatis与SpringBoot的整合。

1.1.配置模式

MyBatis配置模式是指使用mybatis配置文件的方式与SpringBoot进行整合,相对应的就有mybatis-config.xml(用于配置驼峰命名,也可以省略这个文件)、XxxMapper.xml文件。

主要步骤为:

  • 导入mybatis官方starter
  • 编写mapper接口。标准@Mapper注解
  • 编写sql映射文件并绑定mapper接口

在application.yaml中指定Mapper配置文件的位置,以及指定全局配置文件的信息 (建议;配置在mybatis.configuration中,可以省略mybatis-config.xml文件)

下面是具体整合配置步骤:

①引入相关依赖pom.xml配置:

pom.xml

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

        <!--整合mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </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>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

②编写对应Mapper接口:

@Mapper  //这个注解表示了这个类是一个mybatis的mapper接口类
@Repository
public interface UserMapper {
    //@Select("select * from user")
    List<User> findAllUsers();

    //@Insert("insert into user(id, username, password) values (#{id}, #{username}, #{password})")
    void insert(User user);

    //@Update("update user set username = #{username}, password = #{password} where id = #{id}")
    void update(User user);

    //@Delete("delete from user where id = #{id}")
    void deleteById(Integer id);
}

③在resources下创建对应的mapper文件,对应domain类,数据库表单如下:

User类:

@Data
public class User {
    private Integer id;
    private String username;
    private String password;
}

数据库user表:

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">
<!--namespace表示当前mapper的唯一标识:一般使用domain的全路径名+Mapper来命名-->
<mapper namespace="com.fengye.springboot_mybatis.mapper.UserMapper">
    <!--id:方法表示,一般配置对应的方法;
        resultType:表示该方法有返回,返回需要封装到对应实体的类型-->
    <select id="findAllUsers" resultType="com.fengye.springboot_mybatis.entity.User">
        select * from user
    </select>

    <insert id="insert" parameterType="com.fengye.springboot_mybatis.entity.User">
        insert into user(id, username, password) values (#{id}, #{username}, #{password})
    </insert>

    <update id="update" parameterType="com.fengye.springboot_mybatis.entity.User">
        update user set username = #{username}, password = #{password} where id = #{id}
    </update>

    <delete id="deleteById" parameterType="Integer">
        delete from user where id = #{id}
    </delete>
</mapper>

④对应配置application.yml文件:

application.yml

server:
  port: 8083

spring:
  datasource:
    username: root
    password: admin
    #假如时区报错,增加时区配置serverTimezone=UTC
    url: jdbc:mysql://localhost:3306/mybatis02_0322?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  #config-location: classpath:mybatis/mybatis-config.xml  使用了configuration注解则无需再指定mybatis-config.xml文件
  mapper-locations: classpath:mybatis/mapper/*.xml
  configuration:   #指定mybatis全局配置文件中的相关配置项
    map-underscore-to-camel-case: true

1.2.注解模式

注解模式使用

主要步骤:

  • 导入mybatis官方依赖
  • 注解方式编写mapper接口
  • 在application.yaml中指定Mapper配置文件的位置,以及指定全局配置文件的信息

可以看到注解模式比配置模式少了编写Mapper.xml文件,简化了简单SQL语句的xml文件编写。

下面是具体整合步骤:

①创建测试表单city,对应domain类:

建表sql:

CREATE TABLE city
(
    id    INT(11) PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(30),
    state VARCHAR(30),
    country VARCHAR(30)
);

City类:

@Data
public class City {
    private Long id;
    private String name;
    private String state;
    private String country;
}

②导入pom.xml与配置模式相同,编写注解式CityMapper接口:

@Mapper
@Repository
public interface CityMapper {
    @Select("select * from city where id = #{id}")
    public City getCityById(Long id);

    /**
     * 使用@Options来增加除Insert语句中其它可选参数,比如插入获取id主键的值
     * @param city
     */
    @Insert("insert into city(name, state, country) values (#{name}, #{state}, #{country})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    public void insert(City city);

    @Update("update city set name = #{name}, state = #{state}, country = #{country} where id = #{id}")
    public void update(City city);

    @Delete("delete from city where id = #{id}")
    public void deleteById(Long id);
}

③编写Service层、Controller层:

Service相关:

public interface CityService {
    City findCityById(Long id);

    void insert(City city);

    void update(City city);

    void deleteById(Long id);
}

@Service
public class CityServiceImpl implements CityService {
    @Autowired
    private CityMapper cityMapper;

    @Override
    public City findCityById(Long id) {
        return cityMapper.getCityById(id);
    }

    @Override
    public void insert(City city) {
        cityMapper.insert(city);
    }

    @Override
    public void update(City city) {
        cityMapper.update(city);
    }

    @Override
    public void deleteById(Long id) {
        cityMapper.deleteById(id);
    }
}

Controller相关:

@RestController
@RequestMapping("/city/api")
public class CityController {
    @Autowired
    private CityService cityService;

    @RequestMapping("/findCityById/{id}")
    public City findCityById(@PathVariable("id") Long id){
        return cityService.findCityById(id);
    }

    @PostMapping("/insert")
    public String insert(City city){
        cityService.insert(city);
        return "insert ok";
    }

    @PostMapping("/update")
    public String update(City city){
        cityService.update(city);
        return "update ok";
    }

    @GetMapping("/delete/{id}")
    public String delete(@PathVariable("id") Long id){
        cityService.deleteById(id);
        return "delete ok";
    }
}

④对应使用Postman接口进行测试:

简单模拟接口POST/GET请求即可:

1.3.混合模式

在实际项目开发中涉及很多复杂业务及连表查询SQL,可以配合使用注解与配置模式,达到最佳实践的目的。

实际项目操作步骤:

  • 引入mybatis-starter
  • 配置application.yaml中,指定mapper-location位置即可
  • 编写Mapper接口并标注@Mapper注解
  • 简单方法直接注解方式
  • 复杂方法编写mapper.xml进行绑定映射
  • 主启动类上使用@MapperScan("com.fengye.springboot_mybatis.mapper") 简化Mapper接口,包下所有接口就可以不用标注@Mapper注解

具体配置如下:

@SpringBootApplication
//主启动类上标注,在XxxMapper中可以省略@Mapper注解
@MapperScan("com.fengye.springboot_mybatis.mapper")
public class SpringbootMybatisApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootMybatisApplication.class, args);
    }

}

@Repository
public interface CityMapper {
    @Select("select * from city where id = #{id}")
    public City getCityById(Long id);

    /**
     * 使用@Options来增加除Insert语句中其它可选参数,比如插入获取id主键的值
     * @param city
     */
    @Insert("insert into city(name, state, country) values (#{name}, #{state}, #{country})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    public void insert(City city);

    @Update("update city set name = #{name}, state = #{state}, country = #{country} where id = #{id}")
    public void update(City city);

    @Delete("delete from city where id = #{id}")
    public void deleteById(Long id);
}

本博客参考写作文档:

SpringBoot2核心技术与响应式编程

博客涉及代码示例均已上传至github地址:

SpringBootStudy

到此这篇关于SpringBoot整合MyBatis超详细教程的文章就介绍到这了,更多相关SpringBoot整合MyBatis内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot整合MyBatis逆向工程及 MyBatis通用Mapper实例详解

    一.添加所需依赖,当前完整的pom文件如下: <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&q

  • 解决SpringBoot整合Mybatis扫描不到Mapper的问题

    闲来无事,想学学springboot,开始搭建一个项目,但是一直显示mapper扫描不到的错误: "Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController': Unsa

  • springboot与mybatis整合实例详解(完美融合)

    简介 从 Spring Boot 项目名称中的 Boot 可以看出来,Spring Boot 的作用在于创建和启动新的基于 Spring 框架的项目.它的目的是帮助开发人员很容易的创建出独立运行和产品级别的基于 Spring 框架的应用.Spring Boot 会选择最适合的 Spring 子项目和第三方开源库进行整合.大部分 Spring Boot 应用只需要非常少的配置就可以快速运行起来. Spring Boot 包含的特性如下: 创建可以独立运行的 Spring 应用. 直接嵌入 Tomc

  • SpringBoot+MybatisPlus+代码生成器整合示例

    项目目录结构: 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.or

  • SpringBoot整合MyBatis实现乐观锁和悲观锁的示例

    本文以转账操作为例,实现并测试乐观锁和悲观锁. 全部代码:https://github.com/imcloudfloating/Lock_Demo GitHub Page:https://cloudli.top 死锁问题 当 A, B 两个账户同时向对方转账时,会出现如下情况: 时刻 事务 1 (A 向 B 转账) 事务 2 (B 向 A 转账) T1 Lock A Lock B T2 Lock B (由于事务 2 已经 Lock A,等待) Lock A (由于事务 1 已经 Lock B,等

  • SpringBoot整合MybatisSQL过滤@Intercepts的实现

    场景: 系统模块查询数据库需要根据用户的id去筛选数据.那么如果在 每个sql加user_id的过滤显然不明确.所以要在查询前将sql拼接上条件,做统一管理. 开发环境: spring boot + mybatis 只需一个拦截类即可搞定(在看代码前需要了解注解@Intercepts()): @Component @Intercepts({ @Signature(type = Executor.class, method = "query", args = {MappedStateme

  • SpringBoot如何通过yml方式整合Mybatis

    本来打算写个使用Sharding-JDBC的例程,但是在搭建Mybatis的过程中,一波三折,因为好久没搭建项目了,另外加上换了电脑.所以很破折,在这里记录一下Spring Boot整合Mybatis吧.可能很简单,但是我长时间没用忘记了,我这里备忘一下吧. 一.项目目录结构 注意这里Application文件的位置,它是与controller.entity.mapper.service等包处于并列的关系. 二.数据库文件 SET NAMES utf8mb4; SET FOREIGN_KEY_C

  • SpringBoot整合MybatisPlus的简单教程实现(简单整合)

    最近在研究springboot,顺便就会看看数据库连接这一块的知识 ,所以当我发现有通用Mapper和MybatisPlus这两款网络上比较火的简化mybatis开发的优秀软件之后.就都想试一下,看看哪一款比较适合自己. 先创建一个springboot的项目,可以参考我之前的文章Spring Boot 的简单教程(一) Spring Boot 项目的创建. 创建好springboot之后就需要整合mybatis和mybatis-plus了. 打开pom.xml文件,将最新的mybatis相关的包

  • SpringBoot整合MyBatis超详细教程

    1.整合MyBatis操作 前面一篇提到了SpringBoot整合基础的数据源JDBC.Druid操作,实际项目中更常用的还是MyBatis框架,而SpringBoot整合MyBatis进行CRUD也非常方便. 下面从配置模式.注解模式.混合模式三个方面进行说明MyBatis与SpringBoot的整合. 1.1.配置模式 MyBatis配置模式是指使用mybatis配置文件的方式与SpringBoot进行整合,相对应的就有mybatis-config.xml(用于配置驼峰命名,也可以省略这个文

  • SpringBoot整合Jackson超详细用法(附Jackson工具类)

    目录 一.Jackson简介 二.Json简介 三.springboot整合Jackson 1.创建项目 2.导入坐标 3.配置文件 4.实体类 5.测试类 一.Jackson简介 说明:本篇讲的是Jackson的详细用法,Jackson工具类在文章最后,直接复制粘贴即可使用. Jackson是公司中必用的组件之一,常用的还用阿里的Fastjson,但是由于一些原因bug与漏洞是在是太多,在注重安全的公司直接被pass,还有就是谷歌的Gson(这个没用过不太了解). Spring MVC 的默认

  • SpringBoot整合mybatis-plus进阶详细教程

    目录 前言 wapper介绍 : 条件构造器 AbstractWrapper 一.什么是AbstractWrapper 二.QueryWrapper(LambdaQueryWrapper) 1.QueryWrapper用法示例 2.LambdaQueryWrapper用法示例 三.UpdateWrapper(LambdaUpdateWrapper) 1.UpdateWrapper用法示例 2.LambdaUpdateWrapper用法示例 mybatis-plus的插件 一.分页插件 1.配置分

  • springboot集成Mybatis的详细教程

    springboot集成Mybatis 第一步: 添加Mybatis依赖 <!--mybatis整合springboot框架的起步依赖--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> &l

  • 使用sts工具、SpringBoot整合mybatis的详细步骤

    SpringBoot 集成 Mybatis 框架 一.1.SpringBoot 集成 Mybatis 的基本步骤 第一步:添加依赖: 第二步:配置数据源: 第三步:扫描接口包. 二.详细的集成步骤如下: 1.第一步:添加依赖: 添加依赖:除了常规依赖外,需要加入 Mybatis 代码如下(示例): <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XM

  • Springboot整合Redis的详细教程分享

    目录 1.Docker 安装 Redis 1.1 下载镜像 1.2 创建配置文件 1.3 启动Redis 1.4 进入Redis容器 1.5 redis 可视化工具 2.SpringBoot 整合Redis缓存 2.1 安装Redis 2.2 引入依赖 2.3 配置Redis地址端口 2.4 测试 1.Docker 安装 Redis 1.1 下载镜像 docker pull redis:6.2.6 1.2 创建配置文件 mkdir -p /mydata/redis/conf touch /myd

  • 基于SpringBoot整合SSMP的详细教程

    目录 基于SpringBoot实现SSMP整合 整合JUnit 整合MyBatis 整合MyBatis-Plus 总结 基于SpringBoot实现SSMP整合 SpringBoot之所以好用,就是它能方便快捷的整合其他技术,这里我们先介绍四种技术的整合: 整合JUnit 整合MyBatis 整合MyBatis-Plus 整合Druid 整合JUnit ​ SpringBoot技术的定位用于简化开发,再具体点是简化Spring程序的开发.所以在整合任意技术的时候,如果你想直观感触到简化的效果,你

  • springboot整合apache ftpserver详细教程(推荐)

    一.Apache ftpserver相关简介 Apache FtpServer是100%纯Java FTP服务器.它被设计为基于当前可用的开放协议的完整且可移植的FTP服务器引擎解决方案.FtpServer可以作为Windows服务或Unix / Linux守护程序独立运行,也可以嵌入Java应用程序中.我们还提供对Spring应用程序内集成的支持,并以OSGi捆绑软件的形式提供我们的发行版.默认的网络支持基于高性能异步IO库Apache MINA.使用MINA,FtpServer可以扩展到大量

  • 使用kotlin集成springboot开发的超详细教程

    目录 一.安装支持插件 二.maven配置 注意 三.创建入口函数类 四.编写入口函数 五.创建数据库对象 六.创建仓库操作接口 七.创建一个业务接口来声明业务 八.创建一个业务接口实现来实现声明的业务 九.创建一个 http服务接口 目前大多数都在使用java集成 springboot进行开发,本文演示仅仅将 java换成 kotlin,其他不变的情况下进行开发. 一.安装支持插件 在 idea中安装 kotlin插件(大多数情况下会默认安装了) 二.maven配置 注意 kotlin目前不支

  • SpringBoot整合mybatis-plus快速入门超详细教程

    目录 前言 mybatis-plus 简介 mybatis-plus 优点 相关链接 mybatis-plus实例 1.示例项目结构 2.数据库准备 3.pom.xml: 4.application.yml 5.User.java 6.UserMapper.java 7.UserServiceImpl.java 8.测试类 mybatis-plus的crud: 1.insert操作: 2.select操作: 3.update操作: 4.delete操作: 总结 前言 mybatis-plus 简

随机推荐