MyBatis-Plus——初识MyBatis的增强框架MP

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MyBatis-Plus——初识MyBatis的增强框架MP

文章目录:


1.写在前面

2.MP的第一个案例

1.1 insert

1.2 update

1.3 delete

1.4 select

1.写在前面


在持久层框架中,MyBatis的应用还是比较多的,而且比重在逐渐的上升。通常项目的组合框架是SSM。那么MyBatis之所以火,是因为它的灵活、使用方便、优化相对容易。

我们都知道,MyBatis可以直接执行sql语句,但是sql语句是写在xml映射文件中的,使用MyBatis了话,是需要写很多xml映射文件的,在一定程度上比较繁琐。而现在的数据库操作肯定也是离不开CRUD

MyBatis-Plus就是在MyBatis上只做增强、不做改变,为简化而生、为提高效率而生,减少了xml的映射文件的编写,甚至可以达到不用编写xml就可以实现CRUD操作,很是方便,极大的提高了开发效率。

官网:https://mp.baomidou.com/

下面是关于它们两者的图片。这两只小飞鸟还是比较可爱的。


2.MP的第一个案例


创建一个普通的SpringBoot项目,在pom文件中加入相关依赖。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>5.1.9</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.5</version>
        </dependency>

在核心配置文件中,配置数据库的相关连接信息。

#配置数据库的相关连接信息
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springdb?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=12345678
#配置对应的日志信息
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

Navicat中创建一张表。


编写实体类。

package com.szh.mybatisplus.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/**
 *
 */
@TableName(value = "user")
public class User {
    /**
     * 指定主键的方式:使用@TableId注解
     * value:指定主键字段的名称,如果主键字段的名称是id,value属性可以省略
     * type:指定主键字段的类型,IdType.AUTO表示自动增长
     * 
     * 其他字段可以使用@TableField注解
     */
    @TableId(value = "id",type = IdType.AUTO)
    private Integer id;
    @TableField(value = "name")
    private String name;
    @TableField(value = "age")
    private Integer age;
    @TableField(value = "email")
    private String email;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", email='" + email + '\'' +
                '}';
    }
}

编写mapper接口,让它继承MP框架中的BaseMapper接口。

package com.szh.mybatisplus.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.szh.mybatisplus.entity.User;
/**
 * 自定义Mapper,有两个要求
 *  1) 继承BaseMapper
 *  2) 泛型使用对应的实体类
 *
 * BaseMapper是MP框架中的对象类,其中定义了17个关于CRUD的方法
 */
public interface UserMapper extends BaseMapper<User> {
}

MP框架中的BaseMapper接口中定义了17个关于CRUD的操作方法。


SpringBoot项目的启动入口类上添加 @MapperScan 注解,确保扫描mapper包下所有mybatismybatis-plus相关的注解。

package com.szh.mybatisplus;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan(value = "com.szh.mybatisplus.mapper")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

SpringBoot项目提供的测试类中编写CRUD相关的测试方法。

首先,将mapper注入到Spring容器中,使用@Autowired注解。

  @Autowired
  private UserMapper userMapper;

1.1 insert

    /**
     * insert新增
     */
    @Test
    void testUserInsert() {
        User user=new User();
        user.setName("张三");
        user.setAge(20);
        user.setEmail("zhangsan@sina.com");
        int rows=userMapper.insert(user);
        System.out.println("insert的结果:" + rows);
    }

1.2 update

    /**
     * update更新
     */
    @Test
    void testUserUpdate() {
        User user=new User();
        user.setId(2);
        user.setName("李四");
        user.setAge(18);
        user.setEmail("lisi@163.com");
        //判断字段是否会进行更新,依据字段是否为null,
        //如果非null,则加入set语句中;为null,则不加入set语句
        int rows=userMapper.updateById(user);
        System.out.println("update的结果是:" + rows);
    }

1.3 delete

    /**
     * delete根据主键id删除
     */
    @Test
    void testUserDelete() {
        int rows = userMapper.deleteById(2);
        System.out.println("delete的结果是:" + rows);
    }

    /**
     * delete根据条件删除,将删除条件封装到Map集合中
     */
    @Test
    void testUserDelete2() {
        Map<String,Object> map=new HashMap<>();
        //put("表的字段名",条件值)
        map.put("name","张三");
        map.put("age",20);
        int rows = userMapper.deleteByMap(map);
        System.out.println("delete的结果是:" + rows);
    }

    /**
     * delete批量删除,使用多个主键值删除
     */
    @Test
    void testUserDelete3() {
        List<Integer> list=new ArrayList<>();
        list.add(5);
        list.add(7);
        list.add(8);
        int rows=userMapper.deleteBatchIds(list);
        System.out.println("delete的结果是:" + rows);
    }


1.4 select

    /**
     * select根据主键id查询
     */
    @Test
    void testUserSelect() {
        User user=userMapper.selectById(4);
        System.out.println("select的结果是:" + user);
    }

    /**
     * select根据多个主键id值查询
     */
    @Test
    void testUserSelect2() {
        List<Integer> list=new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        List<User> userList=userMapper.selectBatchIds(list);
        for (User user : userList) {
            System.out.println(user);
        }
    }

    /**
     * select根据条件查询,将查询条件封装到Map集合中
     */
    @Test
    void testUserSelect3() {
        Map<String,Object> map=new HashMap<>();
        map.put("name","小宋");
        map.put("age",21);
        List<User> list=userMapper.selectByMap(map);
        list.forEach( user -> {
            System.out.println(user);
        });
    }


通过上面的代码对应出的sql语句可以看出,在MP框架中,如果说你调用了CRUD操作中有关List的方法,那么最终的sql语句的条件将会被转换为 IN;如果调用了CRUD操作中有关Map的方法,那么最终的sql语句的条件将会被转换为 AND

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
Java 数据库连接 Maven
后端框架学习-----mybatis(使用mybatis框架遇到的问题)
这篇文章总结了在使用MyBatis框架时可能遇到的几个常见问题及其解决方法,包括配置文件注册、接口绑定、方法名匹配、返回类型匹配、Maven资源导出、时区设置和字符编码问题。
|
17天前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
33 1
持久层框架MyBatisPlus
|
1月前
|
Java 数据库连接 mybatis
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
133 0
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
|
1月前
|
缓存 Cloud Native 安全
探索阿里巴巴新型ORM框架:超越MybatisPlus?
【10月更文挑战第9天】在Java开发领域,Mybatis及其增强工具MybatisPlus长期占据着ORM(对象关系映射)技术的主导地位。然而,随着技术的发展,阿里巴巴集团推出了一种新型ORM框架,旨在提供更高效、更简洁的开发体验。本文将对这一新型ORM框架进行探索,分析其特性,并与MybatisPlus进行比较。
33 0
|
2月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
3月前
|
Java 数据库连接 mybatis
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
这篇文章讨论了在已使用MyBatis的项目中引入MyBatis-Plus后出现的"Invalid bound statement (not found)"错误,并提供了解决方法,主要是通过修改yml配置文件来解决MyBatis和MyBatis-Plus共存时的冲突问题。
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
3月前
|
Java 数据库连接 mybatis
mybatis框架图
文章介绍了MyBatis框架的起源、发展和其作为持久层框架的功能,提供了MyBatis的框架图以帮助理解其结构和组件。
mybatis框架图
|
3月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
3月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。