当前位置: 首页 > news >正文

mybatis-plus-jpa-support

介绍

MybatisPlus 拥有像 Jpa 一样的直接在 mapper 接口中定义方法名(如 findByUserNameOrderByCreatedAsc )查询的能力(无需配置xml)

适用场景

假设有一个简单的场景,根据姓名查询用户并按照创建时间排序,如果用 mybatisplus 来写的话,需要用下面的代码来完成:

LambdaQueryWrapper<SysUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.orderByAsc(SysUser::getCreated);
lambdaQueryWrapper.like(SysUser::getUserName, "赵");
mapper.selectList(lambdaQueryWrapper);

但是如果用 Jpa 来实现,代码就很简单了,只需要在 Repository接口 定义下面的方法,在 service 里直接就可以调用:

List<SysUser> findByUserNameOrderByCreatedAsc(String userName);

所以说,在某些场景下, Jpa 确实是比 MybatisPlus 更简单实用的。为了让 Mybatisplus 拥有 Jpa 的能力,你的项目中非常需要 mybatis-plus-jpa-support !!!

Maven 引入

项目地址:mybatis-plus-jpa-support

<!--基于jdk21,想要低版本的自行下载源码打包-->
<dependency><groupId>com.xiaoyudeguang</groupId><artifactId>mybatis-plus-jpa-support</artifactId><version>1.0.2-SNAPSHOT</version>
</dependency>
使用教程
  1. 启动类声明 @EnableMybatisJpaSupport 注解
import com.xiaoyudeguang.mybatis.jpa.annotation.EnableMybatisJpaSupport;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@MapperScan(basePackages = {"com.**.mapper"})
@EnableMybatisJpaSupport(basePackages = {"com.**.mapper"})
@SpringBootApplication
public class StartApp {public static void main(String[] args) {SpringApplication.run(StartApp.class, args);}
}
  1. 所有 mapper 接口的 @Mapper 注解都要替换为 @com.xiaoyudeguang.mybatis.jpa.support.annotation.Mapper 注解
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xiaoyudeguang.mybatis.jpa.annotation.Mapper;import java.util.List;@Mapper
public interface SysUserMapper extends BaseMapper<SysUser> {List<SysUser> findByUserNoAndUserNameLike(String userNo, String userName);List<SysUser> findAllOrderByUserNoDesc(String userName);List<SysUser> findByUserNameLikeOrderByUserNoDesc(String userName);long countByUserName(String userName);List<SysUser> findByUserNameLike(String userName);List<SysUser> findByUserNameStartingWith(String userName);List<SysUser> findByUserNameContaining(String userName);void deleteByUserName(String userName);
}
  1. Service 中使用
import com.example.mapper.SysUserMapper;
import com.example.model.SysUser;
import jakarta.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserServiceImpl {//注意,这里如果使用@Autowired注解,必须用@Qualifier("sysUserRepository")显示声明@Resourceprivate SysUserMapper sysUserRepository;@Overridepublic List<SysUser> testJpa(String userNo, String userName) {sysUserRepository.findByUserNoAndUserNameLike(userNo, userName);sysUserRepository.findByUserNameLike("findByUserNameLike");sysUserRepository.findAllOrderByUserNoDesc("findAllOrderByUserNoDesc");sysUserRepository.findByUserNameLikeOrderByUserNoDesc("findByUserNameLikeOrderByUserNoDesc");sysUserRepository.findByUserNameStartingWith("findByUserNameStartingWith");sysUserRepository.findByUserNameContaining("findByUserNameContaining");sysUserRepository.countByUserName("countByUserName");sysUserRepository.deleteByUserName("deleteByUserName");return List.of();}
}
  1. 通过继承抽象层 AbstractServiceImpl 类的来简化注入过程
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaoyudeguang.mybatis.jpa.annotation.Mapper;
import com.xiaoyudeguang.mybatis.jpa.web.mapper.AbstractMapper;
import com.xiaoyudeguang.mybatis.jpa.web.service.AbstractService;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.util.StringUtils;/*** AbstractServiceImpl类可以直接复制到项目中当做Service层的抽象类*/
public abstract class AbstractServiceImpl<M extends BaseMapper<T>, T> extends ServiceImpl<M, T> implements AbstractService<M, T>, InitializingBean {@Autowiredprivate M baseMapper;protected M mapper;@Autowiredprotected ApplicationContext context;@Override@SuppressWarnings("unchecked")public void afterPropertiesSet() throws Exception {mapper = baseMapper;Class<?> mapperClass = baseMapper.getClass().getInterfaces()[0];String repositoryName = StringUtils.uncapitalize(mapperClass.getSimpleName().replace("Mapper", "Repository"));if (context.containsBean(repositoryName) && mapperClass.getDeclaredAnnotation(Mapper.class) != null) {mapper = (M) context.getBean(repositoryName);}}
}@Service
public class UserServiceImpl extends AbstractServiceImpl<SysUserMapper, SysUser> implements UserService {@Overridepublic List<SysUser> testJpa(String userNo, String userName) {//mapper接口中的自定义方法mapper.findByUserNoAndUserNameLike(userNo, userName);mapper.findByUserNameLike("findByUserNameLike");mapper.findAllOrderByUserNoDesc("findAllOrderByUserNoDesc");mapper.findByUserNameLikeOrderByUserNoDesc("findByUserNameLikeOrderByUserNoDesc");mapper.findByUserNameStartingWith("findByUserNameStartingWith");mapper.findByUserNameContaining("findByUserNameContaining");mapper.countByUserName("countByUserName");mapper.deleteByUserName("deleteByUserName");return List.of();}}
http://www.xdnf.cn/news/1120897.html

相关文章:

  • 常用的OTP语音芯片有哪些?
  • Spring Boot启动原理:从main方法到内嵌Tomcat的全过程
  • Linux 系统下的 Sangfor VDI 客户端安装与登录完全攻略 (CentOS、Ubuntu、麒麟全线通用)
  • Git LFS 操作处理Github上传大文件操作记录
  • 第一章编辑器开发基础第一节绘制编辑器元素_4输入字段(4/7)
  • Redis集群方案——Redis分片集群
  • 《星盘接口4:银河守护者》
  • 小波变换 | Haar 小波变换
  • 浏览器自动化领域的MCP
  • 实战--Tlias教学管理系统(部门管理)
  • 纯CSS轮播
  • SAP ERP与微软ERP dynamics对比,两款云ERP产品有什么区别?
  • 【第零章编辑器开发与拓展】
  • 不用下载软件也能录屏?Windows 10 自带录屏功能详解
  • Postman、Apifox、Apipost用哪个? 每个的优缺点和综合比较(个人观点)
  • qt多线程的实战使用
  • 【记录】BLE|百度的旧蓝牙随身音箱手机能配对不能连接、电脑能连接不能使用的解决思路(Wireshark捕获并分析手机蓝牙报文)
  • Linux(Ubuntu)硬盘使用情况解析(已房子举例)
  • HTML面试题
  • 消费 Kafka 一个TOPIC数据,插入到另一个KAFKA的TOPIC
  • python学习2
  • ubuntu(22.04)系统上安装 MuJoCo
  • FRP Ubuntu 服务端 + MacOS 客户端配置
  • 微前端架构详解
  • 《C++初阶之STL》【泛型编程 + STL简介】
  • Nacos 技术研究文档(基于 Nacos 3)
  • 基于R语言的极值统计学及其在相关领域中的实践技术应用
  • 迅为八核高算力RK3576开发板摄像头实时推理测试 ppyoloe目标检测
  • 《亿级流量系统架构设计与实战》通用高并发架构设计 读场景
  • 文心4.5开源之路:引领技术开放新时代!