内容简介:OK,预防针打过了,开始正文吧——相信大家使用Mybatis时代码是这样写的:
Mybatis 3.5 发布有段时间了,终于支持了 Optional ,这么实用的特性,竟然还没人安利……于是本文出现了。
文章比较简单,但非常实用,因为能大量简化恶心的判空代码。
WARNING
由于本文非常简(low)单(比),我相信又会有类似如下的大佬出现(最近莫名其妙地被若干大佬喷,也不知道得罪谁了,必须高能预警一下,免得脏了大佬们的眼睛):
- 嫌低级喷:”这么简单文章也好意思写,没有源码分析好意思拿出来!”——我源码分析的文章也有小几十篇了,阅读量更差。而且我写文也不纯粹迎合观众,我觉得有用,有价值,就总结下,以后自己也好备忘,仅此而已。
- 秀优越感喷:”你的文章没有价值,看看我这篇”——真人真事,在某技术群讨论,吐槽了一圈后,贴出自己同类文章(带源码分析),对这种只能献上自己的膝盖,尊称100声大佬。
- 无脑喷:”你的文章就是一坨屎”——你才是一坨屎,没人逼着你看啊,自己找不开心啊咋地。
OK,预防针打过了,开始正文吧——
Before
相信大家使用Mybatis时代码是这样写的:
@Mapper
public interface UserMapper {
@Select("select * from user where id = #{id}")
User selectById(Long id);
}
然后,业务代码是这样写的:
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/{id}")
public User findById(@PathVariable Long id) {
User user = this.userMapper.selectById(id);
if(user == null) {
// 抛异常,或者做点其他事情
}
}
}
After
Mybatis 3.5支持Optional啦!你的代码可以这么写了:
@Mapper
public interface UserMapper {
@Select("select * from user where id = #{id}")
Optional<User> selectById(Long id);
}
然后,业务代码可以变成这样:
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/{id}")
public User findById(@PathVariable Long id) {
return this.userMapper.selectById(id)
.orElseThrow(() -> new IllegalArgumentException("This user does not exit!"));
}
}
从此,再也不需要像以前一样写一大堆代码去判断空指针了。
至于 Optional 怎么使用,本文不作赘述——JDK 12都发布了,你要我普及JDK 8的”新特性”吗?大家自行百度吧,百度很多了。关键词: Java 8 Optional 。
思考
Mybatis 已支持 Optional , Mybatis Spring Boot Starter 也已跟进,引入如下依赖即可:
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency>
然而, Mybatis 的配套设施尚未跟进——
- 官方提供的
Mybatis Generator插件还未跟进,这意味着目前使用该插件生成的代码依然不会返回Optional,例如selectByPrimaryKey,返回的依然是实体类,而非Optional<实体类>。 - 国内最流行的第三方Mybaits增强 Mybatis通用Mapper ,及其配套的 通用Mapper专用生成器 都尚未支持
Optional,笔者提Issue,详见: 建议支持Optional ,其实想支持很简单,只需稍作修改即可。看最近时间,考虑提交PR。
balabala
Spring Data (jpa、 redis 、mongo…)花了很大力气重构(很多包名都换了,API名称也改了),率先支持了 Optional ,不得不说,在 Java 世界, Spring 确实走在前面,引领着Java圈子的潮流。
配套代码
- GitHub: https://github.com/eacdy/spring-boot-study/tree/master/spring-boot-mybatis-optional
- Gitee: https://gitee.com/itmuch/spring-boot-study/tree/master/spring-boot-mybatis-optional
本文首发
http://www.itmuch.com/other/mybatis-optional-support/
干货分享
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- xmake v2.2.3 发布, 大量新特性支持
- Swift 4.1 正式发布,新增更多泛型特性支持
- Firefox 浏览器开始支持 Windows 10 原生通知特性
- Angular 7支持虚拟滚动、拖放、CLI Prompts等特性
- WildFly 18 的安全特性预览,将支持 TLS 1.3
- WildFly 18 的安全特性预览,将支持 TLS 1.3
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
REST实战
Jim Webber、Savas Parastatidis、Ian Robinson / 李锟、俞黎敏、马钧、崔毅 / 东南大学出版社 / 2011-10 / 78.00元
为何典型的企业项目无法像你为web所开发的项目那样运行得如此平滑?对于建造分布式和企业级的应用来说,rest架构风格真的提供了一个可行的替代选择吗? 在这本富有洞察力的书中,三位soa专家对于rest进行了讲求实际的解释,并且通过将web的指导原理应用到普通的企业计算问题中,向你展示了如何开发简单的、优雅的分布式超媒体系统。你将会学习到很多技术,并且随着一家典型的公司从最初的小企业逐渐成长为......一起来看看 《REST实战》 这本书的介绍吧!