mybatis开发,你用 xml 还是注解?我 pick ... (3)

简介: mybatis开发,你用 xml 还是注解?我 pick ... (3)

个人思考


其实在写这篇文章的时候我就产生了一个思考。



mybatis 为什么要去支持注解呢?


当然,我们都知道,基于注解开发是趋势,给我们简化了非常多的东西。


特别是 SpringBoot 的出现,可以说是注解开发的黄金时代。


遥想当年刚刚入行的时候,开发一个 SSM 项目大多数时间都是在进行 xml 文件的配置。

可以说是很羡慕现在入行的小年轻了,没有真正经历(也许自己搭建过,玩了一下)过被 xml 配置支配的恐惧。


在 xml 时代,大家都是粘来粘去的。而现在基于注解开发了,很多东西都简化了,渐渐的自己也能很轻松的搭建一个可以跑起来的小项目了。


所以,基于注解开发大体上一件很优雅,很好,很值得推广的事情。


为什么说大体上呢?


因为我个人偏见的觉得对于 mybatis 框架来说,没有 xml 文件的 mybatis 是没有灵魂的。


当然,如果你全是简单的 SQL 语句就能实现的功能,你可以用注解开发。但是这个情况,我觉得还是在少数的。


同样,我们可以用注解的形式实现所有 xml 文件能实现的功能。但是我觉得不太优雅。

所以,我觉得一个比较折中的方式是简单 SQL 可以用注解开发,如果是一些有诸如条件判断类的需求的 SQL 还是要写在 xml 文件中。


不要为了拥抱注解,而完全摒弃了 xml 的形式。


你记得吗,在 xml 时代转向注解时代的时候,还有一个经常用到的注解。


有人说这是过渡时代的产物,而在我看来,这更是求同存异的完美体现。


这个注解,就完全的体现最近这句很火的话:


君子美美与共,和而不同。


当然这些都是我在写这篇文章的过程中产生的一些浅显的个人看法而已。不具备参考意义。


骚代码


另外,再给大家分享一个我认为的 mybatis 的骚代码吧。


代码非常的简单明了,很久以前第一次看 mybatis 源码的时候我就是觉得有点“骚”,给我留下了深刻的影响:


org.apache.ibatis.session.defaults.DefaultSqlSession#selectOne(java.lang.String, java.lang.Object)

selectOne 方法:


该方法调用的还是 selectList 方法,但是对返回集合进行了一个判断,如果集合大小为 1,说明就真的是 selectOne ,如果大于 1,则抛出异常。


说真的,如果让我去实现这个功能,我不会一下就想到这个方法,我会去老老实实的写功能,然后对返回值进行判断。写完之后,我可能才会发现。哎,这段代码和 selectList 方法可以复用哦,然后才提取出来,变成这样。


记得很久之前面试,面试官问我对看过的源码中哪段影响深刻的,其中我就说到了这个方法。


总之,我个人觉得很妙。


注意坑


然后再说一个之前踩过的坑吧,还导致了一次紧急上线。


还是拿文中的示例说明:


如果我们把返回值从 Integer 变成 int:


用这个测试用例还是会正常查询出结果:


但是,如果我们查询一个数据库中不存在的人的年龄呢?比如这样:


那么就会抛出这样的错误:


找到对应源码,我们可以看到:


当返回值是 null 的时候,但是方法上的返回值类型又不是包装类型中的一种,也不是 void 类型,则抛出异常。


看一下这个方法,是 native 的:


java.lang.Class#isPrimitive


你想想为什么 mybatis 给你进行了这样的一个判断呢?


那就是如果返回为 null ,自动拆箱的时候会抛出空指针的。


即使 mybatis 帮我们挡了一下,我还是完美的踩了一个坑,写出了空指针异常。


代码是这样的,接收的时候我还是用 Integer 去接收了:


但是接口调用时的返回值我手贱写成了这样:


明白了吧,妥妥的,空指针,没得跑了。


最后说一句(求关注)


人的潜力真的是巨大的,不逼自己一把,我都不知道我这周真的可以把文章写完。


最近这周晚上回来的时间晚一点了,所以周内的晚上一般都没有时间写文章。


最近成都也热起来了,夏天我有时还是需要一小会的午睡,来保证下午的工作状态的。其他的季节我不需要午休,所以现在中午也很少有时间写一会文章了。


算了一下,连上这篇,我已经连续周更 39 周,输出 48 篇原创文章了。

啊,我真是牛皮呀。


周更作者的痛苦与快乐,你想象不到:


点个赞吧,周更很累的,不要白嫖我,需要一点正反馈。


才疏学浅,难免会有纰漏,如果你发现了错误的地方,由于本号没有留言功能,还请你在后台留言指出来,我对其加以修改。


感谢您的阅读,我坚持原创,十分欢迎并感谢您的关注。


我是 why,一个被代码耽误的文学创作者,不是大佬,但是喜欢分享,是一个又暖又有料的四川好男人。


欢迎关注我的公众号【why技术】,这号主要进行一些技术分享:

目录
相关文章
|
2月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
80 2
|
3月前
|
SQL Java 数据库连接
MyBatis-Plus高级用法:最优化持久层开发
MyBatis-Plus 通过简化常见的持久层开发任务,提高了开发效率和代码的可维护性。通过合理使用条件构造器、分页插件、逻辑删除和代码生成器等高级功能,可以进一步优化持久层开发,提升系统性能和稳定性。掌握这些高级用法和最佳实践,有助于开发者构建高效、稳定和可扩展的企业级应用。
173 13
|
4月前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
4月前
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
146 5
|
4月前
|
Java 数据库连接 mybatis
Mybatis使用注解方式实现批量更新、批量新增
Mybatis使用注解方式实现批量更新、批量新增
78 3
|
4月前
|
SQL 存储 数据库
深入理解@TableField注解的使用-MybatisPlus教程
`@TableField`注解在MyBatis-Plus中是一个非常灵活和强大的工具,能够帮助开发者精细控制实体类与数据库表字段之间的映射关系。通过合理使用 `@TableField`注解,可以实现字段名称映射、自动填充、条件查询以及自定义类型处理等高级功能。这些功能在实际开发中,可以显著提高代码的可读性和维护性。如果需要进一步优化和管理你的MyBatis-Plus应用程
312 3
|
4月前
|
Java 数据库连接 mybatis
Mybatis使用注解方式实现批量更新、批量新增
Mybatis使用注解方式实现批量更新、批量新增
369 1
|
6月前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
5月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
119 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
5月前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
111 0