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. c#使用椭圆签名算法制作软件序列号

    椭圆曲线密码学(Elliptic curve cryptography,缩写为ECC)是基于椭圆曲线数学的一种公钥密码的方法.椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Vict ...

  2. tableView刷新中的问题

    在开始之前先上一张效果图 相信大家都看到了“店铺优惠”这一栏,在这里假设这一栏就是单独的一个cell,当无店铺优惠的时候不可点击在有店铺优惠的时候会弹出优惠列表,选中并返回时会刷新数据,所以弹出视图采 ...

  3. House Robber(动态规划)

    思路: 代码: class Solution { public: int rob(vector<int> &num) { ; int size=num.size(); ) ]; v ...

  4. Django-自己写的py文件调用models&Non-ASCII character报错&url接收参数

    1.这个设置是网上能查到的最多的,但是没解决我的问题: Django的models.py在外部独立使用,新建一个文件夹,和monitor1目录平级 import sys,os sys.path.app ...

  5. BZOJ 2131 [scoi2010] 传送带

    @(BZOJ)[三分法] Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段. 两条传送带分别为线段AB和线段CD. lxhgww在AB上的移动速度为P,在CD上的移 ...

  6. 【mybatis】mybatis中insert操作,返回自增id

    需求是这样的: mybatis中insert操作,返回自增id,因为这个自增id需要给后续业务用到. 原本是这样的: 将insert语句传入,正常执行insert操作,返回int永远是 0[失败] 或 ...

  7. DevExpress的GridControl如何实现打印和打印预览 z

    第一种方法:             System.Drawing.Printing.PageSettings set_print_page = new System.Drawing.Printing ...

  8. [反汇编练习] 160个CrackMe之034

    [反汇编练习] 160个CrackMe之034. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  9. HDU 5054 Alice and Bob(数学)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5054 Problem Description Bob and Alice got separated ...

  10. GDB调试多线程程序

    gdb有thread相关命令,如info thread(简写成info th)显示线程消息,b xx thread yy可以针对某个thread设置断点,thread xx(简写成thr xx)切换到 ...