mybatis plus 自定义sql 不生效_Mybatis中不建议使用动态sql
Mybatis是一个优秀的Java持久层框架,它通过xml的方式来管理要执行的sql语句,屏蔽了jdbc底层细节,让开发人员可以方便的操作数据库。动态SQL说到动态SQL,绝对是Mybatis引以为豪的东西,因为它可以使配置文件简洁,就像下面这个配置,我可以使用selectEntryByWhere来适配所有的查询语句,是不是感觉很爽。SELECTFROM order...
Mybatis是一个优秀的Java持久层框架,它通过xml的方式来管理要执行的sql语句,屏蔽了jdbc底层细节,让开发人员可以方便的操作数据库。
动态SQL
说到动态SQL,绝对是Mybatis引以为豪的东西,因为它可以使配置文件简洁,就像下面这个配置,我可以使用selectEntryByWhere来适配所有的查询语句,是不是感觉很爽。
SELECTFROM order
AND order_id = #{orderId}AND user_id = #{userId}AND type = #{type} AND type in #{type} = #{startTime}]]>
不建议使用动态SQL
这里说下我的原因,为什么不建议使用动态SQL?
(1)使用动态SQL存在内存溢出隐患。线上遇到过真实案例,就因为某个字段为null查询全表,导致OOM。写代码时很爽,一旦出了线上问题,排查起来就非常麻烦了,当时使用jmap dump出堆内存信息,慢慢才分析出来。
(2)代码可读性非常差。试想一下,如果你接手一个不熟悉的项目,一般情况下,我们都会从数据库底层开始,逐渐了解整个业务的逻辑。但是你一看到这个动态SQL,尤其是几十个查询SQL都走到这里,估计你会崩溃,因为你不知道参数是怎么传递的,所有的查询语句都走到这来了。
我的建议
强烈建议不要使用动态SQL拼接,DAO层的每个查询方法,在Mybatis的xml配置文件中都应该有对应的配置。比如我要根据订单ID查询,应该这么写而不是直接通过selectEntryByWhere方法查询。
SELECTFROM orderwhere order_id = #{orderId}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)