SpringBoot快速整合Mybatis&MybatisPlus

本文档详细介绍了如何在SpringBoot项目中快速整合Mybatis和MybatisPlus,包括引入依赖、配置数据源、创建数据库表、定义实体、Mapper接口以及Service接口的实现,同时提供了基于XML的原生态Mybatis支持的步骤。

SpringBoot快速整合Mybatis&MybatisPlus

1、目标

整合mybatis和mybatis-plus实现数据库的增删改查 。

官方文档

mybatis-plus官方手册:https://mp.baomidou.com/guide/

2、整合mybatis

2.1 引入mybatis-plus依赖
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.45</version>
</dependency>
<!--mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.0</version>
</dependency>
2.2 在application.yml进行配置数据源
2.2.1 新建applicaiton.yml`
# 环境隔离
spring:
  profiles:
    active: dev

server:
  compression:
    # 请求gzip压缩
    enabled: true
    mime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml
    min-response-size: 1024
  application:
    name: edu-front-web
  # 模板视图  thymeleaf
  thymeleaf:
    cache: false
    prefix: classpath:/templates/
    mode: HTML
    encoding: UTF-8
  # json的转换配置
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    locale: zh_CN
    generator:
      write-numbers-as-strings: true
      write-bigdecimal-as-plain: true

##mybatis的原生态支持
mybatis-plus:
  mapper-locations: classpath*:/mapper/*.xml
  type-aliases-package: com.example.entity

#logging:
#  level:
#    root: debug
2.2.2 新建applicaiton-dev.yml`
# 数据源的配置
spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456
    hikari:
      connection-timeout: 60000
      validation-timeout: 3000
      idle-timeout: 60000
      login-timeout: 5
      max-lifetime: 60000
      maximum-pool-size: 30
      minimum-idle: 10
      read-only: false
2.2.3 新建数据库和表
/*
Navicat MySQL Data Transfer

Source Server         : localhost_3306
Source Server Version : 50635
Source Host           : localhost:3306
Source Database       : test

Target Server Type    : MYSQL
Target Server Version : 50635
File Encoding         : 65001

Date: 2021-07-23 10:19:25
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- Table structure for user

-- ----------------------------

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nickname` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '用户名',
  `password` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '密码',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `male` int(11) DEFAULT NULL COMMENT '性别',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
2.2.4 新建实体
package com.example.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;

@Data // getter/setter
@ToString // toString
@AllArgsConstructor // 有参构造函数
@NoArgsConstructor // 无参构造函数
@TableName("user")
@Accessors(chain = true)
@ApiModel(description = "用户实体")
public class User {

    // 用户编号
    @TableId(type = IdType.AUTO)
    @ApiModelProperty(value = "用户编号", required = true)
    private Integer id;
    // 用户昵称
    @ApiModelProperty(value = "用户昵称", required = true)
    private String nickname;
    // 用户密码
    @ApiModelProperty(value = "用户密码", required = true)
    private String password;
    // 用户年龄
    @ApiModelProperty(value = "用户年龄", required = true)
    private Integer age;
    // 用户性别 0 女 1 男 2 保密
    @ApiModelProperty(value = "用户性别", required = true)
    private Integer male;

}
2.2.5 新建mapper
package com.example.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.entity.User;

/**
 * @Auther: 长颈鹿
 * @Date: 2021/07/23/10:16
 * @Description:
 */
public interface UserMapper extends BaseMapper<User> {
}
2.2.6 mybatis和spring融合

在启动类上增加@MapperScan("com.kuangstudy.mapper")

package com.example;

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

@SpringBootApplication
@MapperScan("com.example.mapper")
public class StudyBootsMybatisApplication {

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

}
2.2.7 定义户Service接口和实现类
package com.example.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.entity.User;

/**
 * @Auther: 长颈鹿
 * @Date: 2021/07/23/10:22
 * @Description:
 */
public interface UserService extends IService<User> {
}
package com.example.service;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.entity.User;
import com.example.mapper.UserMapper;

/**
 * @Auther: 长颈鹿
 * @Date: 2021/07/23/10:23
 * @Description:
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
2.2.8 测试用例
package com.example;

import com.example.entity.User;
import com.example.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class StudyBootsMybatisApplicationTests {

    @Autowired
    private UserService userService;

    @Test
    public void saveUser(){
        User user = new User();
        user.setId(1);
        user.setNickname("yykkxxxx");
        user.setPassword("1121455");
        user.setAge(34);
        user.setMale(1);
        userService.saveOrUpdate(user);
    }

}

3、基于xml的原生态的mybatis的支持

3.1 在application.yml增加支持xml的方式
##mybatis的原生态支持
mybatis-plus:
  mapper-locations: classpath*:/mapper/*.xml
  type-aliases-package: com.kuangstudy.entity
3.2 在UserMapper定义方法
package com.example.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.entity.User;
import org.apache.ibatis.annotations.Param;

/**
 * @Auther: 长颈鹿
 * @Date: 2021/07/23/10:16
 * @Description:
 */
public interface UserMapper extends BaseMapper<User> {

    User getByUserId(@Param("id") Integer id);
}
3.3 新建mapper.xml文件

在resources/mapper/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.kuangstudy.mapper.UserMapper">

    <select id="getByUserId" resultType="com.kuangstudy.entity.User">
        SELECT id,
           nickname,
           password,
           age,
           male
        FROM kss_user
        WHERE id = #{id}
    </select>

</mapper>

3.4 UserService接口新建自定义的方法
package com.example.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.entity.User;

/**
 * @Auther: 长颈鹿
 * @Date: 2021/07/23/10:22
 * @Description:
 */
public interface UserService extends IService<User> {

    /**
     * 根据用户id查询用户信息
     * @param id
     * @return
     */
    User getByUserId(Integer id);
}
package com.example.service;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import org.springframework.stereotype.Service;

/**
 * @Auther: 长颈鹿
 * @Date: 2021/07/23/10:23
 * @Description:
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    @Override
    public User getByUserId(Integer id) {
        return this.baseMapper.getByUserId(id);
    }
}

this.baseMapper:是UserMapper,可以不用注入了

3.5 测试
@Test
    public void getuserById(){
        User user = userService.getByUserId(1);
        System.out.println(user);
    }
3.6 小结

mybatis-plus即支持注解+反射的实现方式

也支持原生基于xml的方式

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南宫拾壹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值