实现按条件查询
第一步: 定义接口: public interface ICommonDaoT { ListT findCollectionByConditionNoPage(String codition,Object[] params, MapString, String orderby); } 第二步: 实现接口的类: Class entityClass = TUtils.getTClass(this.getClass());public cl
第一步:
定义接口:
public interface ICommonDao
List
}
第二步:
实现接口的类:
Class entityClass = TUtils.getTClass(this.getClass()); public class TUtils { /**泛型转换,目的获取子类传递父类的真实类型,也就是T所对应的类型*/ public static Class getTClass(Class entity) { ParameterizedType type = (ParameterizedType)entity.getGenericSuperclass(); Class entityClass = (Class) type.getActualTypeArguments()[0]; return entityClass; } }
/**指定查询条件查询对应的结果,返回List(不分页)*/ /** * FROM ElecText o WHERE 1=1 #Dao层 AND o.textName LIKE '%张%' #Service层 AND o.textRemark LIKE '%张%' #Service层 ORDER BY o.textDate ASC,o.textName DESC #Service层 */ public List<T> findCollectionByConditionNoPage(String condition, final Object[] params, Map<String, String> orderby) { //定义hql语句 String hql = "FROM "+entityClass.getSimpleName()+" o WHERE 1=1"; //定义排序语句 String orderbyHql = this.orderbyHql(orderby); //定义最终的语句 final String finalHql = hql + condition + orderbyHql; //执行语句一 //List<T> list = this.getHibernateTemplate().find(finalHql, params); //执行语句二 // SessionFactory sf = this.getHibernateTemplate().getSessionFactory(); // Session s = sf.getCurrentSession(); // Query query = s.createQuery(finalHql); // List<T> list = query.list(); //执行语句三 List<T> list = this.getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery(finalHql); if(params!=null && params.length>0){ for(int i=0;i<params.length;i++){ query.setParameter(i, params[i]); } } return query.list(); } }); return list; } /**组织排序的语句*/ /*ORDER BY o.textDate ASC,o.textName DESC*/ private String orderbyHql(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()+" "+map.getValue()+","); } //删除最后一个逗号 buffer.deleteCharAt(buffer.length()-1); } return buffer.toString(); }
下面是根据不同的业务来编写不同的代码。
第三步:
service接口:
public interface IElecTextService { public static final String SERVICE_NAME = "com.itheima.elec.service.impl.ElecTextServiceImpl"; List<ElecText> findCollectionByConditionNoPage(ElecText elecText); }
第四步:
service实现
/**指定查询条件查询对应的结果,返回List*/ /** * FROM ElecText o WHERE 1=1 #Dao层 AND o.textName LIKE '%张%' #Service层 AND o.textRemark LIKE '%张%' #Service层 ORDER BY o.textDate ASC,o.textName DESC #Service层 */ public List<ElecText> findCollectionByConditionNoPage(ElecText elecText) { //查询条件 String condition = ""; List<Object> paramsList = new ArrayList<Object>(); //判断是否添加查询条件 if(StringUtils.isNotBlank(elecText.getTextName())){ condition += " and o.textName like ?"; paramsList.add("%"+elecText.getTextName()+"%"); } if(StringUtils.isNotBlank(elecText.getTextRemark())){ condition += " and o.textRemark like ?"; paramsList.add("%"+elecText.getTextRemark()+"%"); } Object [] params = paramsList.toArray(); //排序语句(hql语句和sql语句的排序是有顺序的 Map<String, String> orderby = new LinkedHashMap<String, String>(); orderby.put("o.textDate", "asc"); orderby.put("o.textName", "desc"); //查询 List<ElecText> list = elecTextDao.findCollectionByConditionNoPage(condition,params,orderby); return list; }
第五步:
/**模拟Action,调用Service,指定查询条件查询对应的结果,返回List*/ @Test public void findCollectionByConditionNoPage(){ ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml"); IElecTextService elecTextService = (IElecTextService) ac.getBean(IElecTextService.SERVICE_NAME); ElecText elecText = new ElecText(); // elecText.setTextName("张"); // elecText.setTextRemark("张"); List<ElecText> list = elecTextService.findCollectionByConditionNoPage(elecText); if(list!=null && list.size()>0){ for(ElecText elecText2:list){ System.out.println(elecText2.getTextName()+" "+elecText2.getTextDate()+" "+elecText2.getTextRemark()); } } }
真正的action:
package com.itheima.elec.web.action; import java.util.List; import javax.annotation.Resource; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import com.itheima.elec.domain.ElecSystemDDL; import com.itheima.elec.service.IElecSystemDDLService; @SuppressWarnings("serial") @Controller("elecSystemDDLAction") @Scope(value="prototype") public class ElecSystemDDLAction extends BaseAction<ElecSystemDDL>{ ElecSystemDDL elecSystemDDL = this.getModel(); @Resource(name=IElecSystemDDLService.SERVICE_NAME) private IElecSystemDDLService elecSystemDDLService; public String home(){ List<ElecSystemDDL> list = elecSystemDDLService.findKeywordWithDistinct(); request.setAttribute("list", list); return "home"; } public String edit(){ //获取数据类型 String keyword = elecSystemDDL.getKeyword(); //1:使用数据类型作为查询条件,查询数据字典表,返回List<ElecSystemDDL> List<ElecSystemDDL> list = elecSystemDDLService.findSystemDDLListByKeyword(keyword); request.setAttribute("systemList", list); return "edit"; } }

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

华为手机如何实现双微信登录?随着社交媒体的兴起,微信已经成为人们日常生活中不可或缺的沟通工具之一。然而,许多人可能会遇到一个问题:在同一部手机上同时登录多个微信账号。对于华为手机用户来说,实现双微信登录并不困难,本文将介绍华为手机如何实现双微信登录的方法。首先,华为手机自带的EMUI系统提供了一个很便利的功能——应用双开。通过应用双开功能,用户可以在手机上同

12306订票app下载最新版是一款大家非常满意的出行购票软件,想去哪里就去那里非常方便,软件内提供的票源非常多,只需要通过实名认证就能在线购票,所有用户的出行车票机票都可以轻松买到,享受不同的优惠折扣。还能提前开启预约抢票,预约酒店、专车接送都是可以的,有了它想去哪里就去那里一键购票,出行更加简单方便,让大家的出行体验更舒服,现在小编在线详细为12306用户们带来查看历史购票记录的方法。 1.打开铁路12306,点击右下角我的,点击我的订单 2.在订单页面点击已支付。 3.在已支付页

学信网如何查询自己的学历?在学信网中是可以查询到自己的学历,很多用户都不知道如何在学信网中查询到自己的学历,接下来就是小编为用户带来的学信网查询自己学历方法图文教程,感兴趣的用户快来一起看看吧!学信网使用教程学信网如何查询自己的学历一、学信网入口:https://www.chsi.com.cn/二、网站查询:第一步:点击上方学信网地址,进入首页点击【学历查询】;第二步:在最新的网页中点击如下图箭头所示的【查询】;第三步:之后在新页面点击【的登陆学信档案】;第四步:在登陆页面输入信息点击【登陆】;

如何在华为手机上实现微信分身功能随着社交软件的普及和人们对隐私安全的日益重视,微信分身功能逐渐成为人们关注的焦点。微信分身功能可以帮助用户在同一台手机上同时登录多个微信账号,方便管理和使用。在华为手机上实现微信分身功能并不困难,只需要按照以下步骤操作即可。第一步:确保手机系统版本和微信版本符合要求首先,确保你的华为手机系统版本已更新到最新版本,以及微信App

编程语言PHP是一种用于Web开发的强大工具,能够支持多种不同的编程逻辑和算法。其中,实现斐波那契数列是一个常见且经典的编程问题。在这篇文章中,将介绍如何使用PHP编程语言来实现斐波那契数列的方法,并附上具体的代码示例。斐波那契数列是一个数学上的序列,其定义如下:数列的第一个和第二个元素为1,从第三个元素开始,每个元素的值等于前两个元素的和。数列的前几个元

在当今的软件开发领域中,Golang(Go语言)作为一种高效、简洁、并发性强的编程语言,越来越受到开发者的青睐。其丰富的标准库和高效的并发特性使它成为游戏开发领域的一个备受关注的选择。本文将探讨如何利用Golang来实现游戏开发,并通过具体的代码示例来展示其强大的可能性。1.Golang在游戏开发中的优势作为一种静态类型语言,Golang在构建大型游戏系统

MySQL与PL/SQL是两种不同的数据库管理系统,分别代表了关系型数据库和过程化语言的特点。本文将比较MySQL和PL/SQL的异同点,并附带具体的代码示例进行说明。MySQL是一种流行的关系型数据库管理系统,采用结构化查询语言(SQL)来管理和操作数据库。而PL/SQL是Oracle数据库特有的过程化语言,用于编写存储过程、触发器和函数等数据库对象。相同

PHP接口简介及其定义方式PHP是一种广泛应用于Web开发的开源脚本语言,具有灵活、简单、强大等特点。在PHP中,接口(interface)是一种定义多个类之间公共方法的工具,实现了多态性,让代码更加灵活和可重用。本文将介绍PHP接口的概念及其定义方式,同时提供具体的代码示例展示其用法。1.PHP接口概念接口在面向对象编程中扮演着重要的角色,定义了类应
