(crm笔记1-8)利用HQL进行条件查询
来源:互联网 发布:trivium算法 编辑:程序博客网 时间:2024/06/15 09:44
利用HQL进行条件查询
需求很多时候是对数据库进行条件查询,其中包括模糊查询等等一些查询语句,既然SSH框架中有hibernate,所以利用hql语句进行查询将会非常方便。
下面也是相同的思路,从test类进行逆向写查询需要的方法
下面是测试类的代码:
@Test public void testFindObjectByConditionWithNoPage() { ISysUserGroupService sysUserGroupService =(ISysUserGroupService) ServiceProvider.getService(ISysUserGroupService.SERVICE_NAME);//插入数据 String name="李四"; String principal="张三"; List<SysUserGroup> list=sysUserGroupService.findSysUserGroup(name,principal); }
整体思路
测试类的目的是通过模拟struts2层调用业务层的方法,进行查询,这里假设已经在jsp页面获取到了name和principal两个条件属性,需要将这两个条件传入到dao层,并进行hql语句的组织,然后执行queryExcute进行数据查询。
下面我们写测试类中调用的 findSysUserGroup 方法
由于这是业务层的方法,所以需要在业务层中写对应的接口:
public List<SysUserGroup> findSysUserGroup(String name, String principal);
这里的 name,principal 只是样例。
public List<SysUserGroup> findSysUserGroup(String name, String principal) { String whereHql=""; List paramsList=new ArrayList<>();//存放查询的条件 if(StringUtils.isNotBlank(name)){ whereHql=" and o.name like ?"; paramsList.add("%"+name+"%"); } if(StringUtils.isNotBlank(principal)){ whereHql=whereHql+" and o.principal like ?"; paramsList.add("%"+principal+"%"); } Object [] params=paramsList.toArray(); System.out.println("whereHql:"+whereHql);//输出hql中的where部分语句 LinkedHashMap<String , String>orderby=new LinkedHashMap<String ,String>(); orderby.put("o.name", "desc");//组织排序// orderby.put("o.id", "asc"); //调用dao层的方法进行查询 List<SysUserGroup>list= sysUserGroupDao.findObjectByConditionWithNoPage(whereHql,params,orderby); for(SysUserGroup list1:list){//循环输出查询到的List序列 System.out.println("list "+list1.toString()); } return list; }
这个方法:
1)主要是获取测试类中的Name和principal两个值,开始构建hql语句中的where部分。
2)然后将whereHql语句和组织排序的orderby语句传入到dao层的查询方法中,返回查询结果list
在dao层编写对应的调用的 findObjectByConditionWithNoPage 方法的接口:
public List<T> findObjectByConditionWithNoPage(String whereHql,final Object[] params ,LinkedHashMap<String, String>orderby) { //获取hql语句select前半部分 String hql="select o from "+entityClass.getSimpleName()+" o where 1=1 "; System.out.println("hql:"+hql); if(StringUtils.isNotBlank(hql)){ hql+=whereHql;//加入接收到的where部分 } System.out.println("hql:"+hql); String orderbyStr=buildOrderBy(orderby);//写一个方法组织orderby语句部分 hql+=orderbyStr;//加入接收到的orderby部分 System.out.println("hql "+hql); final String fhql=hql; //调用hibernate中的方法执行query语句 @SuppressWarnings("unchecked") List list=(List<T>)this.getHibernateTemplate().execute(new HibernateCallback(){ @Override public Object doInHibernate(Session session)throws HibernateException, SQLException { Query query=session.createQuery(fhql); if(params!=null&¶ms.length>0){ for(int i=0;i<params.length;i++) query.setParameter(i, params[i]); } return query.list(); } }); return list; }
/** * 组织排序条件 * @param orderby * @return */ private String buildOrderBy(LinkedHashMap<String, String> orderby) { StringBuffer buf=new StringBuffer(""); if(orderby!=null&&!orderby.isEmpty()){ buf.append(" order by "); for(Map.Entry<String ,String >em :orderby.entrySet()){ buf.append(em.getKey()+" "+em.getValue()+","); } //去掉最后一个逗号 buf.deleteCharAt(buf.length()-1); } return buf.toString(); }
以上便是所有的hql查询所需要的方法和操作,思路主要在于通过预先写好hql语句,然后根据对应的hql语句分成select部分、where部分、orderby部分进行分别组织。利用占位符进行语句中的条件传入。
阅读全文
0 0
- (crm笔记1-8)利用HQL进行条件查询
- Hibernate利用Query接口进行HQL查询
- HQL查询条件
- HQL条件查询
- hql的条件查询
- hql多条件查询
- 多条件查询Hql
- HQL查询条件
- crm OData查询条件设置
- Hibernate 笔记 HQL查询:条件查询,聚集函数,子查询,导航查询
- HQL一对多条件查询
- 4.hql条件查询:测试
- 5.hql条件查询:总结
- hql sql 多表多条件查询
- HQL单表条件查询
- HQL条件查询和原生SQL查询
- hql语句中用:号的时候怎么用like进行条件查询
- 利用MyBatis进行不同条件的like模糊查询
- 基础知识 java 图片与string相互转换
- 2017年国庆随笔----- 心理学随笔
- platform设备驱动组织方式
- JAVA自带的加密算法-MD5\SHA1\BASE64
- ambari 的注意点
- (crm笔记1-8)利用HQL进行条件查询
- 剑指Offer------合并两个排序的链表
- Framework学习(六)应用程序进程启动过程
- 【hautoj1289】arufuonsusnoufura
- 两种开源聊天机器人的性能测试(二)——基于tensorflow的chatbot
- 数字在排序数组中出现的次数java实现
- Idea配置tomcat内存
- 变位词问题(字符的排列)
- InvalidateRect,invalidate,updatewindow(转)