登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
登录
注册
代码拉取完成,页面将自动刷新
开源项目
>
数据库相关
>
数据库开发包
&&
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
2.3K
Star
11.6K
Fork
3.5K
GVP
baomidou
/
mybatis-plus
代码
Issues
13
Pull Requests
0
统计
流水线
服务
JavaDoc
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
我知道了,不再自动展开
223
【新特性】新增Db类,不用每张表都新建Service及其实现类了
已合并
阿超:3.0
baomidou:3.0
阿超
创建于 2022-04-18 14:01
克隆/下载
HTTPS
SSH
复制
下载 Email Patch
下载 Diff 文件
本次`PR`包含两个部分 对`MP`现有的功能进行了封装 - 第一部分:减少了百分之`20`的步骤(不用每张表都新建`Service`及其实现类了) - 第二部分:封装了`ChainWrapper`,不用再强制传入`baseMapper`,可以传入实体类,对应去`Mybatis`中获取`mapper`并执行 ### 第一部分,新增`Db` > 这个劳动节,我选择投入自己的时间,为各位广大打工人送上一份自己珍藏多年的代码,让大家省下更多时间 在使用mybatis-plus进行开发中,我不禁产生一个疑问,为什么?每次使用我将会产生这些代码: ```java private UserInfoService userInfoService; private UserDepartmentService userDepartmentService; private UserPositionService userPositionService; private UserOrderService userOrderService; ``` 我告诉自己,这是为了引用`SpringBean`,让其保持单例运行,但貌似这些`Service`,大多都是空实现,这是`mybatis-plus`开发者们共同的努力,让我能不用写这些`CRUD`的代码,但仍然每次需要去新建一个`XXXService`实现`IService`,然后再写一个实现类`XXXServiceImpl`继承`ServiceImpl<XXXMapper,XXX>` 我逐渐接受这种方式,比起自己实现,有了`mybatis-plus`,能让我进行单表的几乎所有操作,只需要每加一张表,用代码生成器生成`Entity`、`Mapper`、`Service`、`ServiceImpl`即可,两年里,我一直如此使用 直到近期,我发现也许`Service`和`ServiceImpl`所代表的业务层,要么是无函数,要么是有大量构建参数条件的函数(这些也许应该放到`Mapper`层,只是因为需要批量操作等,不得不放到`Service`),并且这么多无函数的`Service`,让项目整体看起来很臃肿 因此我通过研读`Mybatis-plus`源码,发现也许并不需要一个实体一个`Service`(就像一些很小的关联表),写下了这个类 `com.baomidou.mybatisplus.extension.toolkit.Db` **它能做什么?** 可以通过静态方式调用对应`Service`操作,就像这样: ```java Entity entity = new Entity(); entity.setName("ruben"); Db.save(entity); ``` 并且你不需要对应的`Service`接口以及其实现  它几乎包含了`IService`中所有方法(除了ktolin,这块暂时还未写) 并对应涵盖了测试用例 `com.baomidou.mybatisplus.test.toolkit.DbTest`  ### 第二部分,`ChainWrapper`更新 我们以前在项目中使用`ChainWrapper` 使用自身`Mapper`构建`ChainWrapper`非常方便,例如`UserServiceImpl<BaseMapper<User>,User>` ```java List<User> userList = lambdaQuery().eq(User::getId,1L).list(); ``` 使用其他`Mapper`构建`ChainWrapper`会比较麻烦,例如`UserServiceImpl<BaseMapper<User>,User>` ```java @Resource private RoleMapper roleMapper; // ... List<Role> roleList = ChainWrappers.queryChain(roleMapper).list(); // ``` 如果多起来了呢 ```java @Resource private RoleMapper roleMapper; @Resource private DepartmentMapper departmentMapper; @Resource private PermissionMapper permissionMapper; // ... List<Role> roleList = ChainWrappers.queryChain(roleMapper).list(); List<Department> departmentList = ChainWrappers.queryChain(departmentMapper).list(); List<Permission> permissionList = ChainWrappers.queryChain(permissionMapper).list(); // ``` 如果封装工具类?静态函数? ```java // applicationContext是项目初始化时丢进去的 private static RoleMapper roleMapper = applicationContext.getBean(RoleMapper.class); private static DepartmentMapper departmentMapper = applicationContext.getBean(DepartmentMapper.class); private static PermissionMapper roleMapper = applicationContext.getBean(RoleMapper.class); public static Result function(){ List<Role> roleList = ChainWrappers.queryChain(roleMapper).list(); List<Department> departmentList = ChainWrappers.queryChain(departmentMapper).list(); List<Permission> permissionList = ChainWrappers.queryChain(permissionMapper).list(); } ``` 现在只需传入`class`即可! ```java List<Role> roleList = ChainWrappers.queryChain(Role.class).list(); List<Department> departmentList = ChainWrappers.queryChain(Department.class).list(); List<Permission> permissionList = ChainWrappers.queryChain(Permission.class).list(); ```
怎样手动合并此 Pull Request
git checkout 3.0
git pull https://gitee.com/VampireAchao/mybatis-plus.git 3.0
git push origin 3.0
评论
24
提交
7
文件
13
检查
代码问题
0
批量操作
展开设置
折叠设置
审查
Code Owner
审查人员
Dervish
tld2018
DevYang
devyang
小锅盖
TaoYu_cd
yuxiaobin
hadoobing
zengzhihong
zengzhihong
凯凯大魔王
kaikaidamowang
东平王北星
ls9527
keep
zengzefeng
阿超
VampireAchao
青苗
jobob
miemie
miemieyaho
你有医保你先上
h825944942
未设置
最少人数
0
测试
Dervish
tld2018
DevYang
devyang
小锅盖
TaoYu_cd
yuxiaobin
hadoobing
zengzhihong
zengzhihong
凯凯大魔王
kaikaidamowang
东平王北星
ls9527
keep
zengzefeng
阿超
VampireAchao
青苗
jobob
miemie
miemieyaho
你有医保你先上
h825944942
未设置
最少人数
0
优先级
不指定
严重
主要
次要
不重要
标签
标签管理
未设置
关联 Issue
未关联
Pull Request 合并后将关闭上述关联 Issue
里程碑
未关联里程碑
mybatis-plus 4.0 重构计划
参与者
(22)
Cherry-pick 提交
Cherry-pick 可以将
特定提交(Commit)
从某个分支挑选并应用到另一个分支,实现快速集成特定更改,而无需合并整个分支。
请选择应用 Cherry-pick 提交 (Commit) 的目标分支
新建分支
当前账号不存在 Fork 仓库,建议 cherry-pick 到 Fork 仓库。
Fork 仓库
提交列表
Commit SHA
Commit Message
基于 Cherry-pick 后的分支发起 Pull Request
取消
Cherry-pick
Java
1
https://gitee.com/baomidou/mybatis-plus.git
git@gitee.com:baomidou/mybatis-plus.git
baomidou
mybatis-plus
mybatis-plus
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册