指定查询条件,查询对应的集合List(单表)
TestDao.java(测试类)
@Test
public void findCollectionByConditionNoPage(){
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
IElecTextService elecTextService = (IElecTextService) ac.getBean(IElecTextService.SERVICE_NAME);
//封装查询条件
ElecText electText = new ElecText();
electText.setTextName("李");
electText.setTextRemark("李");
//在service中组织查询条件,查询结果
List<ElecText> list = elecTextService.findCollectionByConditionNoPage(electText);
if(list!=null && list.size()>0){
for (ElecText text : list) {
System.out.println(text.toString());
}
}
}
ElecTextServiceImpl.java(service层实现类)
//增删改的方法:添加:@Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,readOnly=false)
//查询的方法:不需要添加
/**
* SELECT * FROM elec_text o WHERE 1=1
AND o.textName LIKE '%李%'
AND o.textRemark LIKE '%李%'
ORDER BY o.textDate DESC,o.textName ASC
*/
public List<ElecText> findCollectionByConditionNoPage(ElecText electText) {
//组织查询条件
String condition = "";
List<Object> paramsList = new ArrayList<Object>();//存放'?'对应的可变参量
//名称
String textName = electText.getTextName();
if(StringUtils.isNotBlank(textName)){
condition += " AND o.textName LIKE ?";
paramsList.add("%"+textName+"%");
}
//备注
String textRemark = electText.getTextRemark();
if(StringUtils.isNotBlank(textRemark)){
condition += " AND o.textRemark LIKE ?";
paramsList.add("%"+textRemark+"%");
}
//将paramsList转换成数组
Object [] params = paramsList.toArray();
//排序
Map<String, String> orderby = new LinkedHashMap<String, String>();
orderby.put("o.textDate", "desc");
orderby.put("o.textName", "asc");
List<ElecText> list = elecTextDao.findCollectionByConditionNoPage(condition,params,orderby);
return list;
}
CommonDaoImpl.java(底层方法封装CommonDaoImpl类,Dao层)
//指定查询条件,查询对应的集合List(单表)
/**
* SELECT * FROM elec_text o WHERE 1=1
AND o.textName LIKE '%李%'
AND o.textRemark LIKE '%李%'
ORDER BY o.textDate DESC,o.textName ASC
*/
public List<T> findCollectionByConditionNoPage(String condition,
Object[] params, Map<String, String> orderby) {
String hql = " FROM "+entityClass.getSimpleName()+" o WHERE 1=1 ";
//ORDER BY o.textDate DESC,o.textName ASC
String orderbyHql = orderby(orderby);
String finalHql = hql + condition + orderbyHql;
//执行hql语句
List<T> list = this.getHibernateTemplate().find(finalHql,params);
return list;
}
//解析map集合,获取orderby的排序条件
private String orderby(Map<String, String> orderby){
StringBuffer buffer = new StringBuffer("");
if(orderby!=null && orderby.size()>0){
buffer.append(" ORDER BY ");
for(Map.Entry<String, String> map:orderby.entrySet()){
buffer.append(map.getKey()).append(map.getValue()).append(",");
}
//删除最后一个逗号
buffer.deleteCharAt(buffer.length()-1);
}
return buffer.toString();
}
Service层下orderby.put("o.textDate ", "desc"); 不加空格会报错
错误提示如下:
Caused by: org.hibernate.QueryException: could not resolve property: textDatedesc of: cn.itcast.elec.domain.ElecText [ FROM cn.itcast.elec.domain.ElecText o WHERE 1=1 AND o.textName LIKE ? AND o.textRemark LIKE ? ORDER BY o.textDatedesc,o.textNameasc]
出现错误的代码如下:
//排序
Map<String, String> orderby = new LinkedHashMap<String, String>();
orderby.put("o.textDate", "desc");
orderby.put("o.textName", "asc");
List<ElecText> list = elecTextDao.findCollectionByConditionNoPage(condition,params,orderby);
return list;
指定查询条件,查询对应的集合List(单表)的更多相关文章
- EF:分页查询 + 条件查询 + 排序
/// <summary> /// linq扩展类---zxh /// </summary> /// <typeparam name="T">& ...
- springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetomany
springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetoma ...
- Hibernate 笔记 HQL查询 条件查询,聚集函数,子查询,导航查询
在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方 ...
- MySQL单表查询 条件查询,分组
目录 1 where 条件查询 between like not in 2 group by 分组 聚合函数:max min sum avg count 3 having 过滤 4 distinct ...
- 18 12 06 sql 的 基本语句 查询 条件查询 逻辑运算符 模糊查询 范围查询 排序 聚合函数 分组 分页 连接查询 自关联 子查询
-- 数据的准备 -- 创建一个数据库 create database python_test charset=utf8; -- 使用一个数据库 use python_test; -- 显示使用的当前 ...
- Activiti5 待审 待批任务 TaskQuery查询 条件查询 like查询
TaskQuery查询API 有两种方法可以从引擎中查询数据:查询API和原生查询.查询API提供了完全类型安全的API. 你可以为自己的查询条件添加很多条件 (所以条件都以AND组合)和精确的排序条 ...
- 13-MySQL-Ubuntu-数据表的查询-条件查询(二)
条件查询 1,比较查询(>,<,>=,<=,=)注:SQL查询语句的等于号(=) (1)查询学生表中年龄大于18岁的学生姓名和性别信息 select name,gender f ...
- 五 查询数据SELECT 一、单表查询
一 单表查询的语法 二 关键字的执行优先级 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 ...
- 在PLSQL中不能使用中文作为查询条件查询数据
解决方法: 1.在oracle服务端的注册表中找到oracle-->key_oradb11g_home1,在右侧找到NLS_LANG,将其数值数据改为SIMPLIFIED CHINESE_CH ...
- [NHibernate]条件查询Criteria Query
目录 写在前面 文档与系列文章 条件查询 一个例子 总结 写在前面 上篇文章介绍了HQL查询,我个人觉得使用ORM框架就是为了让少些sql,提高开发效率,而再使用HQL就好像还是使用sql,就觉得有点 ...
随机推荐
- tomcat7.0.55配置单向和双向HTTPS连接(二)
上一篇文章:tomcat7.0.55配置单向和双向HTTPS连接 只是简要的配置了一下HTTPS,还有许多问题没有解决,本篇来解决这些文件 首先按照这篇文章:Widows下利用OpenSSL生成证书来 ...
- arch 安装
xfce参考 http://my.oschina.net/u/1408707/blog/182581#OSC_h2_6 chm阅读 – chmsee作为一个苦逼的码农,要忍受各种chm文件的蹂躏,这个 ...
- Java出现错误“Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )”的问题分析
若出现:Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )这样的问题,一般是转义字符的问题,下 ...
- 几点iOS开发技巧
转自I'm Allen的博客 原文:iOS Programming Architecture and Design Guidelines 原文来自破船的分享 原文作者是开发界中知晓度相当高 ...
- docker 如何清理垃圾呢
应用容器在宿主机上长期运行,应用实例启停容器,会产生大量的停止的容器,无容器使用的数据卷.网络配置,无容器依赖的镜像,这些垃圾日积月累,会影响到宿主机的运行状态,造成机子卡顿等现象.因此,需要对这些宿 ...
- SQLAlchemy的查询操作Query
查询操作 查询子句使用session的.query()方法来获取Query查询对象.查询对象能够使用一些方法来对应一些查询子句,比如.order_by(),.limit(),.filter()等. 查 ...
- update tableView contenSize
NSIndexPath *messageIndexPath = [NSIndexPath indexPathForRow:afterRowCount-1 inSection:0]; [self. ...
- mysql binlog配置详解
关闭binlog,注释掉mysql配置文件中的log-bin=mysql-bin即可 baidu zone - 关闭binlog方法 cnblogs - linux下mysql配置文件my ...
- Selenium系列之--05 录制脚本并导出
一.下载Firefox Firefox官方下载地址:http://www.firefox.com.cn/download/#more,下载延长支持版. 二.下载插件 Selenium本身有录制功能组件 ...
- 实习日记)select option 选择不同的option时, 页面发生不同的变化
怎么在下拉框的选择不同的option时, 页面发生响应的变化 因为option是没有点击事件什么的, 只有select才有, 所以不能通过option的点击事件来完成, 所以开始的尝试都失败了(之前 ...