`
amazon_cn
  • 浏览: 927 次
社区版块
存档分类
最新评论

我的spring3,hibernate3 架构基础抽象类

阅读更多
BaseService.java ,这个我在工程中使用的抽象基类,spring3,hibernate3的服务层有这个就购了:

package com.jhzp.service.base;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;

import ly.tool.utils.ref.ReflectUtils;

import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.transaction.annotation.Transactional;

import com.ibatis.sqlmap.client.SqlMapClient;
import com.jhzp.domain.Article;
import com.jhzp.domain.base.BaseDomain;
import com.jhzp.domain.constant.DomainPagination;
import com.jhzp.service.info.ConstantService;

public abstract class BaseService {

protected Logger log=Logger.getLogger(getClass());

@Autowired
private SessionFactory sessionFactory;
@Autowired
private SqlMapClient sqlMapClient;
// @Autowired
// private ConstantService cs;

public SessionFactory getSessionFactory() {
return sessionFactory;
}

public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
protected Session getHibernateSession(){
return this.getSessionFactory().getCurrentSession();
}
protected HibernateTemplate getHibernateTemplate() {
return new HibernateTemplate(this.sessionFactory);
}

protected SqlMapClient getSqlMapClient() {
return sqlMapClient;
}

protected void setSqlMapClient(SqlMapClient sqlMapClient) {
this.sqlMapClient = sqlMapClient;
}
/**
* ibatis 动态参数查询 ,返回的类型要在sql语句及ibatis配置文件中写好
*/
@Transactional(readOnly=true)
public List ilist(String selectId,Map params) throws SQLException{
return this.getSqlMapClient().queryForList(selectId, params);
}

/**
* 20140707 新增通用方法
*/
@Transactional
public void delete(Class clazz,Integer id){
Object obj=this.getHibernateSession().get(clazz,id);
this.getHibernateSession().delete(obj);
}
@Transactional
public void update(BaseDomain domain){
this.getHibernateSession().update(domain);
}
@Transactional(readOnly=true)
public Object getById(Class clazz,Integer id){
return this.getHibernateSession().get(clazz, id);
}
@Transactional(readOnly=true)
public Object loadById(Class clazz,Integer id){
return this.getHibernateSession().load(clazz, id);
}
@Transactional
public void create(BaseDomain domain){
this.getHibernateSession().save(domain);
}

@Transactional(readOnly=true)
public List hlistByParams(Class dclazz,Map<String,Object> params){
log.info("传递的查询参数:"+params);
return this.queryByParam(dclazz, params);
}
@Transactional(readOnly=true)
public List hlistByHqlAndParams(String hql,Map<String,Object> params){
return this.queryByParamAndHql(hql, params);
}
/**
* 查询所所有
*/
// @Transactional(readOnly=true)
// public List hlistAll(Class dclazz,Map<String,Object> params){
// String hql="from "+dclazz.getSimpleName();
// Query query=getHibernateSession().createQuery(hql);
// return query.list();
//
// }
/**
* 分页,多参数查询
*/
@Transactional(readOnly=true)
public List hpage(Integer index,Integer len,Class dclazz,Map<String,Object> params){
if(null==index || 0>index)
index=0;
if(null==len || 0> len)
len=20;
log.info("传递的查询参数:"+params);
String hql="from "+dclazz.getSimpleName();
Query query=this.paramizeQuery(dclazz, params);
query.setFirstResult(index);
query.setMaxResults(len);
// query.
return query.list();
}

// @Transactional(readOnly=true)
// public List hlistByHqlAndParams2(String hql,Map<String,Object> params){
// return this.queryByParamAndHql(getHibernateSession(),hql, params);
// }

/**
* hibernate 动态参数查询 ,查询参数形式只能是: name=:name, 【如果name的值为空,则不传递】
* 其他形式的查询使用自定义hql的查询queryByParamAndHql
*/
private Query paramizeQuery(Class dclazz,Map<String,Object> params){
Session session=this.getHibernateSession();
String hql="from "+dclazz.getSimpleName();
if(null==params){
return session.createQuery(hql);
}
List<String> fnamel=ReflectUtils.listPropNames(dclazz);
Set<String> pnames=params.keySet();
List<String> pnamel=new ArrayList<String>();
Iterator<String> iter=pnames.iterator();
while(iter.hasNext()){
String pname=iter.next();
if(null!=params.get(pname) && fnamel.contains(pname)){
pnamel.add(pname);
}
}

if(pnamel.size()>0){
hql=hql+" where ";
}
StringBuilder sdb=new StringBuilder();
sdb.append(hql);
int count=0;
for(String pname:pnamel){
if(!fnamel.contains(pname)){
log.info(" pname: "+pname+"参数跟属性名不同,返回了,fnamel列表: "+fnamel);
return null;
}

if(count>0){
sdb.append(" and "+ pname+" = :"+pname);
}else
sdb.append(pname+" = :"+pname);
count++;
}
hql=sdb.toString();
log.info("打印生成的hql: "+hql);
Query query=session.createQuery(hql);
for(String pname:pnamel){
Object obj=params.get(pname);
if(obj instanceof String){
query.setParameter(pname, obj);
}else if(obj instanceof BigDecimal){
query.setBigDecimal(pname, ((BigDecimal)obj));
}else if(obj instanceof BigInteger){
query.setBigInteger(pname, ((BigInteger)obj));
}else if(obj instanceof Boolean){
query.setBoolean (pname, ((Boolean)obj));
}else if(obj instanceof Byte){
query.setByte(pname, ((Byte)obj));
}else if(obj instanceof Calendar){
query.setCalendar(pname, ((Calendar)obj));
}else if(obj instanceof Date){
log.info("应用到了"+Date.class);
query.setDate(pname, ((Date)obj));
}else if(obj instanceof Double){
query.setDouble(pname, ((Double)obj));
}else if(obj instanceof Integer){
query.setDouble(pname, ((Integer)obj));
}else if(obj instanceof Locale){
query.setLocale(pname, ((Locale)obj));
}else if(obj instanceof Long){
query.setLong(pname, ((Long)obj));
}else{
query.setParameter(pname, obj);
}

}
return query;
}

protected List queryByParam(Class dclazz,Map<String,Object> params){

return this.paramizeQuery(dclazz, params).list();
}

/**
* 自定义hql,传递动态的参数
*/
protected List queryByParamAndHql(String hql,Map<String,Object> params){
Session session=this.getHibernateSession();
log.info("进入自定义hql,动态参数查询");
Query query=session.createQuery(hql);
for(String pname:params.keySet()){
if(hql.contains(pname)){
Object obj=params.get(pname);
if(obj instanceof String){
query.setParameter(pname, obj);
}else if(obj instanceof BigDecimal){
query.setBigDecimal(pname, ((BigDecimal)obj));
}else if(obj instanceof BigInteger){
query.setBigInteger(pname, ((BigInteger)obj));
}else if(obj instanceof Boolean){
query.setBoolean (pname, ((Boolean)obj));
}else if(obj instanceof Byte){
query.setByte(pname, ((Byte)obj));
}else if(obj instanceof Calendar){
query.setCalendar(pname, ((Calendar)obj));
}else if(obj instanceof Date){
query.setDate(pname, ((Date)obj));
}else if(obj instanceof Double){
query.setDouble(pname, ((Double)obj));
}else if(obj instanceof Integer){
query.setDouble(pname, ((Integer)obj));
}else if(obj instanceof Locale){
query.setLocale(pname, ((Locale)obj));
}else if(obj instanceof Long){
query.setLong(pname, ((Long)obj));
}else{
query.setParameter(pname, obj);
}
}
}

try {
return query.list();
} catch (Exception e) {
e.printStackTrace();
log.error("第二查询出错了。");
return null;
}
}
protected List queryByParamAndHql2(String hql,Map<String,Object> params){
Session session=this.getHibernateSession();
Query query=session.createQuery(hql);
query.setProperties(params);
try {
return query.list();
} catch (Exception e) {
e.printStackTrace();
log.error("第二查询出错了。");
return null;
}
}
}
分享到:
评论

相关推荐

    spring3 hibernate3 整合

    3. **数据访问对象(DAO)**:Spring的DAO支持包括定义DAO接口和实现类,以及使用HibernateTemplate或HibernateDaoSupport作为基础类,简化与Hibernate Session的交互。 4. **实体管理**:在Hibernate中,实体类是...

    struts2 spring hibernate 整合架构

    Spring还提供了事务管理、数据源管理、JDBC抽象层等功能,以及对其他框架(如Hibernate)的集成支持。此外,Spring MVC是Spring提供的一个Web MVC框架,与Struts2类似,但更灵活和轻量级。 3. Hibernate:Hibernate...

    Java Web 基于Spring Struts Hibernate 轻量级架构开发基础

    在"Java Web 基于Spring Struts Hibernate 轻量级架构开发"一书的3-6章中,你可能会学习到以下知识点: 1. Spring框架的入门:包括Spring环境的搭建、IoC容器的使用以及Bean的生命周期管理。 2. Spring AOP的理解:...

    Struts2 Spring3 Hibernate3 整合必须包(很完整)

    整合Struts2、Spring3和Hibernate3可以实现高效的MVC架构,其中Struts2处理前端请求,Spring3作为整体的控制层,管理对象和事务,而Hibernate3则负责数据访问。整合的关键在于配置: 1. **配置Struts2-Spring插件**...

    spring mvc + spring + hibernate 全注解整合开发视频教程 11

    在本教程中,我们将深入探讨如何使用Spring MVC、Spring和Hibernate三大框架进行全注解的整合开发。这个视频教程系列的第11部分,重点可能是建立在前几部分的基础之上,进一步深化对这三个核心技术的理解和实践。 ...

    Struts2 Spring3 Hibernate4 框架完美整合

    Struts2、Spring3和Hibernate4是Java Web开发中三个非常重要的开源框架,它们分别负责MVC模式中的表现层、业务层和数据访问层。这三个框架的整合,通常被称为SSH整合,可以提供一个高效、灵活且功能强大的企业级应用...

    Spring集成Hibernate所需jar包

    在Java企业级开发中,Spring和Hibernate是两个非常重要的框架,Spring作为一个全面的轻量级容器,负责管理和协调应用组件,而Hibernate则是一个强大的对象关系映射(ORM)框架,处理数据库交互。将这两个框架集成...

    基于Struts和Hibernate和Spring的J2EE架构研究

    ### 基于Struts、Hibernate与Spring的J2EE架构研究 #### 摘要与背景 本文探讨了如何利用Struts、Hibernate与Spring这三个开源框架构建一个强大的、高效的且易于扩展的J2EE分层架构。MVC(Model-View-Controller)...

    Spring,Hibernate整合源码

    源码分析通常涉及对配置文件的理解,如Spring的beans.xml和Hibernate的hibernate.cfg.xml,以及相关类的设计和交互。此外,还可以通过源码学习到如何处理异常、优化数据库操作,以及如何设计符合松耦合原则的架构。

    Spring Struts Hibernate的简介

    - 在SSH框架中,Spring作为业务层的核心,管理对象的生命周期和依赖关系,可以集成Struts的Action,处理事务管理,以及提供数据访问抽象,如Hibernate。 3. **Hibernate**: - Hibernate是一个对象关系映射(ORM...

    spring+hibernate整合jar包

    在Java Web开发中,Spring、Hibernate以及Spring MVC是三个非常重要的框架。它们分别负责不同的职责:Spring作为一个全面的轻量级应用框架,提供依赖注入(DI)和面向切面编程(AOP)等功能;Hibernate是一个对象...

    Spring3+Hibernate3所需包及配置文件

    标题 "Spring3+Hibernate3所需包及配置文件" 指的是在开发Java Web应用程序时,结合Spring框架的第3个版本(Spring 3)与Hibernate ORM框架的第3个版本(Hibernate 3)所必需的库文件和配置文档。这个组合常用于实现...

    Spring整合HIbernate

    3. **DAO(Data Access Object)抽象**:Spring的HibernateTemplate和HibernateDaoSupport为编写DAO层代码提供了便利,简化了与Hibernate Session的交互。 4. **基于注解的配置**:Spring 3.0及以上版本支持基于...

    SSH(Spring+Hibernate+Struts2)框架整合必须的85个jar包

    SSH框架整合是Java Web开发中常见的一种技术栈,由Spring、Hibernate和Struts2三个开源框架组合而成。这个组合提供了一种高效、灵活且可扩展的解决方案,用于构建企业级的Web应用程序。以下是对SSH框架整合及其中...

    struts+spring+hibernate

    Spring还提供了事务管理、数据访问抽象、服务层支持等,可以很好地集成其他框架,如Hibernate。在SSH中,Spring主要负责整个应用的上下文管理,包括对Struts和Hibernate的集成。 Hibernate 是一个对象关系映射(ORM...

    JavaEE spring和Hibernate整合(没有hibernate.cfg.xml)

    "SSH"是Struts、Spring和Hibernate的缩写,代表了经典的JavaEE三层架构模型:表现层(Struts)、业务逻辑层(Spring)和数据访问层(Hibernate)。在这个场景中,我们将探讨如何在不使用`hibernate.cfg.xml`配置文件...

    struts2spring3hibernate3.3框架包.

    Struts2、Spring3和Hibernate3.3是Java Web开发中的三大主流框架,它们的集成使用可以构建出高效、稳定且可维护的Web应用程序。下面将详细介绍这三个框架以及它们的集成应用。 Struts2作为MVC(Model-View-...

    struts+spring+hibernate图解

    Struts负责处理用户请求并呈现视图,Spring作为架构控制中心,协调各个组件,管理对象的生命周期,同时提供事务管理和数据访问的抽象。Hibernate则负责数据的持久化,将Java对象与数据库表进行映射,使得数据操作...

    spring+hibernate+struts架包

    Spring、Hibernate和Struts是Java开发中的三大主流框架,它们分别负责不同的职责,共同构建了企业级应用的基础架构。Spring作为一个全面的轻量级容器,提供了依赖注入(DI)和面向切面编程(AOP)的功能,使得代码...

    struts1+spring+hibernate+ibatis集成

    Struts1、Spring、Hibernate和iBatis是Java Web开发中的四大框架,它们共同构建了一个强大的后端架构,用于处理复杂的企业级应用。这个集成方案旨在优化开发流程,提高代码的可维护性和可扩展性。 Struts1是MVC...

Global site tag (gtag.js) - Google Analytics