详解关于mybatis-plus中Service和Mapper的分析
在后端开发过程中,如果有用到mybatis-plus,肯定会发现在其内部存在着两种数据库操作接口,Iservice和BaseMapper,如果只是用增删改查会发现两者的功能是一致的,除了方法名称有所不同,其他的基本相似。对此,我颇为好奇,便打开两个接口的源码进行对比。
先演示一下基本开发中的继承关系,手动创建的Service继承于ServiceImpl,并加载自己创建的Mapper
@Service public class RestDeptService extends ServiceImpl<RestDeptMapper, RestDept> { @Resource private RestDeptMapper restDeptMapper; } public interface RestDeptMapper extends BaseMapper<RestDept> { }
如上,就是一般开发的基本模版代码,足以满足各种需求功能,但点开源码时,便进入新世界的大门。先看一下继承结构
这样看,是不是很神奇,我们继承的ServiceImpl依旧实现了BaseMapper接口和Iservice接口,这就感觉有点啰嗦了,明明我们单独写了RestDeptMapper,并且继承了BaseMapper,现在ServiceImpl还是实现了BaseMapper,那我直接一个Service用下来不就行了,创建两套类,功能相似,还容易混乱,代码结构冗余。
本着“存在即合理”的理念,我们对比一下两个接口的方法。
果然,Service简直是BaseMapper的大扩充,不但包含了所有基本方法,还加入了很多批处理功能,我们可以看一下官网对这两种接口的说明。
官网链接:https://mp.baomidou.com/guide/crud-interface.html
Service CRUD 接口
说明:
- 通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用
get 查询单行
remove 删除
list 查询集合
page 分页
前缀命名方式区分Mapper
层避免混淆, - 泛型
T
为任意实体对象 - 建议如果存在自定义通用 Service 方法的可能,请创建自己的
IBaseService
继承Mybatis-Plus
提供的基类 - 对象
Wrapper
为 条件构造器
Mapper CRUD 接口
说明:
- 通用 CRUD 封装BaseMapper接口,为
Mybatis-Plus
启动时自动解析实体表关系映射转换为Mybatis
内部对象注入容器 - 泛型
T
为任意实体对象 - 参数
Serializable
为任意类型主键Mybatis-Plus
不推荐使用复合主键约定每一张表都有自己的唯一id
主键 - 对象
Wrapper
为 条件构造器
最后本文还是比较水的,只是简单的看了一下结构而已,没有太多的深入,总结一下,以我平时粘贴复制的经验来看,Service虽然加入了数据库的操作,但还是以业务功能为主,而更加复杂的SQL查询,还是要靠Mapper对应的XML文件里去编写SQL语句。
到此这篇关于详解关于mybatis-plus中Service和Mapper的分析的文章就介绍到这了,更多相关mybatis-plus中Service和Mapper内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
MyBatis-Plus 通用IService使用详解
一.引言 MP除了通用的Mapper还是通用的Servcie层,这也减少了相对应的代码工作量,把通用的接口提取到公共.其实按照MP的这种思想,可以自己也实现一些通用的Controller. 今天是周天,作为一名码农来说,这里小编提醒大家周末有空还是多出去运动一下. 生命在于运动,生命诚可贵. 二. 小编瞎扯 相信有和小编一样的朋友,在大城市独自漂泊,感觉就凭借自己内心那一点点的火苗,想要燃烧起来. 小编在上海这些年,不慌也不忙,从开始每天厌恶工作,到现在开开心心的上班,回顾自己的成长除了存款,其
-
详解mybatis-plus的 mapper.xml 路径配置的坑
mybatis-plus今天遇到一个问题,就是mybatis 没有读取到mapper.xml 文件. 特此记录一下,问题如下: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.husy.mapper.SystemUserMapper.findUserByName at com.baomidou.mybatisplus.core.override.MybatisMapperMe
-
Mybatis-Plus BaseMapper的用法详解
1.如何使用BaseMapper进行数据库的操作. 2.使用BaseMapper进行插入实体时如何让UUID的主键自动生成. Student实体类,其中id属性主键为UUID package com.huixiaoer.ant.api.model.bean; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; public class Stud
-
MyBatis-Plus通过插件将数据库表生成Entiry,Mapper.xml,Mapper.class的方式
创建maven项目,修改pom.xml文件,如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mave
-
mybatis-plus批处理IService的实现示例
一.pom文件引入 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus
-
mybatis-plus生成mapper扩展文件的方法
阅读提示 具有mybatis基础,熟练使用mybatis-plus. 概述 我们都知道,mybatis-plus是一个mybatis的增强工具,为简化开发.提高效率而生,我们经常使用mybatis-plus生成controller.service.mapper等文件,对于简单的curd,可以直接使用mybatis-plus封装好的方法. 然而,我们经常有这样那样的需求,需要额外编写sql实现,如果直接在mapper.xml文件中编写,一旦数据库表结构改动需要重新生成文件就悲催了,不得
-
详解关于mybatis-plus中Service和Mapper的分析
在后端开发过程中,如果有用到mybatis-plus,肯定会发现在其内部存在着两种数据库操作接口,Iservice和BaseMapper,如果只是用增删改查会发现两者的功能是一致的,除了方法名称有所不同,其他的基本相似.对此,我颇为好奇,便打开两个接口的源码进行对比. 先演示一下基本开发中的继承关系,手动创建的Service继承于ServiceImpl,并加载自己创建的Mapper @Service public class RestDeptService extends ServiceImpl
-
SpringBoot详解整合MyBatis过程中可能遇到的问题
尽量不要用 jUnit 提供的单元测试 提一个要求尽量使用SpringBoot 提供的测试类进行测试,能够自动扫描组件以及使用容器中的bean对象 还有如果有组件 中存在注入对象的话,那么必须在SpringBoot容器中取出 这个组件,进而使用注入的对象的功能!!! 今天有个错误,花了很长时间来解决,最后发现是一个很低级很基础的错误! 这是mapper接口,使用@mapper 相当于将接口的代理对象注册进入bean中,但是上下文中找不到(其实是正常) 因为 @Mapper 这个注解是 Mybat
-
详解SpringBoot+Mybatis实现动态数据源切换
业务背景 电商订单项目分正向和逆向两个部分:其中正向数据库记录了订单的基本信息,包括订单基本信息.订单商品信息.优惠卷信息.发票信息.账期信息.结算信息.订单备注信息.收货人信息等:逆向数据库主要包含了商品的退货信息和维修信息.数据量超过500万行就要考虑分库分表和读写分离,那么我们在正向操作和逆向操作的时候,就需要动态的切换到相应的数据库,进行相关的操作. 解决思路 现在项目的结构设计基本上是基于MVC的,那么数据库的操作集中在dao层完成,主要业务逻辑在service层处理,controll
-
详解如何在项目中应用SpringSecurity权限控制
目录 1.Spring Security环境准备 2.实现认证和授权 3.在控制器上实现注解鉴权 4.请求获取当前登录的用户名信息 5.用户退出 要进行认证和授权需要前面课程中提到的权限模型涉及的7张表支撑,因为用户信息.权限信息.菜单信息.角色信息.关联信息等都保存在这7张表中,也就是这些表中的数据是我们进行认证和授权的依据.所以在真正进行认证和授权之前需要对这些数据进行管理,即我们需要开发如下一些功能: 1.权限数据管理(增删改查) 2.菜单数据管理(增删改查) 3.角色数据管理(增删改查.
-
详解ASP.NET Core中配置监听URLs的五种方式
默认情况下,ASP. NET Core应用会监听一下2个Url: http://localhost:5000 https://localhost:5001 在本篇博文中,我将展示如何使用五种不同的方式改变应用监听的URLs. 在ASP.NET Core项目启动时,有多种配置监听Url的方式,在我之前的一篇博客中,已经展示了在ASP.NET Core 1.0中如何应用不同的方式配置,在ASP.NET Core 3.x中,大部分方式还是一样的. UseUrls() - 在Program.cs配置程序
-
详解mybatis-plus实体类中字段和数据库中字段名不对应解决办法
在使用mybatis或者mybatis-plus时候,有些时候会出现数据库的字段名和实体类的字段名不一致的情况,如果运行那么这个字段就会无法进行自动映射而报错.这里就以我的数据库name字段名和这里的实体类的u_name字段名为例. 解决办法有以下三种 方法一: 将数据库中的字段和实体类中的字段名修改成一样的名字 方法二: 如果是自定以mapper.xml文件中手写的sql查询语句,可以给字段起一个别名例如这里就可以写成select name as u_name from- 方法三: 使用注解@
-
详解SPI在Dubbo中的应用
目录 一.概述 二.JDK自带SPI 2.1.代码示例 2.2.简单分析 三.SPI与双亲委派 3.1.SPI加载到何处 3.2.SPI是否破坏了双亲委派 四.Dubbo SPI 4.1.基本概念 4.2.代码示例 4.3.源码分析 五.总结 一.概述 SPI 全称为 Service Provider Interface,是一种模块间组件相互引用的机制.其方案通常是提供方将接口实现类的全名配置在classPath下的指定文件中,由调用方读取并加载.这样需要替换某个组件时,只需要引入新的JAR包并
-
详解Kotlin Android开发中的环境配置
详解Kotlin Android开发中的环境配置 在Android Studio上面进行安装插件 在Settings ->Plugins ->Browse repositores.. ->kotlin 安装完成后重启Android Studio就生效了 如图所示: 在Android Studio中做Kotlin相关配置 (1)在根目录 的build.gradle中进行配置使用,代码如下: buildscript { ext.kotlin_version = '1.1.2-4' repos
-
详解Golang 与python中的字符串反转
详解Golang 与python中的字符串反转 在go中,需要用rune来处理,因为涉及到中文或者一些字符ASCII编码大于255的. func main() { fmt.Println(reverse("Golang python")) } func reverse(src string) string { dst := []rune(src) len := len(dst) var result []rune result = make([]rune, 0) for i := le
-
详解闭包解决jQuery中AJAX的外部变量问题
详解闭包解决jQuery中AJAX的外部变量问题 在AJAX中,我们经常都要使用外部变量,经常会多次使用,如下代码 function getCarInfo(){ for(var i=0;i<4;i++){ var carId = $("#carList0"+i+" #carId").val(); var request = { city: city, carId: carId }; $.ajax({ url:"enquiry", type:
随机推荐
- Angular.js中ng-include用法及多标签页面的实现方式详解
- 使用 powershell 创建虚拟机
- DB2数据同步方面的经验
- SQLite教程(十三):C语言编程实例代码(1)
- JavaScript事件学习小结(五)js中事件类型之鼠标事件
- Linux的wget命令详解
- java 使用JDOM解析xml文件
- javascript使用prototype完成单继承
- php使用curl下载指定大小的文件实例代码
- 基于python的七种经典排序算法(推荐)
- Android动画之3D翻转效果实现函数分析
- MySQL prepare原理详解
- 详解ASP.NET MVC 常用扩展点:过滤器、模型绑定
- python集合用法实例分析
- 巧妙的最大化动态载入IFrame的方法
- jQuery快速上手:写jQuery与直接写JS的区别详细解析
- 当前页禁止复制粘贴截屏代码小集
- Java多线程中的单例模式两种实现方式
- C语言中网络地址与二进制数之间转换的函数小结
- java多线程抓取铃声多多官网的铃声数据