Manager-service-之Hibernate几种查询方式,在需要情况下配合使用。
如果要用到:普通sql语句
public String getAllSubDepId(Long depId){
String sql="select t.departmentid as id from department t start with t.departmentid="+depId+" connect by prior t.departmentid=t.fatherdepartmentid";
Session session = dao.getSessionFactory().getCurrentSession();
List<Long> list=session.createSQLQuery(sql).addScalar("id",Hibernate.LONG).list();
String ids="";
for(int i=0;i<list.size();i++){
ids=ids+list.get(i);
if(i<list.size()-1)
ids=ids+",";
}
return ids;
}
带分页用HQL查询时候:
public Page<IdentityInfo> getViewObjectsNew(Page<IdentityInfo> page,IdentityInfo entity) {
String hql="from IdentityInfo t where t.delFlag=0 ";
if(entity.getDepartmentEntity()!=null&&entity.getDepartmentEntity().getDepartmentId()!=null && entity.getDepartmentEntity().getDepartmentId().compareTo(0l)>0){
hql=hql+" and t.departmentEntity.id="+entity.getDepartmentEntity().getDepartmentId();
}else{
User user=SessionManager.getUserSession();
String hasAdminRole=roleManager.hasRole(user.getId(), 104l);
if(hasAdminRole.equals("YES"))
hql=hql+" ";
else{
String ids=departmentManager.getAllSubDepId(user.getDepartment().getId());
hql=hql+"and t.departmentEntity.id in("+ids+") ";
}
}
hql=hql+" order by t.priority,t.id";
return dao.find(page, hql,null);
}
用Criterion对象查询方式:
@Transactional(readOnly = true)
public List<IdentityInfo> getAllIdentityInfo(Page<IdentityInfo> page,IdentityInfo entity) {
List<Criterion> list = new ArrayList<Criterion>();
if (entity.getName() != null && entity.getName().trim().length() > 0)
list.add(Restrictions.like("name", '%' + entity.getName() + '%'));
if (entity.getDepartmentEntity() != null && entity.getDepartmentEntity().getDepartmentId() != null &&entity.getDepartmentEntity().getDepartmentId().compareTo(0l)>0)
list.add(Restrictions.eq("departmentEntity.departmentId", entity.getDepartmentEntity().getDepartmentId()));
if (list.size() > 0)
return dao.findByCriteria( list.toArray(new Criterion[list.size()]));
else
return dao.findAll();
}
用对象的第2种形式:
public Page<ResTeam> getObjects(Page<ResTeam> page, ResTeam entity) {
Criteria critera = dao.getSession().createCriteria(ResTeam.class);
if (entity.getType()!= null && !entity.getType().equals("all")) {
critera.add(Restrictions.like("type", '%' + StrUtils
.removedPercent(entity.getType().trim()) + '%'));
}
if (entity.getName() != null && entity.getName().trim().length() > 0)
critera.add(Restrictions.like("name", '%' + StrUtils
.removedPercent(entity.getName().trim()) + '%'));
if (entity.getStationInfo() != null) {
String stationName = entity.getStationInfo().getStationName();
if (stationName != null && stationName.trim().length() > 0) {
critera.createAlias("stationInfo", "st");
critera.add(Restrictions.like("st.stationName", '%' + StrUtils
.removedPercent(stationName.trim()) + '%'));
}
}
if (entity.getBaseOrg() != null && entity.getBaseOrg().getId()!=null)
{
critera.createAlias("baseOrg", "base");
critera.add(Restrictions.eq("base.id", entity.getBaseOrg().getId()));
}
critera.add(Restrictions.not(Restrictions.eq("delflag", 1)));
critera.addOrder(Order.desc("createDate"));
return dao.findByCriteria(page, critera);
}
3种方式对比:
public Page<GroupMember> getViewObjectsNew(Page<GroupMember> page,GroupMember entity) {
*//********** 这里判断多个,首先部门对象不为空,然后部门对象的ID不为空 **********//*
//法1:
if(entity.getDepartmentEntity()!=null&&entity.getDepartmentEntity().getDepartmentId()!=null && entity.getDepartmentEntity().getDepartmentId().compareTo(0l)>0){
String hql = "from GroupMember t where t.departmentEntity.departmentId=?";
return dao.find(page, hql, new Object[]{entity.getDepartmentEntity().getDepartmentId() });
}else{
return dao.findAll(page);
}
if(entity.getGpsEntity()!=null && entity.getGpsEntity().getId()!=null && entity.getGpsEntity().getId().compareTo(0l)>0){
String hql="from GroupMember m where m.gpsEntity.id=?";
return dao.find(page, hql, new Object[]{entity.getGpsEntity().getId()});
}else{
return dao.findAll(page);
}
//法2:
Criteria criteria=dao.getSession().createCriteria(GroupMember.class);
if(entity.getGpsEntity()!=null && entity.getGpsEntity().getId()!=null && entity.getGpsEntity().getId().compareTo(0l)>0){
System.out.println(entity.getGpsEntity().getId()+" ============manage id");
criteria.add(Restrictions.eq("gpsEntity.id", entity.getGpsEntity().getId()));
}
return dao.findByCriteria(page, criteria);
}
//法3:
public Page<GroupMember> getMemberByGroup(Page<GroupMember> page,Long groupId) {
String hql="from GroupMember t where t.gpsEntity.id=? and t.infoEntity.delFlag=0 order by infoEntity.departmentEntity.parent.divNum,infoEntity.departmentEntity.priority,infoEntity.priority,t.priority";
//String hql="from GroupMember t where t.gpsEntity.id=? order by t.priority";
return dao.find(page, hql, new Object[]{groupId});
}
分享到:
相关推荐
这篇博客“Spring之Spring2.5集成Hibernate3.6”主要探讨了如何将两个经典的开源框架——Spring 2.5和Hibernate 3.6进行整合,以实现数据持久化的高效管理。 Spring 2.5版本是Spring框架的一个重要里程碑,它引入了...
在某些复杂应用中,可能需要结合使用上述几种方式。例如,对于一些核心服务使用注解驱动的事务管理,而对于其他辅助服务则采用编程式事务管理。 在配置事务时,通常需要先定义数据源(DataSource),如使用阿里...
这个框架的全称可能是Spring-SpringMVC-MyBatis-Hibernate-Manager,它整合了这几个流行的开源框架,为开发者提供了一个高效、灵活的开发环境。 1. **Spring框架**:Spring是Java企业级应用的核心框架,它提供了...
Hibernate作为ORM框架,消除了Java代码与SQL之间的直接交互,提供了一种更加面向对象的方式来操作数据库。它通过将Java类映射到数据库表,使得开发者可以像操作普通对象一样处理数据库数据。Hibernate支持多种数据库...
此外,项目的结构可能包含以下几个关键部分:实体类(Entity)、数据访问对象(DAO)、服务层(Service)和控制器(Controller)。实体类封装了数据;DAO层负责与数据库交互,实现增删改查的基本操作;服务层处理...
在IT行业中,SSH框架整合是Java Web开发中常用的一种技术栈,它由Struts、Hibernate和Spring三个组件组成,分别负责表现层、持久层和业务层的管理。这篇教程将详细介绍如何将这三个框架整合在一起,实现一个简单的...
Spring提供两种事务管理方式:编程式事务管理和声明式事务管理。编程式事务管理需要通过编码来控制事务的开始、提交、回滚等操作,而声明式事务管理则更易于维护,它通过在配置或注解中声明事务边界,由Spring自动...
为了避免 `org.springframework.dao.InvalidDataAccessApiUsageException` 的发生,可以采取以下几种解决方案: 1. **显式配置事务管理**: 在Spring的配置文件(例如 `applicationContext.xml`)中显式地配置事务...
SSH(Struts2 + Spring + Hibernate)是一种经典的Java Web开发框架,它由Struts2作为MVC框架、Spring作为依赖注入(DI)容器和事务管理器、Hibernate作为持久层ORM工具组合而成。这个框架组合为开发者提供了一个...
Spring框架提供了强大的事务管理机制,支持声明式事务管理和编程式事务管理两种方式。通过Spring事务管理器,开发者可以方便地控制事务的边界,确保数据的一致性和完整性。 **详细内容:** 1. **声明式事务管理:*...
在这个模块中,三大框架的应用可能会涉及用户登录验证(Spring Security)、数据展示(JSP或Thymeleaf模板引擎)、业务逻辑处理(Service层)、数据库操作(Hibernate)以及请求处理(Struts2 Action)等环节。...
Spring OSGi是Spring框架与OSGi(Open Service Gateway Initiative)规范相结合的一种技术,它允许在OSGi容器中运行和管理Spring应用。OSGi是一种模块化系统,为Java应用程序提供了动态部署、版本控制和依赖管理的...
标题中的“j2ee chm api ejb jboss maven”揭示了几个关键的Java企业级开发技术。这里,我们有Java 2 Platform, Enterprise Edition (J2EE)的API,Enterprise JavaBeans (EJB),Java Build Manager (Maven),以及两...
### J2EE Web 开发关键...J2EE 技术栈包含了 Java Servlet、JSP、Spring、Hibernate 和 Struts 等核心组件,这些技术共同构成了企业级应用的基础。通过学习这些技术,开发者可以构建出功能强大且可扩展的 Web 应用。
<tx:advice id="TestAdvice" transaction-manager="transactionManager"> *" propagation="REQUIRED"/> <!-- 其他方法配置... --> ``` 这里配置了所有以`save`、`del`、`update`、`add`、`find`、`get`和`...
随着博客人数的增加, Blog 作为一种新的生活方式、新的工作方式、新的学习方式已经被越来越多的人所接受,并且在改变传统的网络和社会结构:网络信息不再是虚假不可验证的,交流和沟通更有明确的选择和方向性,单一...
SSH框架是Struts+Spring+Hibernate三个开源框架的组合,是中国开发者对这三个框架整合应用的一种简称。其中Struts负责MVC(Model-View-Controller)模式中的控制器部分,Spring作为一个轻量级的应用上下文容器和依赖...
Spring 通过代理的方式实现AOP,主要有动态代理(JDK Proxy)和CGLIB两种方式。 ### Shiro 框架的使用 Shiro 是一个Java安全框架,用于身份验证、授权、加密和会话管理。它通过简单的API提供了强大的安全性支持。 ...
在Spring框架中,事务管理是核心功能之一,它确保了数据操作的一致性和完整性。本文主要探讨Spring声明式事务管理的配置,这是Spring提供的一种简便的事务管理方式,允许开发者在不编写任何事务管理代码的情况下实现...