其实,我更喜欢写SQL
此文章充满了个人的主观色彩,如果引起了大家的不适,那我也没办法。
其实,我更喜欢写SQL,如果在此基础上再稍微方便一些就更好了,所以,我理想中的持久层应该是这样的。
对于单表的增删改查
由于它不需要各种join,所以我们关心的只不过是字段,参数和条件而已,所以必须要有一种方式让我们只需要关注这三点,不需要去写那些固定模式的SQL,比如这样。
ParamPO paramPO = new ParamPO(); paramPO.setUserName("a"); paramPO.setUserEmail("test@qq.com"); int result = MagicDBUtils.get(jdbcTemplate).insert("表名", paramPO);
又或者这样
/ 构建查询条件 ConditionBuilder conditionBuilder = ConditionBuilder.createCondition() .add("id > ?", 10) .add("and (name = ? or age > ?)", "bee", 10) .add("order by create_time", Condition.NOT_WHERE); // 执行查询 List<ParamPO> result = MagicDBUtils.get(jdbcTemplate).select("表名", conditionBuilder, ParamPO.class);
注意看上面的代码示例,他跟现有的框架有什么区别?答案就在这行
.add("and (name = ? or age > ?)", "bee", 10)
现有的框架如果要实现这样的条件是一件很头疼的事,而我们可以直接把查询条件写出来,不需要去set一堆对象。
其他框架只能很方便的实现这种(也许是我孤陋寡闻,如果说错了欢迎大家来拍砖)
.add("id > ?", 10)
这就是其他框架的写法,不仅没有我们灵活,而且还不够直观,需要能一眼看懂方法名是什么意思。大家可以把这段代码跟上面的那段比一比,哪段更直观简直不言而喻。
ImsCardGoodsExample.Criteria criteria = cardGoodsExample.createCriteria() .andIccidEqualTo(iccid) // 需要看懂英文equal .andEndTimeLessThanOrEqualTo(new Date()); // 至于这句是什么意思?到底是>=还是<=,别装了,英文很好的程序员占比真不大
对于其他操作
由于需要各种统计,函数,join,这个时候无论代码设计的多么出色都不可能有SQL灵活好用,而且我们几乎都会在navicat等各种客户端里写一遍SQL,验证成功了才会把他应用到程序里去。所以在这个场景下我个人认为没有什么方式比把SQL直接拷贝到程序里更方便的方式了,所以他必须能很友好的支持原生SQL。
比如查询
ParamPO paramPO = new ParamPO(); paramPO.setId(5); paramPO.setUserName("a"); // 采用{}占位符的写法 List<ParamPO> result = MagicDBUtils.get(jdbcTemplate).selectList("select * from xt_message_board where id > {id} and user_name != {user_name}", paramPO, ParamPO.class); // 采用 ? 占位符的写法 List<ParamPO> result = MagicDBUtils.get(jdbcTemplate).selectList("select * from xt_message_board where id > ? and user_name != ?", new Object[]{5, "a"}, ParamPO.class);
又或者增删改
ParamPO paramPO = new ParamPO(); paramPO.setUserName("testTx222"); paramPO.setUserEmail("testTx222@qq.com"); paramPO.setId(4); // 采用{}占位符的写法 int result = MagicDBUtils.get(jdbcTemplate).exec("update xt_message_board set user_name = {user_name} , user_email = {user_email} where id = {id}", paramPO); // 采用 ? 占位符的写法 int result = MagicDBUtils.get(jdbcTemplate).exec("update xt_message_board set user_name = ? , user_email = ? where id = ?", new Object[]{"testTx222","testTx222@qq.com", 4});
分个页而已,有没有必要引入三方插件啊?
简简单单一句话搞定,当然了,只支持mysql哈,为什么不支持别的?因为我懒(其实是大部分公司都不舍得买oracle,db2等数据库,所以我觉得这个懒可以偷)
// 查询条件 ParamPO paramPO = new ParamPO(); paramPO.setId(5); paramPO.setUserName("a"); // 查询参数 PageParamModel pageParamModel = new PageParamModel(); pageParamModel.setCurrentPage(1); pageParamModel.setPageSize(10); pageParamModel.setParam(paramPO); // 使用默认countSql查询 PageModel<ParamPO> pageModel = MagicDBUtils.get(jdbcTemplate).selectPage("select * from xt_message_board where id > {id} and user_name != {user_name}", pageParamModel, ParamPO.class); // 使用自定义countSql查询 String countSql = "自己定义countSql"; PageModel<ParamPO> pageModel = MagicDBUtils.get(jdbcTemplate).selectPageCustomCountSql("select * from xt_message_board where id > {id} and user_name != {user_name}", countSql, pageParamModel, ParamPO.class);
SQL写在代码里很难看?
现在已经2024年的年底了,90年出生的程序员都已经达到35岁退休的年龄了,所以不要再守着JDK8 过日子了,试一试JDK17
String sql = """ select id,name,age,create_time from user_info where name = {name} and age > {age} """;
最重要的是
它只不过是对Spring的JdbcTemplate做了一个小小的扩展,也就是这玩意儿
@Resource private JdbcTemplate jdbcTemplate;
所以稳定性,各方面都不用担心,而且使用起来超级方便,也就是说你只需要在https://start.springboot.io网站建立一个springboot项目,然后再添加一个依赖就好了,不需要去查阅mybaits怎么整合,分页插件怎么整合等一堆事。
所以你们打算尝试一下吗?

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
一文带你搞懂GaussDB数据库性能调优
摘要:数据库性能调优涉及硬件、操作系统、数据库、应用等多个层面,因此,在性能调优过程中,需要综合考虑各方面因素的影响。 本文分享自华为云社区 《【GaussTech技术专栏】GaussDB性能调优》 ,作者:GaussDB 数据库。 数据库性能调优是一项复杂且系统性的工作,需要综合考虑多方面的因素。因此,调优人员应对系统软件架构、软硬件配置、数据库配置参数、并发控制、查询处理和数据库应用拥有广泛而深刻的理解。 本文旨在剖析GaussDB性能调优的总体思路,探讨系统整体性能问题,以及对锁阻塞问题进行分析和优化。 1. 性能调优思路 GaussDB总体性能调优的思路是:先进行性能瓶颈点分析,找到相应的瓶颈点之后,再针对性地进行优化,直到系统性能到达业务可接受的范围内。 调优思路,如图1所示: 图1 GaussDB总体性能调优思路 首先,应该确认应用压力是否传递到数据库,可以通过分析数据库节点的资源使用情况,如CPU、I/O、内存以及数据库线程池、活跃会话等信息来辅助判断。GaussDB数据库的管控平台提供了丰富的监控指标体系,便于性能分析人员查看数据库的实时或者历史资源使用情况。 ...
- 下一篇
得物精准测试平台设计与实现
文/得物技术-千仞 一、精准测试是什么 什么是精准测试 目前业内尚未形成统一的实践方案,对精准测试也有多种定义,这里列举部分定义: (1)精准测试是一套计算机测试辅助分析系统。精准测试的核心组件包含的软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率分析、缺陷定位、测试用例聚类分析、测试用例自动生成系统,这些功能完整的构成了精准测试技术体系。 (2)精准测试是一种测试方法,旨在通过优化测试过程和测试结果,提高软件质量和可靠性。该测试方法结合了自动化和手动化测试技术,以尽可能地覆盖所有的功能和边缘情况,从而减少潜在的缺陷和错误。精准测试方法采用了一系列技术和流程,包括测试计划和用例的制定和管理、缺陷跟踪和管理、代码覆盖率分析、性能测试、安全测试等等。该方法通过持续集成和持续测试,将测试过程整合到开发流程中,提高软件开发的效率和质量。精准测试的最终目标是确保软件产品能够满足用户的需求和期望,并且达到高度的可靠性、安全性和稳定性。同时,该测试方法可以减少开发过程中的错误和重复工作,提高开发团队的效率和协作能力,促进软件开发的创新和发展。 为什么要做精准测试 精准测试是为了解...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 2048小游戏-低调大师作品
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- 设置Eclipse缩进为4个空格,增强代码规范