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(单表)的更多相关文章

  1. EF:分页查询 + 条件查询 + 排序

    /// <summary> /// linq扩展类---zxh /// </summary> /// <typeparam name="T">& ...

  2. springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetomany

    springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetoma ...

  3. Hibernate 笔记 HQL查询 条件查询,聚集函数,子查询,导航查询

    在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方 ...

  4. MySQL单表查询 条件查询,分组

    目录 1 where 条件查询 between like not in 2 group by 分组 聚合函数:max min sum avg count 3 having 过滤 4 distinct ...

  5. 18 12 06 sql 的 基本语句 查询 条件查询 逻辑运算符 模糊查询 范围查询 排序 聚合函数 分组 分页 连接查询 自关联 子查询

    -- 数据的准备 -- 创建一个数据库 create database python_test charset=utf8; -- 使用一个数据库 use python_test; -- 显示使用的当前 ...

  6. Activiti5 待审 待批任务 TaskQuery查询 条件查询 like查询

    TaskQuery查询API 有两种方法可以从引擎中查询数据:查询API和原生查询.查询API提供了完全类型安全的API. 你可以为自己的查询条件添加很多条件 (所以条件都以AND组合)和精确的排序条 ...

  7. 13-MySQL-Ubuntu-数据表的查询-条件查询(二)

    条件查询 1,比较查询(>,<,>=,<=,=)注:SQL查询语句的等于号(=) (1)查询学生表中年龄大于18岁的学生姓名和性别信息 select name,gender f ...

  8. 五 查询数据SELECT   一、单表查询

    一 单表查询的语法 二 关键字的执行优先级 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 ...

  9. 在PLSQL中不能使用中文作为查询条件查询数据

    解决方法:  1.在oracle服务端的注册表中找到oracle-->key_oradb11g_home1,在右侧找到NLS_LANG,将其数值数据改为SIMPLIFIED CHINESE_CH ...

  10. [NHibernate]条件查询Criteria Query

    目录 写在前面 文档与系列文章 条件查询 一个例子 总结 写在前面 上篇文章介绍了HQL查询,我个人觉得使用ORM框架就是为了让少些sql,提高开发效率,而再使用HQL就好像还是使用sql,就觉得有点 ...

随机推荐

  1. CI调试应用程序

    该分析器将在页面下方显示基准测试结果,运行过的 SQL 语句,以及 $_POST 数据.这些信息有助于开发过程中的调试和优化. 在控制器中设置以下方法以激活该分析器: $this->output ...

  2. Xamarin.Forms单元控件Cell

    Xamarin.Forms单元控件Cell   单元控件Cell是Xamarin.Forms为ListView和TableView专门定制的一类项目元素.它包括5个控件,分别为文本框单元EntryCe ...

  3. PAT甲级练习题1001、1002

    1001 A+B Format (20 分)   Calculate a+b and output the sum in standard format -- that is, the digits ...

  4. hadoop之hdfs及其工作原理

    hadoop之hdfs及其工作原理 (一)hdfs产生的背景 随着数据量的不断增大和增长速度的不断加快,一台机器上已经容纳不下,因此就需要放到更多的机器中,但这样做不方便维护和管理,因此需要一种文件系 ...

  5. iOS -- xxxViewController进行pop时直接crash进main.m,EXC_BAD_ACCESS(code=1,address=0x20)

    今天在调试程序时,遇到了奇怪的错误.我从主页跳进(push)一个ViewController时一切正常,但是返回主页(pop)时却crash了,直接跳进了main.m(EXC_BAD_ACCESS(c ...

  6. 拦截recyclerview 的item 的点击事件

    recyclerview.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(),recyclerview, new Re ...

  7. Majority Number

    题目描写叙述 链接地址 解法 算法解释 题目描写叙述 Given an array of integers, the majority number is the number that occurs ...

  8. gulp在ionic中的使用

    简介 Gulp是一个基于流的自动化构建器. 安装 npm config set registry http://registry.npm.taobao.org ---最好用国内源 npm instal ...

  9. 【Android归纳】阿里笔试题之Android网络优化

    记得这是阿里校招笔试的一道问答题 答案是小伙伴们之后一起拼出来的,不乏有些飘忽的东西,须要的朋友能够做个參考(详细细节能够自行百度).欢迎提出更好的建议. 在client方面: 1.降低网络请求的数量 ...

  10. 每天进步一点点——Linux中的线程局部存储(二)

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/26876231     在Linux中另一种更为高效的线程局部存储方法,就是使用keyword ...