spring SimpleJdbcTemplate多条件查询的最佳实践.

问题描述

大家好.最近在研究jqgrid,其中牵扯到了多条件查询,而且是很高级的多条件查询.如下图但是这就有个问题了spring的官方文档中有查询所有字段,更新,添加 ,删除,根据某个字段进行条件查询的最佳实践例子.但是就是没有SimpleJdbcTemplate的多条件查询字段的最佳实践例子.目前我用到的方法如下:随便找的一个例子public List<OperatorSimple> getAllOperator(int toPage, int pageSize,String login, String name, String oper_group_id, int state) {String sql = "select p.id, p.login,p.password,p.name,p.email,p.tel,g.name,p.create_time,p.state,p.withdraw_time from oper_person_info as p "+ "left join oper_group_info as g on p.oper_group_id = g.id where 1 = 1 ";Object[] params = new Object[4];int index = 0;if (!login.equals("")) {sql += " and p.login like ? ";params[index] = login;index++;}if (!name.equals("")) {sql += " and p.name like ? ";params[index] = "%" + name + "%";index++;}if (!oper_group_id.equals("")) {sql += " and p.oper_group_id like ? ";params[index] = oper_group_id;index++;}if (state == 1 || state == 0) {sql += " and p.state = ? ";params[index] = state;index++;}Object[] paramsEnd = new Object[index];System.arraycopy(params, 0, paramsEnd, 0, index);int start = MysqlPaginationUtils.getStart(toPage, pageSize);sql = MysqlPaginationUtils.paginationSQLForMySQL(sql, start, pageSize);return super.getJdbcTemplate().query(sql, paramsEnd,new OperatorSimpleMapper());}但是这个方法我感觉好像不是最佳实践.一来如果按照jqgrid提供的高级多条件查询,不是要写很多个if判断吗?(实际上我最高记录写了40多个...)二来 这样也不好进行重构.请问大家有什么好的多条件查询最佳实践吗?

解决方案

从页面上传过来的参数不是存放在request中吗?之后得到request.getParameterMap(),因为你这里是dao层,所以建议弄成一个普通的Map,调用putAll,将参数传进来之后调用for循环,拼接sql语句
解决方案二:
if 多条件里面不能少吧. 要是想共用方法的话 应该可以写一个多条件的共用方法的用不定参数,A(int toPage, int pageSize,String ... otherInfo);只是可读性就差了.期待完美的答案.. 貌似我也是想你这么用的.

时间: 2024-10-22 13:39:34

spring SimpleJdbcTemplate多条件查询的最佳实践.的相关文章

Spring Batch在大型企业中的最佳实践

在大型企业中,由于业务复杂.数据量大.数据格式不同.数据交互格式繁杂,并非所有的操作都能通过交互界面进行处理.而有一些操作需要定期读取大批量的数据,然后进行一系列的后续处理.这样的过程就是"批处理". 批处理应用通常有以下特点: 数据量大,从数万到数百万甚至上亿不等: 整个过程全部自动化,并预留一定接口进行自定义配置: 这样的应用通常是周期性运行,比如按日.周.月运行: 对数据处理的准确性要求高,并且需要容错机制.回滚机制.完善的日志监控等. 什么是Spring batch Sprin

Spring XML配置十二个最佳实践

xml     在这篇文章里,对于Spring XML的配置,我将向你展示12种比较好的实践.其中的一些实践不仅是好的实践,更是必要的实践.除此以外,还有其他因素,例如领域模型的设计,都能影响XML的配置,但是这篇文章重点研究XML配置的易读性和易管理性. 1.不要使用autowiring Spring可以通过类的自省来自动绑定其依赖部分,使得你不必明确指明bean的属性和构造器.Bean的属性可以通过属性名称或类型匹配来实现自动绑定.构造器通过类型匹配来实现自动绑定.你甚至可以指定自动检测自动

多字段,任意组合条件查询(0建模) - 毫秒级实时圈人 实践

标签 PostgreSQL , 数组 , GIN索引 , 任意字段组合查询 , 圈人 , ToB分析型业务 , 建模 背景 你也许在一家ToB的数据分析公司,你可能设计了一张表(包括用户标识,及若干已经统计好的的属性值),你也许收集了一些用户的数据,你也许要为客户提供报表,你也许需要为客户提供任意属性值的组合查询,并快速的返回结果给用户. 这些需求应该是非常常见的ToB的数据平台公司的形态,头痛的问题无法建模,因为B端的需求无法捉摸,任意组合查询.要求实时响应. 你的客户数据也许有几十亿上百亿,

《精通Spring MVC 4》——2.2 对MVC的质疑及其最佳实践

2.2 对MVC的质疑及其最佳实践 尽管MVC依然是当前设计UI的首选方案,但是随着它的流行,也有很多对它的批评.实际上,大多数的批评都指向了该模式的错误用法. 2.2.1 贫血的领域模型 Eric Evans编写过一本很有影响力的书,名为<领域驱动设计>(Domain Driven Design,DDD).在这本书中,定义了一组架构规则,能够指导我们更好地将业务领域集成到代码之中. 其中有一项核心的理念就是将面向对象的范式应用到领域对象之中.如果违背这一原则的话,就会被称之为贫血的领域模型(

RDS最佳实践(四)—如何处理Mysql的子查询

早上值班同事在旺旺群里面贴了一条非常复杂的SQL,用户从本地迁移到RDS Mysql出现严重性能下降,同样的数据和表结构下,在本地的数据库上只要不到1s的时间,但是在rds上好几分钟都没响应. 碰到这类问题需要考虑以下一些因素: a.数据库的版本不同(不同的版本优化器策略不一样,或者异构数据库间的迁移:oracle–>mysql,sqlserver–>mysql),导致sql执行计划不同,最后导致sql执行时间不同: b.数据库的配置不同(不同的内存配置,参数设置–query cache是否打

求一份Struts2+Spring+mybatis整合的增删改查及分页和多条件查询的源代码

问题描述 求一份Struts2+Spring+mybatis整合的增删改查及分页和多条件查询的源代码 小白求一份Struts2+Spring+mybatis整合的增删改查及分页和多条件查询的源代码,用jQuery实现jsp页面 解决方案 SpringMVC+Spring+mybatis是否需要呢?笔者之前写了一些相关的文章,也有源代码,你可以参考下:http://blog.csdn.net/evankaka/article/details/49452201http://blog.csdn.net

spring data jpa 多条件查询判读问题

问题描述 spring data jpa 多条件查询判读问题 在使用Spring Data JPA时发现的问题在实际应用中,我们通常会在页面上进行组合查询,例如用户这个对象 页面上会列出用户姓名.年龄.学历.性别.地址.电话等等的一系列查询条件 最近在学习Spring Data JPA,不知这个怎么实现这种组合条件的查询啊 只能手动判断后写SQL吗 解决方案 Spring jpa data多条件分页查询spring data jpa 分页查询 解决方案二: 不用手动写SQL的,SpringJPA

Spring Data 数据库建模最佳实践

本文节选自电子书<Netkiller Architect 手札> 出处:http://www.netkiller.cn 作者:netkiller , QQ:13721218, 订阅号:netkiller-ebook 第 12 章 Spring Data 数据库建模最佳实践 目录 12.1. 分类表 12.2. 为字段增加索引 12.3. 复合索引 12.4. 一对多实例 12.5. ManyToMany 多对多 12.6. 外键级联删除 ORM的出现解决了程序猿学习数据库学历成本,也加快了开发

spring mvc-mybatis条件查询没有数据返回

问题描述 mybatis条件查询没有数据返回 无条件查询时,能够正常返回数据,在前台输入一个入参到后台就没有数据返回,控制台不抱错,js无报错 系统框架是springMVC mapper.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://myba