- 浏览: 1993619 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (509)
- JavaEE (122)
- Oracle数据库 (29)
- JavaScript (37)
- SAP (5)
- MySql数据库 (7)
- JavaSE (4)
- Ajax (1)
- jQuery (13)
- SSH框架 (36)
- Web Service (10)
- JSF框架 (2)
- JBPM (0)
- ireport报表 (2)
- ibatis (5)
- Hibernate (31)
- JSP (11)
- Tomcat 服务器 (20)
- Other (19)
- JavaWeb (4)
- Maven (11)
- OSWorkFlow (10)
- HTML (13)
- Exception汇总 (7)
- SVN (2)
- 笑话 (1)
- JSTL (1)
- WebSphere Message Broker (13)
- ANT命令 (3)
- Liunx (12)
- Struts2 (26)
- Eclipse (6)
- DOS (3)
- Flex (11)
- WebSphere (1)
- 开发常用工具 (3)
- Junit (2)
- EJB (4)
- Struts1.2 (2)
- Jboss (1)
- Android (2)
- Java框架源码解析 (1)
- Spring (4)
- MyBatis (6)
- SpringMVC (4)
- Jetty (2)
- 数据库表设计 (1)
- SSO (4)
最新评论
-
贝塔ZQ:
也可以试试PageOffice插件,觉得更简单点
Jxl操作Excel设置背景、字体颜色、对齐方式、列的宽度 -
jia1208:
...
Could not publish server configuration for Tomcat v6.0 Server at localhost. -
u011274527:
赞
java.io.EOFException java.io.ObjectInputStream$PeekInputStream.readFully 错误 -
旭旭小牛啦:
怎么没哟了,继续赛
jQuery 选择器 -
wzw3919:
100行会报空指针
Java 解压缩zip文件
Hibernate的HQL中,通过参数名称和参数值 ,封装成Map。
在JavaBean中需要,返回一个Map集合的键值对形式。key->参数名,value->绑定查询的值。封装成Map 传入给后台.
代码如下:
package com.common.core.service; import java.util.HashMap; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class UserSearchCriteria implements SearchCriteria { private static final long serialVersionUID = -2410746683028614279L; final static Log logger = LogFactory.getLog(UserSearchCriteria.class); private String userId; private String firstName; private String lastName; private String email; private String age; private String gender; private String status; public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public void reset(){ this.userId = null; this.firstName = null; this.lastName = null; this.email = null; this.gender = null; this.status = null; } public Map<String,Object> getUserSearchCriteriaMap(){ Map<String,Object> map = new HashMap<String, Object>(); map.put("userId", "".equals(this.userId)?null:this.userId); map.put("lastName","".equals(this.lastName)?null:this.lastName); map.put("firstName","".equals(this.firstName)?null:this.firstName); map.put("age", "".equals(this.age)?null:this.age); map.put("email","".equals(this.email)?null:this.email); map.put("gender","".equals(this.gender)?null:this.gender); map.put("status","".equals(this.status)?null:this.status); return map; } }
在service中,拿到bean中绑定好的参数名和值得map集合传入service中,并且调用DAO中的方法;
public List<User> getUserListPageByCriteria(UserSearchCriteria criteria, PageAttribute pga,Set<User> memberExistsUser) throws UserServiceException { // TODO Auto-generated method stub logger.info("Start getUserListPageByCriteria"); final String endingMsg = "End getUserListPageByCriteria"; logger.info("query record from "+pga.getStartIndex()+" to "+(pga.getStartIndex()+pga.getPageSize())); String hql = null; StringBuffer sb= new StringBuffer(" from User user where " + "(:firstName is null or user.firstName like concat(:firstName,'%') ) " + "and (:lastName is null or user.lastName like concat(:lastName,'%') ) " + "and (:age is null or user.age = :age) " + "and (:email is null or user.email = :email) " + "and (:gender is null or user.gender = :gender) " + "and (:status is null or user.status = :status) " + "and (:userId is null or user.userId = :userId) " ); List<User> userList=null; try { if(memberExistsUser!=null && memberExistsUser.size()>0){ sb.append("and ( user.userId not in ( "); for(User user:memberExistsUser){ sb.append("'").append(user.getUserId()).append("'").append(","); } String resultStr= StringUtils.removeEnd(sb.toString(), ",")+"))"; hql = resultStr; }else{ hql = sb.toString(); } Map<String,Object> paramMap = criteria.getUserSearchCriteriaMap(); userList = userDao.getUserByQuery(paramMap, hql); } catch (DatabaseException e) { // TODO Auto-generated catch block e.printStackTrace(); logger.error("GetUserListPageByCriteria exception",e); throw new UserServiceException("GetUserListPageByCriteria exception",e); } logger.info(endingMsg); return userList; }
DAO封装好的方法如下:
/** * Query records by query * * @param map * @param queryString * @return * @throws DatabaseException */ @SuppressWarnings("unchecked") public <T> List<T> getObjectsByQuery(final Map<String, Object> map, final String queryString) throws DatabaseException { log.info("Start Get objects by HQL query [" + queryString + "]"); final String endingMsg = "End getObjectsByQuery"; if (map == null) throw new IllegalArgumentException("Mapping is null"); if (queryString == null) throw new IllegalArgumentException("Query String is null"); List<T> list = null; try { String[] params = map.keySet().toArray(new String[map.size()]); Object[] values = map.values().toArray(new Object[map.size()]); list = this.getHibernateTemplate().findByNamedParam(queryString, params, values); } catch (HibernateException e) { log.logExceptionCaught(e); throw new DatabaseException(e); } finally { log.info(endingMsg); } return list; }
调用Hibernate中的底层方法;
public List findByNamedParam(final String queryString, final String[] paramNames, final Object[] values) throws DataAccessException { if (paramNames.length != values.length) { throw new IllegalArgumentException("Length of paramNames array must match length of values array"); } return (List) executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Query queryObject = session.createQuery(queryString); prepareQuery(queryObject); if (values != null) { for (int i = 0; i < values.length; i++) { applyNamedParameterToQuery(queryObject, paramNames[i], values[i]); } } return queryObject.list(); } }); }
发表评论
-
大型互联网服务集成平台:springmvc+mybatis+restful+webservice+quartz+bootstrap html5
2015-04-13 21:49 81SpringMVC + Mybatis + SpringSe ... -
大型互联网服务集成平台:springmvc+mybatis+restfull+JMS+webservice+bootstrap
2015-04-12 23:36 22SpringMVC + Mybatis + SpringS ... -
大型互联网服务集成平台:springmvc+mybatis+restfull+JMS+webservice+bootstrap
2015-04-12 23:33 83SpringMVC + Mybatis + SpringS ... -
Maven构建大型互联网架构springmvc+mybatis+Restfull+Webservice+Bootstrap
2015-04-12 23:28 71SpringMVC + Mybatis + SpringS ... -
手机App后台架构:Springmvc+SpringSecurity+mybatis+Rest+Quartz+Bootstrap Html5( Maven构建)
2015-04-09 01:39 76APP后台架构Maven构建,模拟大型互联网架构,支持高并发 ... -
maven构建springmvc+mybatis+rest+webservice+bootstrap html5(cms开源项目)
2015-04-09 01:21 85SpringMVC + Mybatis + SpringS ... -
通过 ServletContextEvent 获取spring的applicationContext文件所在的路径
2012-01-09 13:33 13797public class UserStatusLi ... -
通过WebApplicationContextUtils工具类获取ApplicationContext对象.
2011-12-18 21:03 10245通过WebApplicationContextUtils工具类 ... -
Spring中二级缓存的配置
2011-12-18 20:40 22411.首先,在spring的hibernate配置里(app ... -
springframework java.lang.ClassNotFoundException
2011-12-11 23:49 2575springframework java.lang. ... -
java.lang.ClassNotFoundException: org.apache.commons.collections.map.LinkedMap
2011-12-11 23:23 3285下面这个错误是少了commons-collections.ja ... -
net.fckeditor.connector.ConnectorServlet java.lang.ClassNotFoundException: net.
2011-11-17 14:56 2529今天在整合struts2+ibatis2.16+spring2 ... -
log4j文件日志配置
2011-11-16 19:03 2875下面是一段最常见的日志配置模板: #输出到控制条to co ... -
Line: 209 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:209:-1
2011-11-14 21:27 1579问题链接: http://www.iteye.com/pro ... -
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStore
2011-11-14 14:34 14807Exception in thread "main& ... -
获取容器中WEB-INF或者classes目录下的配置文件
2011-11-04 17:07 5844获取Tomcat容器中WEB-INF路径下的文件. 在Ser ... -
解决spring配置文件没有提示的问题。
2011-11-03 00:16 2766我们使用eclipse编辑spring ... -
The reference to entity "characterEncoding" must end with the ';' delimiter
2011-10-06 12:44 2187在配置Spring 的数据源的时候,想把url配置下面加一个 ... -
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
2011-10-06 12:31 6109在配置Spring文件的时候..从别的文件中复制过来的头文件。 ... -
java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice
2011-10-05 22:59 12875本人在整合Struts2+Hibernate3.32+Spri ...
相关推荐
本文将深入探讨如何在Hibernate中进行分页查询的封装,并提供相关的源码和工具使用方法。 首先,我们需要了解Hibernate中的Criteria查询,这是实现分页查询的一种方式。Criteria API允许我们以面向对象的方式构建...
本教程将详细解释如何使用Hibernate将本地SQL查询的结果封装成对象,以便更好地理解和应用这项技术。 1. Hibernate ORM简介: Hibernate是一个开源的ORM框架,它为Java应用程序提供了数据持久化的解决方案。它通过...
- `select new map(p.name as personName) from Person as p`: 结果集被转换成Map集合,其中键是`personName`,值是每个`Person`对象的名字。 #### 四、HQL的优势 HQL通过将查询操作与对象模型紧密结合,极大地...
`setString`方法用来设置HQL中的参数值。 ##### 2. 根据日期范围查询相关的个人 ```java List pl = sess.createQuery("from Person p where p.myEvents.happenDate between :firstDate and :endDate") .setDate(...
使用`NEW Map(...)`可以将查询结果封装成`Map`对象,便于根据字段名称访问。 - **返回实体对象**: ```java String hql = "SELECT NEW Cat(c.name, c.createDate) FROM Cat c"; List<Cat> catList = session....
通过创建和使用这样一个超好用的Hibernate查询工具类,我们可以更高效地管理和操作数据库,降低开发复杂度,让开发者能够专注于业务逻辑,而不是底层的数据库交互。在大型项目中,这样的工具类是不可或缺的,它提升...
java map转实体可以利用java的反射去封装,于是就在hibernate的工具类下试着封装了下,封装完了之后感觉没必要,这完全就可以提取出来变成一个独立的工具类,而不仅仅局限于hibernate了,这样既可以满足一个hql查询...
这个方法用于设置HQL查询中的参数,它遍历Map,根据值的类型(Collection、Object[] 或单一对象)调用相应的`setParameter`或`setParameterList`方法。 - **`getcountHql(String hql)`** 这个方法用于构建统计...
在本文中,我们将深入探讨HQL(Hibernate Query Language),一种专为Hibernate ORM框架设计的查询语言,用于在Java应用程序中操作数据库。以下是一些常用HQL语句的使用与说明: 1. **HQL更新语句**: 更新操作...
1.2 Hibernate架构:主要包括配置文件(hibernate.cfg.xml)、实体类(Entity)、持久化接口(Session)和查询语言(HQL/SQL)等组件,提供了一套完整的数据访问解决方案。 二、Hibernate API关键组件 2.1 ...
在Java持久化框架Hibernate中,结构化查询是其强大功能之一,它允许开发者以面向对象的方式构建复杂的SQL查询。Criteria API就是实现这一功能的核心组件,它提供了一种更安全、可读性更强的方式来代替传统的HQL...
在Hibernate中,Criteria查询是一种高级特性,它提供了一种更面向对象的方式来执行数据库查询,使得代码更加简洁和可读。 Criteria查询的核心在于创建一个Criteria实例,它实际上是对SQL查询的封装。例如,`...
Hibernate的核心是ORM(Object-Relational Mapping),它将复杂的SQL语句和数据库交互封装起来,使开发者可以专注于业务逻辑而不是底层的数据操作。Hibernate支持多种数据库,包括MySQL、Oracle、SQL Server等,具有...
Struts2和Hibernate是两种非常流行的Java Web开发框架,它们分别负责表现层和持久层的管理。Struts2是一款强大的MVC(Model-View-Controller)框架,它提供了丰富的动作和拦截器,使得Web应用的控制逻辑更加清晰。而...
对Hibernate进行二次封装是提升开发效率和代码质量的有效手段,通过设计良好的API和统一的异常处理,可以使团队更加高效地进行数据库操作。同时,封装还能提供扩展空间,以适应项目不断变化的需求。记住,好的封装...
Session的get()和load()用于根据ID获取对象,query()和createNativeQuery()用于执行HQL和SQL查询。 六、懒加载与代理 Hibernate采用懒加载策略,延迟加载关联对象,直到真正使用时才加载。这通过代理机制实现,...
在实际的Hibernate操作中,Map经常用来映射一对多或多对一的关系,其中键是关联的主键,值是对应的对象。 总的来说,这个主题涵盖了Java开发中的重要技术,包括ORM工具Hibernate和设计模式DAO,它们都是构建可维护...
- 设置参数:通过`q.setString("name", name)`和`q.setString("pwd", pwd)`设置查询参数。 - 执行查询:执行查询并检查返回的结果列表大小是否为0,如果结果集不为空,则表示登录成功。 - 提交事务:如果查询成功,...
通过阅读和分析Hibernate 3.2的源码,我们可以深入了解ORM框架的设计理念,学习如何优化数据库操作,以及如何在实际项目中灵活运用Hibernate提供的各种功能。同时,这也有助于我们掌握Java反射、代理、元数据解析等...
Hibernate提供了两种查询方式:Criteria API和HQL(Hibernate Query Language)。Criteria API允许动态构造查询,而HQL是一种面向对象的查询语言,类似于SQL。源码分析这些查询机制,有助于优化性能和编写更简洁的...