- 浏览: 107511 次
- 性别:
- 来自: 福建厦门
文章分类
最新评论
-
yingzhixing:
收藏~
session.flush()的使用 -
strive708:
<div class="quote_title ...
hibernate+spring 的泛型dao接口和和实现类..以及配置 -
namelujl:
完美人生 www.okrs.cn
个人技术博客 www.kct ...
session.flush()的使用 -
yugiohboy:
xml文件: <bean id="t ...
hibernate+spring 的泛型dao接口和和实现类..以及配置 -
silentJesse:
zhaolei415 写道看来兄弟比较认可李善友的这些话啊!! ...
李善友七律
1.泛型dao接口
2.泛型dao接口实现类
3.PageData源代码
4.GenericsUtils 源代码
5.用于分页的PageIndex和PageView
配置
楼上的问题我也遇到了,希望楼主能帮忙解答一下吧。急求。
你晚上再来看吧..
package hibernate.basedao; import java.io.Serializable; import java.util.LinkedHashMap; import java.util.List; import co.th.tools.PageData; /** * 通用Dao父类实现的接?口,只提供常见的一些功能,其它特殊的功能,可以在子接口中定义。 * 事务也在需要的时候加到实现类中 * * @param <T> 实体类型 */ public interface GenericDao<T> { public List<T> findTbyHql(String hql); /** * by this method you can get all information about T * @return */ public List<T> findAll(); /** * 和数据库同步 * @param entityClass 实体类 * @return */ public void fulsh(); /** * 获取记录总数 * @param entityClass 实体类 * @return */ public long getCount(final String wherejpql, final Object[] queryParams); /** * 清除一级缓存的数据 */ public void clear(); /** * 保存实体 * @param entity 实体id */ public void save(Object entity); /** * 更新实体 * @param entity 实体id */ public void update(Object entity); /** * 删除实体 * @param entityClass 实体类 * @param entityids 实体id数组 */ public void delete(Serializable ... entityids); /** * 获取实体 * @param <T> * @param entityClass 实体类 * @param entityId 实体id * @return */ public T find(Serializable entityId) ; /** * 获取实体 * @param <T> * @param entityClass 实体类 * @param entityId 实体id * @return */ public T get(Serializable entityId); /** * 获取分页数据 * @param <T> * @param entityClass 实体类 * @param firstindex 开始索引 * @param maxresult 需要获取的记录数 * @return */ public PageData<T> getScrollData(int firstindex, int maxresult, String wherejpql, Object[] queryParams,LinkedHashMap<String, String> orderby); public PageData<T> getScrollData(int firstindex, int maxresult, String wherejpql, Object[] queryParams); public PageData<T> getScrollData(int firstindex, int maxresult, LinkedHashMap<String, String> orderby); public PageData<T> getScrollData(int firstindex, int maxresult); public PageData<T> getScrollData(); public PageData<T> getScrollDataByHql( final int firstindex, final int maxresult, final String hql_search, final String hql_totalRecords); public int executeDML(final String hql); public int executeDML(final String sethql, Object[] values); public List<T> limitFindByHql(final int firstindex, final int maxresult, final String wherejpql, final Object[] queryParams, final LinkedHashMap<String, String> orderby); }
2.泛型dao接口实现类
package hibernate.basedao; import java.io.Serializable; import java.sql.SQLException; import java.util.LinkedHashMap; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import co.th.tools.GenericsUtils; import co.th.tools.PageData; @SuppressWarnings("unchecked") public abstract class GenericDaoImpl<T> extends HibernateDaoSupport implements GenericDao<T>{ protected Log logger = LogFactory.getLog(GenericDaoImpl.class); protected Class<T> entityClass = GenericsUtils.getSuperClassGenricType(this.getClass()); public void clear() { getHibernateTemplate().clear(); } public void fulsh(){ getHibernateTemplate().flush(); } public void delete(Serializable... entityids) { for (int i = 0; i < entityids.length; i++) { T t = get(entityids[i]); if(t != null){ getHibernateTemplate().delete(t); } } } public T find(Serializable entityId) { if(entityId == null){ throw new RuntimeException(this.entityClass.getName()+ ":id is empty or null"); } T t = null; t = get(entityId); return t; } public T get(Serializable entityId){ if(entityId == null){ throw new RuntimeException(this.entityClass.getName()+ ":id is empty or null"); } return (T) getHibernateTemplate().get(this.entityClass, entityId); } public long getCount(final String wherejpql, final Object[] queryParams) { final String hql = "select count(o) from "+ getEntityName(this.entityClass)+ " o " + (wherejpql==null || "".equals(wherejpql.trim())? "": "where 1=1 "+ wherejpql); return (Long)getHibernateTemplate().execute(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery(hql); setQueryParams(query, queryParams); return query.uniqueResult(); } }); } public void save(Object entity) { getHibernateTemplate().save(entity); } public void update(Object entity) { getHibernateTemplate().update(entity); } @SuppressWarnings("unchecked") public PageData<T> getScrollData(final int firstindex, final int maxresult, final String wherejpql, final Object[] queryParams, final LinkedHashMap<String, String> orderby) { final PageData qr = new PageData<T>(); final String entityname = getEntityName(this.entityClass); return (PageData<T>)getHibernateTemplate().execute(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery("select o from "+ entityname+ " o "+(wherejpql==null || "".equals(wherejpql.trim())? "": "where 1=1 "+ wherejpql)+ buildOrderby(orderby)); setQueryParams(query, queryParams); if(firstindex!=-1 && maxresult!=-1) query.setFirstResult(firstindex).setMaxResults(maxresult); qr.setResultlist(query.list()); query = session.createQuery("select count(o) from "+ entityname+ " o "+(wherejpql==null || "".equals(wherejpql.trim())? "": "where 1=1 "+ wherejpql)); setQueryParams(query, queryParams); qr.setTotalRecords((Long)query.uniqueResult()); return qr; } }); } @SuppressWarnings("unchecked") public PageData<T> getScrollDataByHql(final int firstindex, final int maxresult,final String hql_search, final String hql_totalRecords) { final PageData qr = new PageData<T>(); //final String entityname = getEntityName(this.entityClass); return (PageData<T>)getHibernateTemplate().execute(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = null; query = session.createQuery(hql_search); if(firstindex!=-1 && maxresult!=-1) query.setFirstResult(firstindex).setMaxResults(maxresult); qr.setResultlist(query.list()); query = session.createQuery(hql_totalRecords); qr.setTotalRecords((Long)query.uniqueResult()); return qr; } }); } /** * 设置查询条件的参数 * @param query * @param queryParams */ protected static void setQueryParams(Query query, Object[] queryParams){ if(queryParams!=null && queryParams.length>0){ for(int i=0; i<queryParams.length; i++){ query.setParameter(i, queryParams[i]); } } } /** * 组装order by语句 * @param orderby * @return */ protected static String buildOrderby(LinkedHashMap<String, String> orderby){ StringBuffer orderbyql = new StringBuffer(""); if(orderby!=null && orderby.size()>0){ orderbyql.append(" order by "); for(String key : orderby.keySet()){ orderbyql.append("o.").append(key).append(" ").append(orderby.get(key)).append(","); } orderbyql.deleteCharAt(orderbyql.length()-1); } return orderbyql.toString(); } public PageData<T> getScrollData(int firstindex, int maxresult, String wherejpql, Object[] queryParams) { return getScrollData(firstindex, maxresult, wherejpql, queryParams, null); } public PageData<T> getScrollData(int firstindex, int maxresult, LinkedHashMap<String, String> orderby) { return getScrollData(firstindex, maxresult, null, null, orderby); } public PageData<T> getScrollData(int firstindex, int maxresult) { return getScrollData(firstindex, maxresult, null, null, null); } public PageData<T> getScrollData() { return getScrollData(-1, -1); } /** * 获取实体的名称 * @param <E> * @param clazz 实体类 * @return */ protected static <E> String getEntityName(Class<E> clazz){ String entityname = clazz.getSimpleName(); return entityname; } public List<T> findAll(){ List<T> list = getHibernateTemplate().loadAll(entityClass); return list; } public List<T> findTbyHql(String hql){ List<T> list = getHibernateTemplate().find(hql); return list; } public int executeDML(final String hql){ Integer result = 0; result = getHibernateTemplate().bulkUpdate(hql); return result; } public int executeDML(final String sethql, Object[] values){ Integer result = 0; final String entityname = getEntityName(this.entityClass); String hql = "update " + entityname + " o " + sethql ; result = getHibernateTemplate().bulkUpdate(hql, values); return result; } @SuppressWarnings("unchecked") public List<T> limitFindByHql(final int firstindex, final int maxresult, final String wherejpql, final Object[] queryParams, final LinkedHashMap<String, String> orderby) { final String entityname = getEntityName(this.entityClass); return (List<T>)getHibernateTemplate().execute(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery("select o from "+ entityname+ " o "+(wherejpql==null || "".equals(wherejpql.trim())? "": "where 1=1 "+ wherejpql)+ buildOrderby(orderby)); setQueryParams(query, queryParams); if(firstindex!=-1 && maxresult!=-1) query.setFirstResult(firstindex).setMaxResults(maxresult); return query.list(); } }); } }
3.PageData源代码
public class PageData<T> { private List<T> resultlist; private long TotalRecords; public List<T> getResultlist() { return resultlist; } public void setResultlist(List<T> resultlist) { this.resultlist = resultlist; } public long getTotalRecords() { return TotalRecords; } public void setTotalRecords(long totalRecords) { TotalRecords = totalRecords; } }
4.GenericsUtils 源代码
public class GenericsUtils { /** * 通过反射,获得指定类的父类的泛型参数的实际类型. 如BuyerServiceBean extends DaoSupport<Buyer> * * @param clazz clazz 需要反射的类,该类必须继承范型父类 * @param index 泛型参数所在索引,从0开始. * @return 范型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code> */ @SuppressWarnings("unchecked") public static Class getSuperClassGenricType(Class clazz, int index) { Type genType = clazz.getGenericSuperclass();//得到泛型父类 //如果没有实现ParameterizedType接口,即不支持泛型,直接返回Object.class if (!(genType instanceof ParameterizedType)) { return Object.class; } //返回表示此类型实际类型参数的Type对象的数组,数组里放的都是对应类型的Class, 如BuyerServiceBean extends DaoSupport<Buyer,Contact>就返回Buyer和Contact类型 Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); if (index >= params.length || index < 0) { throw new RuntimeException("你输入的索引"+ (index<0 ? "不能小于0" : "超出了参数的总数")); } if (!(params[index] instanceof Class)) { return Object.class; } return (Class) params[index]; } /** * 通过反射,获得指定类的父类的第一个泛型参数的实际类型. 如BuyerServiceBean extends DaoSupport<Buyer> * * @param clazz clazz 需要反射的类,该类必须继承泛型父类 * @return 泛型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code> */ @SuppressWarnings("unchecked") public static Class getSuperClassGenricType(Class clazz) { return getSuperClassGenricType(clazz,0); } /** * 通过反射,获得方法返回值泛型参数的实际类型. 如: public Map<String, Buyer> getNames(){} * * @param Method method 方法 * @param int index 泛型参数所在索引,从0开始. * @return 泛型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code> */ @SuppressWarnings("unchecked") public static Class getMethodGenericReturnType(Method method, int index) { Type returnType = method.getGenericReturnType(); if(returnType instanceof ParameterizedType){ ParameterizedType type = (ParameterizedType) returnType; Type[] typeArguments = type.getActualTypeArguments(); if (index >= typeArguments.length || index < 0) { throw new RuntimeException("你输入的索引"+ (index<0 ? "不能小于0" : "超出了参数的总数")); } return (Class)typeArguments[index]; } return Object.class; } /** * 通过反射,获得方法返回值第一个泛型参数的实际类型. 如: public Map<String, Buyer> getNames(){} * * @param Method method 方法 * @return 泛型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code> */ @SuppressWarnings("unchecked") public static Class getMethodGenericReturnType(Method method) { return getMethodGenericReturnType(method, 0); } /** * 通过反射,获得方法输入参数第index个输入参数的所有泛型参数的实际类型. 如: public void add(Map<String, Buyer> maps, List<String> names){} * * @param Method method 方法 * @param int index 第几个输入参数 * @return 输入参数的泛型参数的实际类型集合, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回空集合 */ @SuppressWarnings("unchecked") public static List<Class> getMethodGenericParameterTypes(Method method, int index) { List<Class> results = new ArrayList<Class>(); Type[] genericParameterTypes = method.getGenericParameterTypes(); if (index >= genericParameterTypes.length ||index < 0) { throw new RuntimeException("你输入的索引"+ (index<0 ? "不能小于0" : "超出了参数的总数")); } Type genericParameterType = genericParameterTypes[index]; if(genericParameterType instanceof ParameterizedType){ ParameterizedType aType = (ParameterizedType) genericParameterType; Type[] parameterArgTypes = aType.getActualTypeArguments(); for(Type parameterArgType : parameterArgTypes){ Class parameterArgClass = (Class) parameterArgType; results.add(parameterArgClass); } return results; } return results; } /** * 通过反射,获得方法输入参数第一个输入参数的所有泛型参数的实际类型. 如: public void add(Map<String, Buyer> maps, List<String> names){} * * @param Method method 方法 * @return 输入参数的泛型参数的实际类型集合, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回空集合 */ @SuppressWarnings("unchecked") public static List<Class> getMethodGenericParameterTypes(Method method) { return getMethodGenericParameterTypes(method, 0); } /** * 通过反射,获得Field泛型参数的实际类型. 如: public Map<String, Buyer> names; * * @param Field field 字段 * @param int index 泛型参数所在索引,从0开始. * @return 泛型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code> */ @SuppressWarnings("unchecked") public static Class getFieldGenericType(Field field, int index) { Type genericFieldType = field.getGenericType(); if(genericFieldType instanceof ParameterizedType){ ParameterizedType aType = (ParameterizedType) genericFieldType; Type[] fieldArgTypes = aType.getActualTypeArguments(); if (index >= fieldArgTypes.length || index < 0) { throw new RuntimeException("你输入的索引"+ (index<0 ? "不能小于0" : "超出了参数的总数")); } return (Class)fieldArgTypes[index]; } return Object.class; } /** * 通过反射,获得Field泛型参数的实际类型. 如: public Map<String, Buyer> names; * * @param Field field 字段 * @param int index 泛型参数所在索引,从0开始. * @return 泛型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code> */ @SuppressWarnings("unchecked") public static Class getFieldGenericType(Field field) { return getFieldGenericType(field, 0); }}
5.用于分页的PageIndex和PageView
public class PageIndex { private long startindex; private long endindex; public PageIndex(long startindex, long endindex) { this.startindex = startindex; this.endindex = endindex; } public long getStartindex() { return startindex; } public void setStartindex(long startindex) { this.startindex = startindex; } public long getEndindex() { return endindex; } public void setEndindex(long endindex) { this.endindex = endindex; } } public class PageView<T> { /** 分页数据 **/ private List<T> records; /** 页码开始索引和结束索引 **/ private PageIndex pageindex; /** 总页数 **/ private long totalpage = 1; /** 每页显示记录数 **/ private int maxresult = 12; /** 当前页 **/ private int currentpage = 1; /** 总记录数 **/ private long totalrecord; /** 尾页 **/ private int lastpage; /** 页码数量 **/ private int pagecode = 15; /** 要获取记录的开始索引 **/ public int getFirstResult() { return (this.currentpage-1)*this.maxresult; } /**取得首页**/ public int getTopPageNo() { return 1; } /** 取得尾页**/ public long getBottomPageNo() { return getTotalpage(); } /**上一页**/ public int getPreviousPageNo() { if (currentpage <= 1) { return 1; } return currentpage - 1; } /**下一页* */ public long getNextPageNo() { if (currentpage >= getBottomPageNo()) { return getBottomPageNo(); } return currentpage + 1; } public int getPagecode() { return pagecode; } public void setPagecode(int pagecode) { this.pagecode = pagecode; } public PageView(int maxresult, int currentpage) { this.maxresult = maxresult; this.currentpage = currentpage; } public void setPageData(PageData<T> pageData){ setTotalrecord(pageData.getTotalRecords()); setRecords(pageData.getResultlist()); } public long getTotalrecord() { return totalrecord; } public void setTotalrecord(long totalrecord) { this.totalrecord = totalrecord; setTotalpage(this.totalrecord%this.maxresult==0? this.totalrecord/this.maxresult : this.totalrecord/this.maxresult+1); } public List<T> getRecords() { return records; } public void setRecords(List<T> records) { this.records = records; } public PageIndex getPageindex() { return pageindex; } public long getTotalpage() { return totalpage; } public void setTotalpage(long totalpage) { this.totalpage = totalpage == 0 ? 1 : totalpage; this.pageindex = getPageIndex(pagecode, currentpage, totalpage); } public int getMaxresult() { return maxresult; } public int getCurrentpage() { return currentpage; } public int getLastpage() { return lastpage; } public static PageIndex getPageIndex(long viewpagecount, int currentPage, long totalpage){ long startpage = currentPage-(viewpagecount%2==0? viewpagecount/2-1 : viewpagecount/2); long endpage = currentPage+viewpagecount/2; if(startpage<1){ startpage = 1; if(totalpage>=viewpagecount) endpage = viewpagecount; else endpage = totalpage; } if(endpage>totalpage){ endpage = totalpage; if((endpage-viewpagecount)>0) startpage = endpage-viewpagecount+1; else startpage = 1; } return new PageIndex(startpage, endpage); } public PageView() { } public void setCurrentpage(int currentpage) { this.currentpage = currentpage; } public void setMaxresult(int maxresult) { this.maxresult = maxresult; } }
配置
<!-- 配置sessioFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation"> <value>/WEB-INF/hibernate.cfg.xml</value> </property> </bean> <!-- 配置通用dao的注入 --> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="genericDao" abstract="true" class="hibernate.basedao.GenericDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"/> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <!-- 配置事务的传播特性 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="assign*" propagation="REQUIRED" /> <tx:method name="modify*" propagation="REQUIRED" /> <tx:method name="del*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="*" read-only="true" /> </tx:attributes> </tx:advice> <aop:config proxy-target-class="true"> <!-- ************************for module:csl**************************************** --> <aop:advisor advice-ref="txAdvice" pointcut="execution (* co.th.csl.*.service.*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut="execution (* co.th.csl.*.*.service.*.*(..))" /> <!-- ************************for module:csl**************************************** --> <!-- ************************for module:content**************************************** --> <aop:advisor advice-ref="txAdvice" pointcut="execution (* co.th.content.*.*.service.*.*(..))" /> <!-- ************************for module:content**************************************** --> </aop:config> <!-- 配置哪些类哪些方法使用事务 --> <!-- <aop:config> 配置切入点(定义哪些方法要进行事务处理) <aop:pointcut id="allManager" expression="execution(* co.th.csl.contact.service.*.*(..))" /> 定义advice <aop:advisor advice-ref="txAdvice" pointcut-ref="allManager" /> </aop:config> -->
评论
4 楼
strive708
2013-04-16
yugiohboy 写道
xml文件: <bean id="testDao" parent="genericDao"/>
测试类:GenericDao<People> beanFactoryDemo=( GenericDao<People> )factory.getBean("testDao");
System.out.println(((GenericDao<People>)beanFactoryDemo) .get( new Integer(1)).getName());
会抛出异常请问怎样正确调用?
Exception in thread "main" org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: java.lang.Object; nested exception is org.hibernate.MappingException: Unknown entity: java.lang.Object
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:676)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
测试类:GenericDao<People> beanFactoryDemo=( GenericDao<People> )factory.getBean("testDao");
System.out.println(((GenericDao<People>)beanFactoryDemo) .get( new Integer(1)).getName());
会抛出异常请问怎样正确调用?
Exception in thread "main" org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: java.lang.Object; nested exception is org.hibernate.MappingException: Unknown entity: java.lang.Object
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:676)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
楼上的问题我也遇到了,希望楼主能帮忙解答一下吧。急求。
3 楼
yugiohboy
2011-08-19
xml文件: <bean id="testDao" parent="genericDao"/>
测试类:GenericDao<People> beanFactoryDemo=( GenericDao<People> )factory.getBean("testDao");
System.out.println(((GenericDao<People>)beanFactoryDemo) .get( new Integer(1)).getName());
会抛出异常请问怎样正确调用?
Exception in thread "main" org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: java.lang.Object; nested exception is org.hibernate.MappingException: Unknown entity: java.lang.Object
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:676)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
测试类:GenericDao<People> beanFactoryDemo=( GenericDao<People> )factory.getBean("testDao");
System.out.println(((GenericDao<People>)beanFactoryDemo) .get( new Integer(1)).getName());
会抛出异常请问怎样正确调用?
Exception in thread "main" org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: java.lang.Object; nested exception is org.hibernate.MappingException: Unknown entity: java.lang.Object
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:676)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
2 楼
silentJesse
2011-02-18
DancingPig 写道
楼主再发的详细点PageData GenericsUtils两个类能否也发出来参考下
谢谢啦
谢谢啦
你晚上再来看吧..
1 楼
DancingPig
2011-02-18
楼主再发的详细点PageData GenericsUtils两个类能否也发出来参考下
谢谢啦
谢谢啦
相关推荐
标题中的“基于Hibernate+Spring 泛型GenericDao”的工程源码指的是一个整合了Spring框架和Hibernate ORM技术的项目,其中使用了泛型设计模式来实现数据访问对象(DAO)。这个项目可能旨在提供一种通用、可复用且...
而DAO层通过泛型接口和实现类,实现了对所有实体类的通用操作,例如: ```java public interface GenericDao<T> { void save(T entity); T findById(Class<T> clazz, Serializable id); List<T> findAll(Class...
Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...
基于泛型的通用Dao接口和Hibernate的实现 基于泛型的通用Dao接口是指使用泛型来实现数据访问对象(DAO)的接口,主要是在使用 Hibernate 或 JPA 时使用。泛型可以使得DAO接口更灵活、更通用。 泛型Dao接口的优点:...
Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...
在传统的Hibernate使用中,针对每个实体类,我们都需要创建一个对应的Dao(Data Access Object)接口及其实现类,这无疑增加了大量重复的代码。泛型Dao的出现,就是为了解决这个问题,它允许开发者通过泛型来定义一...
在Java开发中,特别是使用Spring+Hibernate框架时,泛型DAO(Data Access Object)是常见的设计模式,它提供了对数据库操作的一般化接口,以提高代码的重用性和可维护性。本文将探讨如何设计和使用泛型Hibernate DAO...
至于`Dao经典泛型.doc`文件,可能是更深入的关于Hibernate泛型DAO的文档,可能包含了如何配置Spring、如何处理复杂查询以及如何优化泛型DAO的更多细节。阅读这份文档将进一步提升你对泛型DAO的理解和应用能力。 ...
总的来说,"Hibernate泛型DAO接口,大部分通用都已包括"意味着我们已经定义了一套完整的、适用于多种实体类的DAO操作,通过泛型减少代码冗余,提高了代码的可复用性。同时,通过`DaoUtil`这样的工具类,我们可以更...
在Java开发中,尤其是涉及到持久层操作时,Hibernate是一个非常流行的ORM(对象关系...在Spring+Hibernate环境下,通过合理地实现和使用泛型DAO,可以大大提高开发效率,降低维护难度,同时保持代码的整洁和可维护性。
- **IBaseDao** 是自定义的基础数据访问接口,文档中提到的这个接口定义了打开Session的方法以及执行HQL查询的抽象方法,具体实现可以根据不同的数据访问技术来完成。 **Hibernate框架** Hibernate是一个面向Java...
本文将深入探讨“Spring Hibernate 泛型DAO”这一主题,以及如何通过泛型DAO实现更加高效、可复用的代码。 首先,让我们理解什么是DAO(Data Access Object)模式。DAO是一种设计模式,它的主要作用是隔离业务逻辑...
2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip...
例如,一个BaseDAO接口可以定义基本的增删改查方法,而具体的DAO实现类只需要指定对应的实体类型即可。 Proxool连接池是一种数据库连接池实现,它能够有效地管理和复用数据库连接,提高系统性能,减少数据库资源的...
5. **集成Spring和Hibernate**:最后一步是确保Spring容器能够管理Hibernate DAO实例,这通常通过Spring的依赖注入来实现。 #### 结论 通过上述步骤,我们成功地在Flex+J2EE架构中集成了Spring和Hibernate。这种...
博客中可能还会涉及如何配置SSH2框架,如Spring的bean配置、Hibernate的实体映射以及Struts的action配置等。在实际项目中,为了确保SSH2与DAO泛型的无缝集成,还需要考虑事务管理、异常处理、性能优化等问题。 在...
3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3....
### 泛型Hibernate的实现与Spring集成 #### 一、泛型Hibernate概念及其实现 在Java开发领域,尤其在企业级应用开发中,Hibernate框架因其强大的对象关系映射(ORM)能力而受到广泛欢迎。泛型Hibernate是利用Java...
4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip...
本篇文章将深入探讨一个使用Spring注解和Hibernate实现的泛型DAO设计,以提高代码的复用性和可维护性。 首先,`HibernateBaseDao.java`是基础的Hibernate DAO类,它提供了对Hibernate操作的基本封装。这个类通常会...