`

GenericSpringDAO<T extends ...>

阅读更多


import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.SQLQuery;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Restrictions;
import org.hibernate.impl.AbstractQueryImpl;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

 

 

 

@Repository
public class GenericSpringDAO<T extends AbstractPersistentVO>
 extends HibernateDaoSupport
  implements GenericDAOIF<T> {
 
 /**
  * Definite Logger
  */
 private static final Logger LOGGER = Logger.getLogger(GenericSpringDAO.class.getName());
 
 /**
  * Definite template class
  */
 private Class<T> persistentClass;
 
    /**
     *  Default constructor of GenericSpringDAO
     */
 public GenericSpringDAO(){
  super();
 }
 
 /**
  * constructor
  * @param sessionFactory sessionFactory
  */
 @SuppressWarnings("unchecked")
 public GenericSpringDAO(SessionFactory sessionFactory){
  this.persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
  setSessionFactory(sessionFactory);
 }

 public Class<T> getPersistentClass(){
  return persistentClass;
 }
 
 /**
  * findById method
  * @param id id
   */
 @SuppressWarnings("unchecked")
 public T findById(Serializable id){
  T t = (T) getSession().get(getPersistentClass(), id);

  LOGGER.info("Find by ID for " + getPersistentClass().getSimpleName() + ", using id = '" + id + "', returning: " + ((t==null)?null:t.toString()));
  
  return t;
 }

 /**
  * findAll 
  */
 public List<T> findAll(){
  LOGGER.info("Find all for " + getPersistentClass().getSimpleName() + ".");
  List<T> list = findByCriteria();
  logListResults("Find all", list);
  return list;
 }


 /**
  * findByExample
  * @param exampleInstance exampleInstance
  * @param excludeProperty excludeProperty
  * @return list
  */
 @SuppressWarnings("unchecked")
 public final List<T> findByExample(T exampleInstance, String... excludeProperty)
 {
  Criteria c = prepareExampleCriteria(exampleInstance, excludeProperty);
  LOGGER.info("Find by example for " + getPersistentClass().getSimpleName() + ", using criteria = " + c.toString() + ".");
  List<T> list = c.list();
  logListResults("Find by example", list);
  return list;
 }
 
 /**
  * findByExample
  * @param exampleInstance exampleInstance
  * @param criterion criterion
  * @param excludeProperty excludeProperty
  * @return list
  */
 @SuppressWarnings("unchecked")
 public final List<T> findByExample(T exampleInstance,Criterion criterion , String... excludeProperty)
 {
  Criteria c = prepareExampleCriteria(exampleInstance, excludeProperty);
  c.add(criterion);
  LOGGER.info("Find by example for " + getPersistentClass().getSimpleName() + ", using criteria = " + c.toString() + ".");
  List<T> list = c.list();
  logListResults("Find by example", list);
  return list;
 }

 /**
  * findUniqueByExample
  * @param exampleInstance exampleInstance
  * @param excludeProperty excludeProperty
  * @return t
  */
 @SuppressWarnings("unchecked")
 public T findUniqueByExample(T exampleInstance, String... excludeProperty){
  Criteria c = prepareExampleCriteria(exampleInstance, excludeProperty);
  LOGGER.info("Find Unique by example for " + getPersistentClass().getSimpleName() + ", using criteria = " + c.toString() + ".");
  T t = (T)c.uniqueResult();
  LOGGER.info("Find Unique by example for " + getPersistentClass().getSimpleName() + ", using example = " + exampleInstance + ", returning: " + ((t==null)?null:t.toString()));
  return t;
 }

 /**
  * findUniqueByExample
  * @param query sql query
  * @return list
  */
 @SuppressWarnings("unchecked")
 protected final List<T> executeQueryList(SQLQuery query){
  StringBuilder params = new StringBuilder();
  if (query instanceof AbstractQueryImpl){
   params.append(", using params = ");
   Object[] values = ((AbstractQueryImpl)query).getQueryParameters(null).getPositionalParameterValues();
   for (int i = 0; i < values.length; i++){
    if (i!=0){
     params.append(", ");
    }
    params.append(values[i].toString());
   }
  }
  LOGGER.info("Execute Query for " + getPersistentClass().getSimpleName() + ", using query = " + query.getQueryString() + params.toString() + ".");
  List<T> result =  query.list();
  logListResults("Execute Query", result);
  return result;
 }

 /**
  * executeQuery
  * @param criteria criteria
  * @return list
  */
 @SuppressWarnings("unchecked")
 protected final List<T> executeQuery(Criteria criteria){
  LOGGER.info("Execute Query for " + getPersistentClass().getSimpleName() + ", using criteria = " + criteria.toString() + ".");
  List<T> result =  criteria.list();
  logListResults("Execute Query", result);
  return result;
 }
 
 /**
  * prepareBlankCriteria
  * @return criteria
  */
 protected Criteria prepareBlankCriteria(){
  Criteria crit = getSession().createCriteria(getPersistentClass());
  return crit;
 }
 
 /**
  * injectFindByExampleExcludes
  * @param vo vo
  * @return string[]
  */
 protected String[] injectFindByExampleExcludes(T vo){
  //override in subclass as needed
  return null;
 }
 
 /**
  * injectFindByExampleCriteria
  * @param criteria criteria
  * @param vo vo
  */
 protected void injectFindByExampleCriteria(Criteria criteria, T vo){
  //override in subclass as needed
 }
 
 /**
  * prepareExampleCriteria
  * @param exampleInstance exampleInstance
  * @param excludeProperty excludeProperty
  * @return criteria
  */
 protected Criteria prepareExampleCriteria(T exampleInstance, String... excludeProperty){
  String[] excludes = injectFindByExampleExcludes(exampleInstance);
  if (excludes != null){
   List<String> excludeList = new ArrayList<String>(Arrays.asList(excludes));
   if (excludeProperty != null){
    Collections.addAll(excludeList, excludeProperty);
   }
   excludeProperty = new String[excludeList.size()];
   excludeProperty = excludeList.toArray(excludeProperty);
  }

  Criteria crit = prepareBlankCriteria();
  Example example = Example.create(exampleInstance);
  for (String exclude : excludeProperty){
   example.excludeProperty(exclude);
  }
  crit.add(example);
  crit.setMaxResults(1000);
  injectFindByExampleCriteria(crit, exampleInstance);
  return crit;
 }
 
 /**
  *
  * @param c criteria
  * @param propertyName property name
  * @param startDate start date
  * @param endDate end date
  * @return The criteria to allow call chaining
  */
 protected Criteria addDateRangeCriteria(Criteria c, String propertyName, Date startDate, Date endDate){
  c.add(Restrictions.ge(propertyName, startDate));
  c.add(Restrictions.le(propertyName, endDate));
  return c;
 }

 /**
  * Use this inside subclasses as a convenience method.
  * @param criterion criterion
  * @return list
  */
 @SuppressWarnings("unchecked")
 protected List<T> findByCriteria(Criterion... criterion){
  Criteria crit = getSession().createCriteria(getPersistentClass());
  for (Criterion c : criterion){
   crit.add(c);
  }
  return crit.list();
 } 
 
 /**
  * create
  * @param entity entity
  * @return entity
  */
 public T create(T entity){
  LOGGER.info("Create for " + getPersistentClass().getSimpleName() + ", using entity = " + entity + ".");
  getSession().save(entity);
  LOGGER.info("Create for " + getPersistentClass().getSimpleName() + ", returning = " + entity + ".");
  return entity;
 }
 
 /**
  * Persist
  * @param entity entity
  * @return entity
  */
 public T persist(T entity){
  LOGGER.info("Persist for " + getPersistentClass().getSimpleName() + ", using entity = " + entity + ".");
  getSession().persist(entity);
  LOGGER.info("Persist for " + getPersistentClass().getSimpleName() + ", returning = " + entity + ".");
  return entity;
 }

 /**
  * update method
  * @param entity entity
  * @return entity
  */
 @SuppressWarnings("unchecked")
 public T update(T entity){
  LOGGER.info("Update for " + getPersistentClass().getSimpleName() + ", using entity = " + entity + ".");

  if (!getSession().contains(entity)){
   entity = (T)getSession().merge(entity);
  }
  else{
   getSession().update(entity);
  }
  LOGGER.info("Update for " + getPersistentClass().getSimpleName() + ", returning = " + entity + ".");
  return entity;
 }
 
 /**
  * delete method
  * @param entity entity
  */
 public void delete(T entity){
  LOGGER.info("Delete for " + getPersistentClass().getSimpleName() + ", using entity = " + entity + ".");
  getSession().delete(entity);
 }

 /**
  * detach
  * @param entity entity
  */
 public void detach(T entity){
  LOGGER.info("Detaching entity : " + entity + ".");
  getSession().evict(entity);
 }

 /**
  * logListResults
  * @param methodName method name
  * @param list log list
  */
 private void logListResults(String methodName, List<T> list){
  //String lineSep = AbstractInitializer.getInitializer().getLineSep();
  String lineSep = "/";
  List<T> logList = null;
  String debugMsg = "";
  if (!LOGGER.isDebugEnabled() && list.size() > 10){
   logList = list.subList(0, 10);
   debugMsg = "  Only logging first 10 records.";
  }
  else{
   logList = list;
  }
  StringBuffer sb = new StringBuffer(logList.size() * 100);
  sb.append(debugMsg);
  for (T t : logList){
   sb.append(lineSep);
   sb.append(t.toString());
  }
  
  LOGGER.info(methodName + " for " + getPersistentClass().getSimpleName() + ", returning " + list.size() + " records." + sb.toString());
 } 
 
}

 

 

Daoimpl:

........

 

/**
  * injectFindByExampleCriteria
  * @param criteria criteria
  * @param countryLanguageVO CountryLanguageVO
  */
 @Override
 public void injectFindByExampleCriteria(Criteria criteria,
   CountryLanguageVO countryLanguageVO) {
  if (null != countryLanguageVO.getCountryVO()) {
   if (null != countryLanguageVO.getCountryVO().getCountryId()) {
    criteria.add(Restrictions.eq("countryVO", countryLanguageVO
      .getCountryVO()));
   }
   else {
    Example example = Example.create(countryLanguageVO
      .getCountryVO());
    criteria.createCriteria("countryVO").add(example);
   }
  }
  if (null != countryLanguageVO.getLanguageVO()) {
   if (null != countryLanguageVO.getLanguageVO().getLanguageCd()) {
    criteria.add(Restrictions.eq("languageVO", countryLanguageVO
      .getLanguageVO()));
   }
   else {
    Example example = Example.create(countryLanguageVO
      .getLanguageVO());
    criteria.createCriteria("languageVO").add(example);
   }
  }
 }

 

 

分享到:
评论

相关推荐

    Hibernate使用技巧汇总

    &lt;br&gt; Collection类型属性中 &lt;br&gt;&lt;br&gt;...............&lt;br&gt;&lt;br&gt;&lt;br&gt;...............&lt;br&gt;&lt;br&gt;&lt;br&gt;27.Spring的参数化事务管理功能相当强大,笔者建议在基于Spring Framework的应用 &lt;br&gt;开发中,尽量使用容器管理事务,以...

    Java中List<? extends T>与List<? super T>的区别(值得珍藏)

    extends T&gt; 表示这个列表可以包含类型为 T 或 T 的子类型的对象。换句话说,这个列表可以是一个 T 类型的列表,也可以是一个 T 的任何子类型的列表。 2. List&lt;? super T&gt; List&lt;? super T&gt; 表示这个列表可以包含...

    JAVA编写计算器

    &lt;br&gt;//继承一个类&lt;br&gt;public class Untitled1&lt;br&gt;extends Frame {&lt;br&gt;//构造各种组件&lt;br&gt;TextField t = new TextField(" ");&lt;br&gt;TextField tt = new TextField(" ");&lt;br&gt;Label l = new Label(" 我的计算器");&lt;br&gt;...

    struts 标签 logic:iterate使用 logic:iterate

    DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;&lt;br&gt;&lt;html&gt;&lt;br&gt; &lt;head&gt;&lt;br&gt; &lt;/head&gt;&lt;br&gt; &lt;body&gt;&lt;br&gt; &lt;table&gt;&lt;br&gt; &lt;tr&gt;&lt;br&gt; &lt;td&gt;&lt;%@ include file="../menu.txt"%&gt;&lt;br&gt; &lt;/td&gt;&lt;br&gt; &lt;/tr&gt;...

    JI记事本

    &lt;br&gt;&lt;br&gt;public class Note extends JFrame &lt;br&gt;{ &lt;br&gt;boolean isChange=false; &lt;br&gt;boolean wasChange=false; &lt;br&gt;JMenuBar menuBar=new JMenuBar(); &lt;br&gt;&lt;br&gt;JMenu menuFile=new JMenu("File"); &lt;br&gt;JMenuItem ...

    Visual C++ 编程资源大全(英文源码 其它)

    1,01.zip&lt;br&gt;Output&lt;br&gt;显示所有的调试信息(5KB)&lt;END&gt;&lt;br&gt;2,02.zip&lt;br&gt;Some general debugging tips&lt;br&gt;一般的调试技巧(11KB)&lt;END&gt;&lt;br&gt;3,03.zip&lt;br&gt;Debugging ISAPI extension&lt;br&gt;调试ISAPI扩展(4KB)&lt;END&gt;&lt;br&gt;4,04....

    Java测试题2答案

    &lt;br&gt; }&lt;br&gt;}&lt;br&gt;&lt;br&gt;答案::填空第1题&lt;br&gt;x=10,a=3,b=4,c=5&lt;br&gt;填空第2题&lt;br&gt;java.util&lt;br&gt;填空第3题&lt;br&gt;(public )(static )(void)(main)(String args[])&lt;br&gt;填空第4题&lt;br&gt;1&lt;br&gt;填空第5题&lt;br&gt;

    Java测试题3答案

    &lt;br&gt;23、 public class ko10_1 extends Thread&lt;br&gt;{ &lt;br&gt;int n;&lt;br&gt;ko10_1()&lt;br&gt;{&lt;br&gt;Thread td=new Thread(this);&lt;br&gt;td.start();&lt;br&gt;}&lt;br&gt;public void run()&lt;br&gt;{&lt;br&gt;for (n=0;n&lt;6;n++)&lt;br&gt;{&lt;br&gt;try&lt;br&gt;{&lt;br&gt;...

    Java测试题1答案

    &lt;br&gt; }&lt;br&gt;}&lt;br&gt;要求:完成Student类的代码,在控制台输出:Student Alice is 23 years old.&lt;br&gt;11根据JavaBean规范,完成下面的JavaBean?&lt;br&gt;public class Student{&lt;br&gt; private String name;&lt;br&gt; private byte age...

    Visual C++ 编程资源大全(英文源码 控件)

    (2KB)&lt;END&gt;&lt;br&gt;28,listfind.zip&lt;br&gt;This sample shows how to use the CList&lt;&gt; template. (9KB)&lt;END&gt;&lt;br&gt;29,ndbrow.zip&lt;br&gt;This Visual C++ 6 project shows how to create an MDI application that hosts ...

    程序设计基础答案

    〖程序设计基础〗练习题1&lt;br&gt;一、选择题(每题1分,共30分)&lt;br&gt;...&lt;br&gt;public class myprogram extends _______//定义小程序的主类&lt;br&gt;{&lt;br&gt;Label p1;&lt;br&gt;TextField in;&lt;br&gt;public void init()&lt;br&gt;{ p1=new Label("请...

    Java学习题答案

    对象成员变量在对象创建时会获得一个缺省的初始值.&lt;br&gt;5.Java数组随时可以改变大小.&lt;br&gt;6.InputStream和OutputStream读写的数据是8位的.&lt;br&gt;7.Java是强类型语言.&lt;br&gt;8.Java没有指针,引用不能等同于...

    Java技能训练题库

    实训项目1&lt;br&gt;实训说明:1、本技能项目采用上机操作测试,时间为30分钟。&lt;br&gt; 2、请在横线上填上相应的程序代码。...&lt;br&gt;public class Test1 extends Applet{&lt;br&gt; int OutX = 20, OutY = 20;&lt;br&gt;......

    struts2实例 学生信息管理系统

    &lt;package name="Student_CRUD_DEMO" extends="struts-default" namespace="/jsp"&gt; &lt;action name="add" class="cn.fjnu.edu.action.AddAction" method="addStu"&gt; &lt;result name="success"&gt;list.jsp&lt;/result&gt; &lt;/...

    网站登录页面代码实例(JSP+Servlet+JavaBean)

    out.println("&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;hr&gt;&lt;center&gt;&lt;font color=red size=12&gt;&lt;B&gt;"); try...{ UserBean user=new UserBean(); if(user.check(name,pword)) out.println("登陆成功"); else out.println("登陆失败"); }...

    OA_struts2_hibernate3_spring2.5.rar

    &lt;package name="struts2" extends="struts-default"&gt; &lt;global-results&gt; &lt;result name="add_success" type="redirect"&gt;/common/pub_add_success.jsp&lt;/result&gt; &lt;result name="del_success" type="redirect...

    Cassandra单元测试CassandraUnit.zip

    &lt;keyspace &lt;name&gt;beautifulKeyspaceName&lt;/name&gt; &lt;columnFamilies&gt; &lt;columnFamily&gt; &lt;name&gt;beautifulColumnFamilyName&lt;/name&gt; &lt;row&gt; &lt;key&gt;key10&lt;/key&gt; &lt;column&gt; &lt;name&gt;name11&lt;/name&gt; &lt;value&gt;value11&lt;/value&gt; ...

    struts-2.3.4.1所需的jar文件

    接触新版本出了问题后,解决了把jar文件...&lt;package name="default" namespace="/" extends="struts-default"&gt; &lt;action name="helloworld"&gt; &lt;result&gt; /helloWorld.jsp &lt;/result&gt; &lt;/action&gt; &lt;/package&gt; &lt;/struts&gt;

    网站登录页面实例

    out.println("&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;hr&gt;&lt;center&gt;&lt;font color=red size=12&gt;&lt;B&gt;"); try...{ UserBean user=new UserBean(); if(user.check(name,pword)) out.println("登陆成功"); else out.println("登陆失败"); }...

    JSTL详细标签库介绍

    target=_blank&gt;更多...&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;&lt;/DIV&gt; &lt;DIV id=right1&gt;&lt;BR&gt; &lt;H2&gt;关于java异常处理(讲义)&lt;/H2&gt;&lt;BR&gt;&lt;BR&gt; &lt;DIV align=right&gt;作者:&nbsp;&nbsp;&nbsp;&nbsp;文章来源:&lt;BR&gt;发布日期:2006年07月21日&nbsp;&...

Global site tag (gtag.js) - Google Analytics