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) { // 抛异常,或者做点其他事情 } }}

AfterMybatis3.5支持Optional啦!你的代码可以这么写了:

@Mapperpublic interface UserMapper {    @Select("select * from user where id = #{id}")    Optional 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怎么使用,本文不作赘述——JDK12都发布了,你要我普及JDK8的”新特性”吗?大家自行百度吧,百度很多了。关键词:Java 8 Optional。

思考

Mybatis已支持Optionalmybatis代码生成器,Mybatis Spring Boot Starter也已跟进,引入如下依赖即可:

  org.mybatis.spring.boot  mybatis-spring-boot-starter  2.0.0

然而,Mybatis的配套设施尚未跟进——

•官方提供的Mybatis Generator插件还未跟进,这意味着目前使用该插件生成的代码依然不会返回Optional,例如selectByPrimaryKey,返回的依然是实体类,而非Optional。•国内最流行的第三方Mybaits增强Mybatis通用Mapper[1],及其配套的通用Mapper专用生成器[2]都尚未支持Optional,笔者提Issue,详见:建议支持Optional[3]mybatis代码生成器,其实想支持很简单,只需稍作修改即可。看最近时间,考虑提交PR。

mybatis主键生成策略_纹身生成图片器_mybatis代码生成器

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

配套代码

•GitHub[4]

•Gitee[5]

References

纹身生成图片器_mybatis主键生成策略_mybatis代码生成器

[1]Mybatis通用Mapper:

[2]通用Mapper专用生成器:

[3]建议支持Optional:

[4]GitHub:

[5]Gitee:

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: muyang-0410