Spring Boot整合Mybatis Plus[极简教程]

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Spring Boot整合Mybatis Plus[极简教程]

一、简单介绍

Mybatis Plus,简称MP,官网https://mp.baomidou.com/

在MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

意愿:成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。

二、环境准备和基本配置

1.创建Spring Boot项目,引入依赖
<!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!-- 整合mybatis plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <!-- 数据库连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.9</version>
        </dependency>
        <!--  test依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
2.修改配置文件
server:
  port: 8099
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 12345
    url: jdbc:mysql://127.0.0.1:3306/test
    type: com.alibaba.druid.pool.DruidDataSource
3.数据库准备
CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4.项目结构和实体类准备

实体类:

public class Student {
    private Integer id;
    private String name;
    private Integer age;
    //构造方法......
    //Getter、Setter......
}

三、CRUD操作

1.继承BaseMapper

首先将Mapper层的接口集成BaseMapper,其中T就是需要操作的实体类泛型

@Mapper
@Repository
public interface StudentMapper extends BaseMapper<Student> {
}
2.创建Service层接口和实现类

接口

public interface StudentService {
    /**
     * 保存Student
     *
     * @param student
     * @return
     */
    int saveStudent(Student student);
    /**
     * 根据id查找
     *
     * @param id
     * @return
     */
    Student findStudentById(int id);
    /**
     * 查找全部
     *
     * @return
     */
    List<Student> fingAllStudnet();
    /**
     * 删除一个
     *
     * @param id
     * @return
     */
    int deleteStudentById(int id);
    /**
     * 修改一个
     *
     * @param student
     * @return
     */
    int updateStudentById(Student student);
    /**
     * 根据姓模糊查询
     *
     * @param firstName
     * @return
     */
    List<Student> findStudentByFirstName(Student firstName);
}

实现类

@Service
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentMapper studentMapper;
    @Override
    public int saveStudent(Student student) {
        return 0;
    }
    @Override
    public Student findStudentById(int id) {
        return null;
    }
    @Override
    public List<Student> findAllStudent() {
        return null;
    }
    @Override
    public int deleteStudentById(int id) {
        return 0;
    }
    @Override
    public int updateStudentById(Student student) {
        return 0;
    }
    @Override
    public List<Student> findStudentByFirstName(String firstName) {
        return null;
    }
}
3.方法的实现

下面我们来一一的实现这些方法

(1)保存一个
@Override
public int saveStudent(Student student) {
    return studentMapper.insert(student);
}

测试:

@Autowired
private StudentService studentService;
@Test
void testSaveStudent() {
    Student student = new Student(1,"张三", 23);
    System.out.println(studentService.saveStudent(student));
}

结果:

(2)根据id查找
@Override
public Student findStudentById(int id) {
    QueryWrapper<Student> wrapper = new QueryWrapper<>();
    wrapper.eq("id", id);
    return studentMapper.selectOne(wrapper);
}

测试

@Test
void testFindStuById() {
    System.out.println(studentService.findStudentById(1));
}

结果:

(3)查找全部

在查找全部之前我们先多插入一点

@Override
public List<Student> findAllStudent() {
    return studentMapper.selectList(new QueryWrapper<>());
}

测试

@Test
void testFindAllStu(){
    System.out.println(studentService.findAllStudent());
}

结果:

(4)删除一个
@Override
public int deleteStudentById(int id) {
    return studentMapper.deleteById(id);
}

测试

@Test
void testRemoveStudent(){
    System.out.println(studentService.deleteStudentById(1));
}

结果

(5)修改一个
@Override
public int updateStudentById(Student student) {
    return studentMapper.updateById(student);
}

测试

@Test
void testUpdateStu(){
    System.out.println(studentService.updateStudentById(new Student(2,"张小四",200)));
}

结果

(6)根据姓模糊查询

找出全部姓张的人

@Override
public List<Student> findStudentByFirstName(String firstName) {
    QueryWrapper<Student> wrapper = new QueryWrapper<>();
    wrapper.likeRight("name", firstName);
    return studentMapper.selectList(wrapper);
}

测试

@Test
void testLikeFind(){
    System.out.println(studentService.findStudentByFirstName("张"));
}

结果

四、可能遇到的问题

1.让主键自增
@TableId(type = IdType.AUTO)
private Integer id;
2.实体类和表名不一致
//@TableName("数据库表名")
@TableName("student")
3.实体类属性和表的字段名不一致
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("name")
private String name;
@TableField("age")
private Integer age;
4.插入数据后让自增id回写(很实用)
@TableId(value = "id", type = IdType.AUTO)  //只能有一个@TableId
private Integer id;
@TableField("name")
private String name;
@TableField("age")
private Integer age;

测试下:

// Service
@Override
public int saveStudent(Student student) {
    int result = studentMapper.insert(student);
    System.out.println(student);
    return result;
}
//  Test  //
@Test
void testSaveStudent() {
    Student student = new Student( "张四", 23);
    System.out.println(studentService.saveStudent(student));
}


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
1月前
|
缓存 Java 数据库连接
深入探讨:Spring与MyBatis中的连接池与缓存机制
Spring 与 MyBatis 提供了强大的连接池和缓存机制,通过合理配置和使用这些机制,可以显著提升应用的性能和可扩展性。连接池通过复用数据库连接减少了连接创建和销毁的开销,而 MyBatis 的一级缓存和二级缓存则通过缓存查询结果减少了数据库访问次数。在实际应用中,结合具体的业务需求和系统架构,优化连接池和缓存的配置,是提升系统性能的重要手段。
52 4
|
1月前
|
SQL Java 数据库连接
spring和Mybatis的各种查询
Spring 和 MyBatis 的结合使得数据访问层的开发变得更加简洁和高效。通过以上各种查询操作的详细讲解,我们可以看到 MyBatis 在处理简单查询、条件查询、分页查询、联合查询和动态 SQL 查询方面的强大功能。熟练掌握这些操作,可以极大提升开发效率和代码质量。
57 3
|
2月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
2月前
|
Java 数据库连接 数据库
spring和Mybatis的逆向工程
通过本文的介绍,我们了解了如何使用Spring和MyBatis进行逆向工程,包括环境配置、MyBatis Generator配置、Spring和MyBatis整合以及业务逻辑的编写。逆向工程极大地提高了开发效率,减少了重复劳动,保证了代码的一致性和可维护性。希望这篇文章能帮助你在项目中高效地使用Spring和MyBatis。
31 1
|
2月前
|
SQL 存储 数据库
深入理解@TableField注解的使用-MybatisPlus教程
`@TableField`注解在MyBatis-Plus中是一个非常灵活和强大的工具,能够帮助开发者精细控制实体类与数据库表字段之间的映射关系。通过合理使用 `@TableField`注解,可以实现字段名称映射、自动填充、条件查询以及自定义类型处理等高级功能。这些功能在实际开发中,可以显著提高代码的可读性和维护性。如果需要进一步优化和管理你的MyBatis-Plus应用程
193 3
|
3月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
333 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
3月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
253 2
|
9天前
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
|
16天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
66 14