亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

MybatisPlus資料入門教程

概述

MybatisPlus是一个强大的Mybatis增强工具,提供了包括CRUD操作、自动填充和高性能分页在内的多种便捷功能,极大地简化了数据库开发过程。本文将详细介绍MybatisPlus的安装配置、基本CRUD操作、自定义查询及自动填充等特性,帮助读者快速掌握MybatisPlus的使用方法。

MybatisPlus简介
MybatisPlus的基本概念

MybatisPlus是一个基于Mybatis的增强工具,它提供了多种便捷操作,包括CRUD操作、分页插件等。MybatisPlus不仅简化了Mybatis的工作,还提升了开发效率。它支持所有Mybatis提供的查询方法,并在此基础上进行了功能扩展,使得开发过程更加简洁和高效。

MybatisPlus的优势和特点
  • 简化CRUD操作:MybatisPlus提供了丰富的CRUD操作方法,覆盖了大部分常见的数据库操作需求,减少了大量重复代码的编写。
  • 高性能:MybatisPlus通过优化SQL执行效率,大大提高了数据库访问性能。
  • 自动填充:支持创建时间和更新时间的自动填充,也支持自动填充其他字段。
  • 分页插件:内置分页插件,可以非常方便地进行分页查询操作。
  • 动态SQL:支持自定义SQL语句,可以根据需要灵活生成SQL逻辑。
  • 简单的CRUD操作:通过简单的注解配置,就可以完成复杂的数据库操作逻辑。
MybatisPlus与Mybatis的异同
  • 相同点:MybatisPlus是基于Mybatis开发的,支持Mybatis的所有功能,例如基本的增删改查。
  • 不同点:MybatisPlus在Mybatis的基础上进行了功能增强,提供了更加高效的开发体验。例如,自动填充、高性能分页插件等。
MybatisPlus环境搭建
MybatisPlus的下载和引入

MybatisPlus可以通过Maven或Gradle的方式进行下载和引入。

Maven和Gradle的依赖配置

对于Maven项目,需要在pom.xml文件中添加MybatisPlus的依赖:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3</version>
</dependency>

对于Gradle项目,需要在build.gradle文件中添加MybatisPlus的依赖:

dependencies {
    implementation 'com.baomidou:mybatis-plus-boot-starter:3.4.3'
}
数据库连接配置

在Spring Boot项目中,通常会在application.ymlapplication.properties文件中进行数据库连接配置。以下是application.yml中的一个示例:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatisplus?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: root

以下是application.properties中的一个示例:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatisplus?useUnicode=true&characterEncoding=UTF-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

在配置完成后,MybatisPlus将自动扫描并加载相关的数据源配置。

基本CRUD操作
实体类的定义

实体类是MybatisPlus中的数据模型,通常对应于数据库表。下面是一个简单的用户Entity的示例:

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;

@TableName("user")
public class User implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;

    // Getter and Setter
    public Long getId() {
        return id;
    }

    public void setId(Long 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;
    }
}
CRUD操作的基本使用

MybatisPlus提供了多种方法来执行基本的CRUD操作。下文将展示增删改查的基本使用示例。

插入操作

User user = new User();
user.setName("张三");
user.setAge(18);
user.setEmail("[email protected]");
userMapper.insert(user);

查询操作

User user = userMapper.selectById(1L);

更新操作

User user = new User();
user.setId(1L);
user.setName("李四");
user.setAge(20);
user.setEmail("[email protected]");
userMapper.updateById(user);

删除操作

userMapper.deleteById(1L);

批量插入操作

List<User> users = new ArrayList<>();
users.add(new User("张三", 18, "[email protected]"));
users.add(new User("李四", 20, "[email protected]"));
userMapper.insertBatch(users);

批量更新操作

List<User> users = new ArrayList<>();
users.add(new User(1L, "张三", 18, "[email protected]"));
users.add(new User(2L, "李四", 20, "[email protected]"));
userMapper.updateBatchById(users);
条件构造器的使用

MybatisPlus的条件构造器QueryWrapperUpdateWrapper可以用来构建复杂的查询和更新条件。下面是一个使用QueryWrapper进行复杂查询的示例:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 18);
queryWrapper.le("name", "张三");
List<User> users = userMapper.selectList(queryWrapper);

使用UpdateWrapper进行复杂更新操作的示例:

UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("age", 18);
updateWrapper.le("name", "张三");
userMapper.update(null, updateWrapper);
自定义查询
MybatisPlus自定义SQL查询

MybatisPlus支持自定义SQL查询,可以使用@Select注解来完成自定义查询。

@Select("SELECT * FROM user WHERE age > #{age}")
List<User> selectByAge(@Param("age") int age);
使用Lambda表达式进行查询

Lambda表达式可以简化查询条件的编写,提高代码的可读性。以下是使用Lambda表达式进行查询的一个示例:

List<User> users = userMapper.lambdaQuery()
        .eq(User::getAge, 18)
        .le(User::getName, "张三")
        .list();
复杂查询场景的处理

对于复杂的查询场景,可以通过组合多个条件来进行查询,例如多表关联查询等。

List<User> users = userMapper.lambdaQuery()
        .eq(User::getAge, 18)
        .le(User::getName, "张三")
        .and(wrapper -> wrapper.eq(User::getEmail, "[email protected]"))
        .list();
多表关联查询

这里提供一个多表关联查询的示例,使用@Select注解和Lambda表达式。

@Select("SELECT * FROM user u JOIN order o ON u.id = o.user_id")
List<User> getUsersWithOrders();
List<User> users = userMapper.lambdaQuery()
        .eq(User::getAge, 18)
        .join(Order::getUserId, User::getId)
        .list();
MybatisPlus的自动填充
创建时间、更新时间的自动填充

MybatisPlus内置了对创建时间和更新时间的自动填充功能。可以通过在实体类中加上@TableField(fill = FieldFill.INSERT)@TableField(fill = FieldFill.INSERT_UPDATE)注解来实现。

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;

@TableName("user")
public class User implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    // Getter and Setter
}
其他字段的自动填充

除了创建时间和更新时间,MybatisPlus同样支持对其他字段的自动填充。例如,可以实现自己的字段填充策略。

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;

@TableName("user")
public class User implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    @TableField(fill = FieldFill.INSERT)
    private Integer status;

    // Getter and Setter
}
实际项目中的应用案例

在实际项目中,自动填充功能可以简化代码逻辑。例如,在插入新数据时,自动填充创建时间和更新时间;在更新数据时,仅更新更新时间。

User user = new User();
user.setName("张三");
user.setAge(18);
user.setEmail("[email protected]");
userMapper.insert(user);

在插入用户时,createTimeupdateTime字段会被自动填充。

User user = new User();
user.setId(1L);
user.setName("李四");
user.setAge(20);
user.setEmail("[email protected]");
userMapper.updateById(user);

在更新用户时,updateTime字段会被自动更新。

MybatisPlus的分页处理
分页插件的引入和使用

MybatisPlus提供了内置的分页插件Page,可以非常方便地进行分页查询操作。下面是一个分页查询的示例:

IPage<User> page = new Page<>(1, 10);
IPage<User> result = userMapper.selectPage(page, null);
分页查询的实际操作

通过Page对象可以设置当前页和每页显示的数量。例如,查询第二页,每页显示10条记录:

IPage<User> page = new Page<>(2, 10);
IPage<User> result = userMapper.selectPage(page, null);
高级分页功能的配置

MybatisPlus的分页插件还支持配置一些高级功能,例如,可以通过Page对象的setSearchCount方法来控制是否查询总记录数。

IPage<User> page = new Page<>(1, 10);
page.setSearchCount(true);
IPage<User> result = userMapper.selectPage(page, null);

可以通过配置文件进行分页插件的详细配置,例如:

mybatis-plus.global-config.db-config.id-type=assign_id
mybatis-plus.global-config.db-config.id-type=assign_id
mybatis-plus.global-config.db-config.db-type=mysql
mybatis-plus.global-config.db-config.table-alias=true
mybatis-plus.global-config.db-config.log-visitor=true
mybatis-plus.global-config.db-config.id-type=auto

通过以上设置,可以更加灵活地控制分页查询行为,满足不同的业务需求。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消