Mybatis-plus对单表操作的封装实现

 更新时间:2024年12月19日 09:08:39   作者:five-five  
本文详细介绍了MyBatis-Plus单表操作,包括自定义SQL、逻辑删除、乐观锁、全局拦截器和代码生成器等,具有一定的参考价值,感兴趣的可以了解一下

MyBatis-Plus是一个基于MyBatis的增强工具,它提供了丰富的CRUD操作和分页查询等功能,极大地简化了开发人员的数据库操作。本文将详细介绍MyBatis-Plus官方已经写好的单表操作,并提供一些拓展内容。

1. 引言

在进行单表操作之前,我们需要定义一个实体类和对应的Mapper接口。以下是一个简单的实体类和Mapper接口示例:

@Data
@TableName("user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String username;
    private String password;
    private Integer age;
}

@Mapper
public interface UserMapper extends BaseMapper<User> {
}

在实体类上使用@TableName注解指定对应的数据库表名,使用@TableId注解指定主键字段。在Mapper接口上使用@Mapper注解标识该接口为Mapper接口,并继承BaseMapper<User>,这样就可以直接使用MyBatis-Plus提供的CRUD操作方法。

2. 单表操作

2.1 插入操作

插入操作可以使用insert方法,示例代码如下:

User user = new User();
user.setUsername("Tom");
user.setPassword("123456");
user.setAge(18);

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int result = userMapper.insert(user);
if (result > 0) {
    System.out.println("插入成功");
}

2.2 查询操作

查询操作可以使用selectByIdselectListselectPage等方法,示例代码如下:

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

// 根据ID查询
User user = userMapper.selectById(1L);

// 根据条件查询
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getUsername, "Tom");
List<User> userList = userMapper.selectList(queryWrapper);

// 分页查询
Page<User> page = new Page<>(1, 10);
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByDesc(User::getAge);
IPage<User> resultPage = userMapper.selectPage(page, queryWrapper);
List<User> userList = resultPage.getRecords();

2.3 更新操作

更新操作可以使用updateById方法,示例代码如下:

User user = new User();
user.setId(1L);
user.setUsername("Jerry");
user.setPassword("654321");
user.setAge(20);

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int result = userMapper.updateById(user);
if (result > 0) {
    System.out.println("更新成功");
}

2.4 删除操作

删除操作可以使用deleteByIddeleteBatchIdsdelete等方法,示例代码如下:

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

// 根据ID删除
int result = userMapper.deleteById(1L);
if (result > 0) {
    System.out.println("删除成功");
}

// 根据条件删除
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getUsername, "Tom");
int result = userMapper.delete(queryWrapper);
if (result > 0) {
    System.out.println("删除成功");
}

3. 拓展内容

除了官方提供的基本CRUD操作外,MyBatis-Plus还提供了许多其他功能和拓展,以下是一些常用的拓展内容:

3.1 自定义SQL

如果需要自定义SQL语句,可以使用BaseMapper提供的selectListselectByIdinsertupdateByIddeleteById等方法的重载版本,传入Wrapper对象和RowBounds对象进行自定义查询和分页。

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

// 自定义SQL查询
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(User::getId, User::getUsername)
            .orderByAsc(User::getAge);
List<User> userList = userMapper.selectList(queryWrapper, new RowBounds(0, 10));

// 自定义SQL插入
User user = new User();
user.setUsername("CustomUser");
user.setPassword("password");
user.setAge(25);
int result = userMapper.insert(user, new InsertWrapper<User>().setSql("INSERT INTO user(username, password, age) VALUES(#{username}, #{password}, #{age})"));

// 自定义SQL更新
User updateUser = new User();
updateUser.setId(1L);
updateUser.setUsername("UpdatedUser");
updateUser.setPassword("updatedPassword");
int result = userMapper.updateById(updateUser, new UpdateWrapper<User>

3.2 逻辑删除

MyBatis-Plus提供了逻辑删除功能,可以通过配置实体类和数据库表字段实现。逻辑删除是指在数据库中将记录的删除标志位设置为已删除,而不是物理删除记录。这样可以避免误删除数据,同时也可以满足一些特殊需求,例如数据恢复、数据审计等。

要使用逻辑删除功能,需要在实体类上使用@TableLogic注解标识删除标志位字段,并在Mapper接口上使用@Mapper注解的logicDelete属性启用逻辑删除功能。示例代码如下:

@Data
@TableName("user")
@TableLogic(value = "deleted", delval = "1")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String username;
    private String password;
    private Integer age;
    private Integer deleted;
}

@Mapper(logicDelete = true)
public interface UserMapper extends BaseMapper<User> {
}

在实体类上使用@TableLogic注解指定删除标志位字段和已删除值,在Mapper接口上使用@Mapper注解的logicDelete属性启用逻辑删除功能。这样就可以使用deleteByIddeleteBatchIdsdelete等方法进行逻辑删除操作。

3.3 乐观锁

MyBatis-Plus提供了乐观锁功能,可以通过配置实体类和数据库表字段实现。乐观锁是一种并发控制策略,它假设多个事务并发执行时不会发生冲突,每个事务在提交时都会验证其操作的数据是否已经被其他事务修改过。如果发现数据已经被修改,则当前事务会回滚,避免了数据不一致的问题。

要使用乐观锁功能,需要在实体类上使用@Version注解标识版本号字段,并在Mapper接口上使用@Mapper注解的optimisticLocker属性启用乐观锁功能。示例代码如下:

@Data
@TableName("user")
@Version
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String username;
    private String password;
    private Integer age;
    private Integer version;
}

@Mapper(optimisticLocker = true)
public interface UserMapper extends BaseMapper<User> {
}

在实体类上使用@Version注解标识版本号字段,在Mapper接口上使用@Mapper注解的optimisticLocker属性启用乐观锁功能。这样就可以使用updateById等方法进行乐观锁更新操作。

3.4 全局拦截器

MyBatis-Plus提供了全局拦截器功能,可以通过实现Interceptor接口自定义拦截器,并在配置文件中注册拦截器。全局拦截器可以拦截所有的SQL语句,并在SQL执行前后进行一些自定义操作,例如记录日志、权限校验等。

示例代码如下:

@Component
@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})})
public class MyInterceptor implements Interceptor {
    @Override
    public InterceptResult intercept(Invocation invocation) throws Throwable {
        // 在SQL执行前进行一些自定义操作
        System.out.println("Before SQL: " + invocation.getTarget());

        // 执行SQL语句
        Object result = invocation.proceed();

        // 在SQL执行后进行一些自定义操作
        System.out.println("After SQL: " + invocation.getTarget());

        return InterceptResult.success(result);
    }
}

实现Interceptor接口,并使用@Intercepts注解标识拦截的方法和参数类型。在intercept方法中进行自定义操作,并使用invocation.proceed()执行SQL语句。最后返回InterceptResult.success(result)表示拦截器执行成功。

在配置文件中注册拦截器,示例代码如下:

<mybatis-plus>
    <configuration>
        <interceptors>
            <interceptor class="com.example.MyInterceptor"/>
        </interceptors>
    </configuration>
</mybatis-plus>

mybatis-plus标签中配置configuration标签,在configuration标签中配置interceptors标签,在interceptors标签中配置自定义拦截器类。

3.5 代码生成器

MyBatis-Plus提供了代码生成器功能,可以通过配置文件自动生成实体类、Mapper接口、Service接口和Controller接口等代码。代码生成器可以大大提高开发效率,避免重复劳动。

示例代码如下:

<mybatis-plus-generator>
    <global-config>
        <output-dir>D:\code\mybatis-plus-generator\src\main\java</output-dir>
        <author>zhangsan</author>
        <open>false</open>
    </global-config>
    <data-source>
        <url>jdbc:mysql://localhost:3306/mybatis_plus</url>
        <username>root</username>
        <password>123456</password>
        <driver-class-name>com.mysql.jdbc.Driver</driver-class-name>
    </data-source>
    <package-info>
        <module-name>user</module-name>
        <parent>com.example</parent>
    </package-info>
    <strategy>
        <table-prefix>t_</table-prefix>
        <entity-lombok-model>true</entity-lombok-model>
        <rest-controller-style>true</rest-controller-style>
        <controller-mapping-hyphen-style>true</controller-mapping-hyphen-style>
        <include>t_user</include>
    </strategy>
</mybatis-plus-generator>

mybatis-plus-generator标签中配置代码生成器的全局配置、数据源配置、包信息配置和策略配置。在global-config标签中配置输出目录、作者信息和是否自动打开生成的文件夹。在data-source标签中配置数据库连接信息。在package-info标签中配置包名信息。在strategy标签中配置表名前缀、实体类是否使用Lombok注解、Controller接口是否使用RESTful风格和需要生成的表名。

运行代码生成器后,会自动生成实体类、Mapper接口、Service接口和Controller接口等代码。

4. 总结

MyBatis-Plus是一个非常强大的ORM框架,它提供了丰富的CRUD操作和分页查询等功能,同时也提供了许多其他功能和拓展,例如自定义SQL、逻辑删除、乐观锁、全局拦截器和代码生成器等。使用MyBatis-Plus可以大大提高开发效率,同时也可以满足一些特殊需求。

到此这篇关于Mybatis-plus对单表操作的封装实现的文章就介绍到这了,更多相关Mybatisplus 单表操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文教会Java新手使用Spring MVC中的查询字符串和查询参数

    一文教会Java新手使用Spring MVC中的查询字符串和查询参数

    在使用springMVC框架构建web应用,客户端常会请求字符串、整型、json等格式的数据,这篇文章主要给大家介绍了关于通过一文教会Java新手使用Spring MVC中的查询字符串和查询参数的相关资料,需要的朋友可以参考下
    2024-01-01
  • Java中线程状态+线程安全问题+synchronized的用法详解

    Java中线程状态+线程安全问题+synchronized的用法详解

    这篇文章主要介绍了Java中线程状态+线程安全问题+synchronized的用法详解,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • 2020年编程选Java的8大理由,JAVA前景如何

    2020年编程选Java的8大理由,JAVA前景如何

    这篇文章主要介绍了2020年编程选Java的8大理由,JAVA前景如何,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • IntelliJ IDEA 2021.3永久最新激活至2099年(亲测有效)

    IntelliJ IDEA 2021.3永久最新激活至2099年(亲测有效)

    最新版idea2021.3已出来,很多网友迫不及待的要升级idea2021最新版,今天小编抽空给大家整理了一篇教程关于idea2021.3最新激活教程,本文以idea2021.2.3为例通过图文并茂的形式给大家分享激活详细过程,感兴趣的朋友参考下吧
    2020-12-12
  • 设置Myeclipse中的代码格式化、注释模板及保存时自动格式化

    设置Myeclipse中的代码格式化、注释模板及保存时自动格式化

    这篇文章主要介绍了设置Myeclipse中的代码格式化、注释模板及保存时自动格式化方法,需要的朋友可以参考下
    2014-10-10
  • Maven使用方法详及方式详细介绍

    Maven使用方法详及方式详细介绍

    使用maven仓库的话需要从网上下载maven的包,比如“apache-maven-3.5.4-bin.tar”,下载完成之后解压,在解压的文件夹中的conf目录下的settings.xml文件夹下就可以配置maven远程仓库和本地仓库的地址
    2022-11-11
  • spring boot 实现热部署的几种方式及配置方法

    spring boot 实现热部署的几种方式及配置方法

    这篇文章主要介绍了spring boot 实现热部署的几种方式及配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-05-05
  • Java利用字符流轻松处理文本数据

    Java利用字符流轻松处理文本数据

    在Java中,文本数据是经常处理的一种数据类型,而字符流就是用来处理文本数据的一种流,下面就为大家介绍一下Java字符流的基本概念、常用类和方法,以及如何使用字符流来读写文件吧
    2023-09-09
  • MyBatis插件实现SQL执行耗时监控

    MyBatis插件实现SQL执行耗时监控

    MyBatis插件(Plugin)是其框架扩展性的核心,本文深入剖析插件实现原理,手把手教你开发企业级SQL监控插件,有需要的小伙伴可以了解下
    2025-12-12
  • spring-boot-maven-plugin:unknown的完美解决方法

    spring-boot-maven-plugin:unknown的完美解决方法

    这篇文章主要介绍了spring-boot-maven-plugin:unknown的完美解决方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11

最新评论