超实用的 Mybatis 3.5 新特性

击蓝色“程序猿DD”关注我哟

加个“星标”,不忘签到哦

640?wx_fmt=jpeg

来源:IT牧场



Mybatis 3.5 发布有段时间了,终于支持了 Optional ,这么实用的特性,竟然还没人安利……于是本文出现了。

新特性比较简单,但非常实用,因为能大量简化恶心的判空代码。


TIPS:简单起见

•本文直接用Mybaits的注解式编程,不把SQL独立放在xml文件了•省略Service,直接Controller调用DAO

Before

相信大家使用Mybatis时代码是这样写的:

@Mapperpublic 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啦!你的代码可以这么写了:

@Mapperpublic 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[1] ,及其配套的 通用Mapper专用生成器[2] 都尚未支持Optional ,笔者提Issue,详见:建议支持Optional[3] ,其实想支持很简单,只需稍作修改即可。看最近时间,考虑提交PR。

balabala

Spring Data(jpa、redis、mongo…)花了很大力气重构(很多包名都换了,API名称也改了),率先支持了 Optional ,不得不说,在Java世界, Spring 确实走在前面,引领着Java圈子的潮流。

配套代码

GitHub[4]

Gitee[5]

References

[1] Mybatis通用Mapper: https://github.com/abel533/Mapper
[2] 通用Mapper专用生成器: https://github.com/abel533/Mapper/wiki/4.1.mappergenerator
[3] 建议支持Optional: https://github.com/abel533/Mapper/issues/558
[4] GitHub: https://github.com/eacdy/spring-boot-study/tree/master/spring-boot-mybatis-optional
[5] Gitee: https://gitee.com/itmuch/spring-boot-study/tree/master/spring-boot-mybatis-optional


推荐阅读


号外:最近整理了之前编写的一系列内容做成了PDF,关注我并回复相应口令获取:

001 :领取《Spring Boot基础教程》

002 :领取《Spring Cloud基础教程》



活动介绍自律到极致-人生才精致:第3期

活动奖励:《Spring Boot编程思想》

扫描下面二维码签到参与

640?wx_fmt=png

关注我,加个星标,不忘签到哦~


2019

与大家聊聊技术人的斜杠生活

640?wx_fmt=png


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值