freemaker的配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="freemarkerSettings"> <props> <prop key="default_encoding">UTF-8</prop> <prop key="date_format">yyyy-MM-dd</prop> <prop key="time_format">HH:mm</prop> <prop key="datetime_format">yyyy-MM-dd HH:mm</prop> <prop key="number_format">#.########</prop> <!-- 出现异常时的处理方式,debug为在后台输出异常并抛出异常,html_debug为在后台和页面输出异常,rethrow为不做处理直接抛出异常,ignore为在后台输出异常但在页面忽略异常 --> <prop key="template_exception_handler">ignore</prop> <!-- 是否不处理空值 --> <prop key="classic_compatible">true</prop> <prop key="auto_import">static/comm/commons.ftl as page</prop> </props> </property> <property name="templateLoaderPath" value="/" /> </bean>
<bean id="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <!-- 模板是否可以直接获取request的值 --> <property name="exposeRequestAttributes" value="true" /> <!-- 模板是否可以直接获取session的值 --> <property name="exposeSessionAttributes" value="false" /> <property name="prefix" value="/" /> <property name="suffix" value=".ftl" /> <property name="contentType" value="text/html; charset=UTF-8" /> </bean>
<!-- 获取WebApplicationContext --> <bean class="com.util.WebApplicationContextUtil" /> 获取工具类 </beans>
spring核心文件 扫描控制层
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/> <context:component-scan base-package="com.guu.uurms.controller"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!--文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="200000000" /> </bean> </beans>
扫描任务调度
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"> <context:component-scan base-package="com.task"/> <task:executor id="executor" pool-size="15"/> 任务调度并发数 <task:scheduler id="scheduler" pool-size="30"/> 任务调度的最大任务数量 <task:annotation-driven executor="executor" scheduler="scheduler"/> </beans>
dwr的扫描
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <dwr:configuration/> <dwr:annotation-scan base-package="com.dwr" scanDataTransferObject="false"/> </beans>
注解的方式获取实体
<context:annotation-config /> 注解方式使用实体bean <context:component-scan base-package="com..dao.jdbcimpl" />
<!-- 用annotation的bean不需要配置hbm.xml --> <property name="packagesToScan">
<bean>的bean的形式配置数据源》 <list> <value>com.**.po</value> </list> </property>
<配置sessionFactory>
<!-- 配置事物 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <tx:annotation-driven transaction-manager="transactionManager"/>
三个规范文件
/
* DAOBean的命名规则是将DAO的首子母大写并将DAO_IMPLEMENT_SUFFIX后缀去掉 */ public class DAOBeanNameGenerator implements BeanNameGenerator { private final Log LOG = LogFactory.getLog(getClass()); private static final String DAO_IMPLEMENT_SUFFIX = "Implement";
public String generateBeanName(BeanDefinition definition,BeanDefinitionRegistry registry) { String beanName = StringUtils.capitalize(StringUtils.unqualify(definition.getBeanClassName())); beanName = beanName.endsWith(DAO_IMPLEMENT_SUFFIX)?beanName.substring(0,beanName.length()-DAO_IMPLEMENT_SUFFIX.length()):beanName; LOG.info("generateBeanName:"+beanName); return beanName; }
/** * Sequence的命名规则是将bean的大写字母用_分开,小写字母转大写,最后加上_S的后?? */ public class BaseBeanSequenceGenerator extends SequenceGenerator { @Override public void configure(Type type,Properties params,Dialect dialect) throws MappingException { //System.out.println("configure("+type+","+params+","+dialect); if(!params.containsKey(SequenceGenerator.SEQUENCE)) { String tableName = params.getProperty("identity_tables"); if(tableName==null) tableName = params.getProperty("target_table"); if(tableName==null) throw new MappingException("unknows table name:"+params); params.setProperty(SequenceGenerator.SEQUENCE,tableName+"_S"); } super.configure(type,params,dialect); }
public class BaseBeanNamingStrategy extends EJB3NamingStrategy { private static final long serialVersionUID = -5742401920577663212L; public static final NamingStrategy INSTANCE = new BaseBeanNamingStrategy();
@Override public String propertyToColumnName(String propertyName) { return addUnderscores(propertyName); } @Override public String classToTableName(String className) { return addUnderscores(className.replace("Bean","")); } private static String addUnderscores(String name) { StringBuilder sb = new StringBuilder(name.replace('.','_')); int i = 0; while(i < sb.length()) { if(Character.isLowerCase(sb.charAt(i++))) { if(i>2) sb.insert(i-2,'_'); break; } } while(i<sb.length()-1) { if(Character.isLowerCase(sb.charAt(i-1)) && Character.isUpperCase(sb.charAt(i)) && Character.isLowerCase(sb.charAt(i+1))) { sb.insert(i++,'_'); } i++; } return sb.toString().toUpperCase(); }
/** * Entity的表名和字段名命名规则是将大写字母用_分开,小写字母转大写,结尾的Bean去掉 */ public class BaseBeanNamingStrategy extends EJB3NamingStrategy { private static final long serialVersionUID = -5742401920577663212L; public static final NamingStrategy INSTANCE = new BaseBeanNamingStrategy();
@Override public String propertyToColumnName(String propertyName) { return addUnderscores(propertyName); } @Override public String classToTableName(String className) { return addUnderscores(className.replace("Bean",'_'); } i++; } return sb.toString().toUpperCase(); }
package com.guu.uurms.dao.base;
import java.io.Serializable; import java.util.Collection; import java.util.List; import java.util.Map;
/** * DAO的base类 定义通用的抽象方法 */ public interface BaseDAO<T extends Serializable> { /** * 根据sid得到对像 * * @param sid * @return */ public abstract T getBeanBySid(Long sid);
/** * 保存对像 * * @param bean * @return */ public abstract void saveBean(T obj);
/** * 更新对像 * * @param obj * @return */ public abstract void updateBean(T obj);
/** * 删除对像 * * @param obj * @return */ public abstract void deleteBean(T obj);
/** * 根据条件查找记录并分页 * * @param eqName * @param eqValue * @param currypage * @param pagesize * @return */ public abstract List<T> getBeanListByEq(String eqName,Object eqValue,int currypage,int pagesize);
/** * 根据条件查找记录并分页排序 * * @param eqName * @param eqValue * @param currypage * @param pagesize * @param order * @param asc * @return */ public abstract List<T> getBeanListByEq(String eqName,int pagesize,String order,boolean asc);
/** * 根据条件获取记录总数 * * @param eqName * @param eqValue * @return */ public abstract long getBeanCountByEq(String eqName,Object eqValue);
/** * 根据条件查找记录并分页 * * @param eq * @param currypage * @param pagesize * @return */ public abstract List<T> getBeanListByEq(Map<String,Object> eq,int pagesize);
/** * 根据条件查找记录并分页排序 * * @param eq * @param currypage * @param pagesize * @param order * @param asc * @return */ public abstract List<T> getBeanListByEq(Map<String,boolean asc);
/** * 根据条件获取记录总数 * * @param eq * @return */ public abstract long getBeanCountByEq(Map<String,Object> eq);
/** * 查找记录并分页 * * @param currypage * @param pagesize * @return */ public abstract List<T> getBeanList(int currypage,int pagesize);
/** * 查找记录并分页排序 * * @param currypage * @param pagesize * @param order * @param asc * @return */ public abstract List<T> getBeanList(int currypage,boolean asc);
/** * 获取记录总数 * * @return */ public abstract long getBeanCount();
/** * 查找所有记录 * * @return */ public abstract List<T> getBeanList();
/** * 查找所有记录并排序 * * @param order * @param asc * @return */ public abstract List<T> getBeanList(String order,boolean asc);
/** * 根据条件查找记录 * * @param eqName * @param eqValue * @return */ public abstract List<T> getBeanListByEq(String eqName,Object eqValue);
/** * 根据条件查找记录并排序 * * @param eqName * @param eqValue * @param order * @param asc * @return */ public abstract List<T> getBeanListByEq(String eqName,boolean asc);
/** * 根据条件查找记录 * * @param eq * @return */ public abstract List<T> getBeanListByEq(Map<String,Object> eq);
/** * 根据条件查找记录并排序 * * @param eq * @param order * @param asc * @return */ public abstract List<T> getBeanListByEq(Map<String,boolean asc);
/** * 根据条件得到唯一对像 * * @param eqName * @param eqValue * @return */ public abstract T getBeanByEq(String eqName,Object eqValue);
/** * 根据条件得到唯一对像 * * @param eq * @return */ public abstract T getBeanByEq(Map<String,Object> eq); /** * 根据sid删除记录 * @param sid */ public abstract void deleteBeanBySid(Long sid); /** * 根据sid列表删除记录 * @param sid * @return 成功删除的记录数 */ public abstract int deleteBeanBySid(List<Long> sid); /** * 根据sid数组删除记录 * @param sid * @return 成功删除的记录数 */ public abstract int deleteBeanBySid(String[] sid);
/** * 根据条件删除记录 * * @param eqName * @param eqValue * @return */ public abstract int deleteBeanByEq(String eqName,Object eqValue);
/** * 根据条件删除记录 * @param properties key是字段名,value是字段值,如果value是List则以in的方式判断,否则以eq的方式判断 * @return 成功删除的记录数 */ public abstract int deleteBeanByProperties(Map<String,Object> properties);
/** * 根据条件查找记录的总数 * @param param * @param value * @return */ public abstract int getBeanCountByIn(String param,Collection value); /** * 根据条件查找记录 * @param param * @param value * @return */ public abstract List<T> getBeanListByIn(String param,Collection value); /** * 根据条件查找记录并分页 * @param param * @param value * @param cpage * @param pagesize * @return */ public abstract List<T> getBeanListByIn(String param,Collection value,int cpage,int pagesize); /** * 根据条件查找记录并按照条件排序 * @param param * @param value * @param cpage * @param pagesize * @param Order * @param asc * @return */ public abstract List<T> getBeanListByIn(String param,String Order,boolean asc); /** * 查找记录并分页排序 * @param currypage * 小于1则不分页 * @param pagesize * @param order * 为null或length为0则不排序 * @param asc * @return */ public abstract List<T> getBeanList(int currypage,String[] order,boolean[] asc);
/** * 查找记录并排序 * @param order * 为null或length为0则不排序 * @param asc * @return */ public abstract List<T> getBeanList(String[] order,boolean[] asc);
/** * 根据条件查找记录并排序 * @param eqName * 为null或""则不判断 * @param eqValue * @param currypage * 小于1则不分页 * @param pagesize * @param order * 为null或length为0则不排序 * @param asc * @return */ public abstract List<T> getBeanListByEq(String eqName,boolean[] asc);
/** * 根据条件查找记录并排序 * * @param eq * @param order * 为null或length为0则不排序 * @param asc * @return */ public abstract List<T> getBeanListByEq(Map<String,boolean[] asc);
/** * 根据条件查找记录并排序 * * @param eq * @param currypage * 小于1则不分页 * @param pagesize * @param order * 为null或length为0则不排序 * @param asc * @return */ public abstract List<T> getBeanListByEq(Map<String,boolean[] asc); /** * 根据sid查找记录 * @param sid * @return */ public abstract List<T> getBeanListBySid(List<Long> sid); /** * 根据条件不区分大小写模糊查询记录并排序 * @param ilinkName * @param ilinkValue * @param currypage * @param pagesize * @param order * @param asc * @return */ public abstract List<T> getBeanListByIlink(String ilinkName,String ilinkValue,boolean asc); public List<T> getListByIlink(Map<String,Object> ilink,String ordername,boolean asc); public List<T> getListByEqAndIlink(Map<String,Map<String,boolean asc); /** * 根据条件不区分大小写模糊查询记录数 * @param ilinkName * @param ilinkValue * @return */ public abstract long getBeanCountByIlink(String ilinkName,String ilinkValue); public abstract long getCountByEqAndIlink(Map<String,Object> ilink);
/** * 查找所有记录并按照指定的key和value字段返回结果 * @param mapKey 保存在key的字段 * @param mapValue 保存在value的字段 * @return */ public abstract Map getBeanMap(String mapKey,String mapValue);
/** * 根据条件查询记录并按照指定的key和value字段返回结果 * @param mapKey 保存在key的字段 * @param mapValue 保存在value的字段 * @return */ public abstract Map getBeanMap(String mapKey,String mapValue,boolean asc); /** * 根据条件得到唯一对像,并且将其它重复的记录删除 * @param eqName * @param eqValue * @return */ public abstract T getBeanBySidAndDeleteRepeat(String eqName,Object eqValue); public abstract long getBeanCountByMultiCondition(Object[][] conditionList); public abstract List<T> getBeanListByMultiCondition(Object[][] conditionList,Object[][] orderlist); }
package com.guu.uurms.dao.base;
import java.io.Serializable; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.regex.Pattern;
import javax.annotation.PostConstruct; import javax.annotation.Resource;
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projection; import org.hibernate.criterion.ProjectionList; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Property; import org.hibernate.criterion.Restrictions; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.guu.uurms.po.base.BaseBean;
/** * DAO的base实现类 实现BaseDAO的抽象方法及通用方法 * * @author 华理德 * @date 2009-04-09 */ @SuppressWarnings("unchecked") public abstract class BaseDAOImplement<T extends Serializable> extends HibernateDaoSupport implements BaseDAO<T> { private static final Log LOG = LogFactory.getLog(BaseDAOImplement.class); private Pattern ilikePattern = Pattern.compile("[_%]"); protected Class<T> bean;
@PostConstruct protected void setBean() throws ClassNotFoundException { String className = getClass().getSimpleName(); try { System.out.println(BaseBean.class.getPackage().getName().replace(".base","")+"."+className.replace("DAOImplement","Bean")); bean = (Class<T>)Class.forName(BaseBean.class.getPackage().getName().replace(".base","Bean")); } catch(ClassNotFoundException e) { throw new ClassNotFoundException("BaseDAOImplement无法加载"+getClass().getName()+"的Bean["+e.getMessage()+"]"); } } protected Class<T> getBean() { return bean; } @Resource public void injectSessionFactory(SessionFactory sessionFactory) { setSessionFactory(sessionFactory); }
/* * ======================================================================= * 实现DAOBase的抽象方法 * ======================================================================= */ public String getIdName() { return "sid"; }
public void deleteBean(T bean) { deleteObject(bean); }
public T getBeanByEq(Map<String,Object> eq) { return getObjectByEq(eq); }
public T getBeanByEq(String eqName,Object eqValue) { return getObjectByEq(eqName,eqValue); }
public T getBeanBySid(Long sid) { return getBeanByEq(getIdName(),sid); }
public List<T> getBeanList(int currypage,int pagesize) { return getListByEq(null,currypage,pagesize,getIdName(),false); }
public List<T> getBeanList(int currypage,boolean asc) { return getListByEq(null,order,asc); }
public List<T> getBeanList() { return getListByEq(null,false); }
public List<T> getBeanList(String order,asc); }
public List<T> getBeanListByEq(Map<String,int pagesize) { return getListByEq(eq,false); }
public List<T> getBeanListByEq(Map<String,boolean asc) { return getListByEq(eq,Object> eq) { return getListByEq(eq,asc); }
public List<T> getBeanListByEq(String eqName,int pagesize) { return getListByEq(getMap(eqName,eqValue),false); }
public List<T> getBeanListByEq(String eqName,boolean asc) { return getListByEq(getMap(eqName,Object eqValue) { return getListByEq(getMap(eqName,asc); }
public long getBeanCount() { return getCountByEq(null); }
public long getBeanCountByEq(Map<String,Object> allEq) { return getCountByEq(allEq); }
public long getBeanCountByEq(String eqName,Object eqValue) { return getCountByEq(getMap(eqName,eqValue)); }
public void saveBean(T bean) { saveObject(bean); }
public void updateBean(T bean) { updateObject(bean); }
public void deleteBeanBySid(Long sid) { deleteObject(getIdName(),sid); }
public int deleteBeanBySid(List<Long> sid) { return deleteObject(getIdName(),sid); }
public int deleteBeanBySid(String[] sid) { if(sid==null || sid.length==0) return 0; List<Long> value = new ArrayList<Long>(); for(String id : sid) { value.add(Long.valueOf(id)); } return deleteObject(getIdName(),value); }
public List<T> getBeanList(int currypage,boolean[] asc) { return getListByEq(null,asc); }
public List<T> getBeanList(String[] order, String[] order,boolean[] asc) { return getListByEq(eqName,eqValue,asc); } public List<T> getBeanListByEq(Map<String,boolean[] asc) { return getListByEq(eq,asc); } public int deleteBeanByEq(String eqName,Object eqValue) { return deleteObject(eqName,eqValue); } public int deleteBeanByProperties(final Map<String,Object> properties) { if(properties == null || properties.isEmpty()) { return 0; } else { return (Integer)getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException,SQLException { StringBuilder hql = new StringBuilder(); hql.append("delete "); hql.append(getBean().getName()); hql.append(" where "); for(Iterator<String> iter = properties.keySet().iterator(); iter.hasNext();) { String key = iter.next(); Object value = properties.get(key); hql.append(key); if(value==null) { hql.append(" is null"); } else if(value instanceof Collection) { hql.append(" in (:"); hql.append(key); hql.append(")"); } else { hql.append("=:"); hql.append(key); } if(iter.hasNext()) hql.append(" and "); } Query query = session.createQuery(hql.toString()); query.setProperties(properties); return query.executeUpdate(); } }); } } public List<T> getBeanListBySid(List<Long> sid) { return getListByIn(getIdName(),sid,null,false); } public List<T> getBeanListByIlink(String ilinkName,boolean asc) { return getListByIlink(ilinkName,ilinkValue,asc); } public long getBeanCountByIlink(String ilinkName,String ilinkValue) { return getCountByIlink(ilinkName,ilinkValue); } public Map getBeanMap(final String mapKey,final String mapValue) { List<Object[]> result = getHibernateTemplate().find("select "+mapKey+","+mapValue+" from "+getBean().getSimpleName()); Map map = new HashMap(); for(Object[] o:result) { map.put(o[0],o[1]); } return map; } public Map getBeanMap(final String mapKey,final String mapValue,final Map<String,final int currypage,final int pagesize,final String order,final boolean asc) { List<Object[]> result = getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException,SQLException { Criteria c = session.createCriteria(getBean()); if(eq != null && !eq.isEmpty()) { c.add(Restrictions.allEq(eq)); } if(currypage > 0) { c.setFirstResult((currypage - 1) * pagesize); c.setMaxResults(pagesize); } if(order != null) { c.addOrder(asc?Order.asc(order):Order.desc(order)); } c.setProjection(Projections.projectionList().add(Property.forName(mapKey)).add(Property.forName(mapValue))); return c.list(); }}); Map map = new HashMap(); for(Object[] o:result) { map.put(o[0],o[1]); } return map; } public T getBeanBySidAndDeleteRepeat(String eqName,Object eqValue) { List<T> list = getListByEq(eqName,1,1000,true); if(list.isEmpty()) return null; if(list.size()>1) { for(int i = 1; i<list.size(); i++) { deleteBean(list.get(i)); } } return list.get(0); } /* * ======================================================================= * 提供给所有继承该类的子类调用的方法 * ======================================================================= */ /** * 根据多种混合的条件(如大于,等于,小于,不等于,包含)分页获取LIST * * @param conditionList * @param currypage * @param pagesize * @param orderName * @param asc * @return * @author 杨浚 */ protected List<T> getListByMultiCondition(final Object[][] conditionList,final String orderName,final boolean asc) { return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException,SQLException { Criteria cr = session.createCriteria(getBean()); for(Object[] condition : conditionList) { addCriteriaCondition(cr,condition); } Order order = null; if(asc) { order = Order.asc(orderName); } else { order = Order.desc(orderName); } //order=asc?Order.asc(orderName):Order.desc(orderName); cr.addOrder(order); if(currypage!=0 && pagesize !=0){ cr.setMaxResults(pagesize); cr.setFirstResult((currypage - 1) * pagesize); } return cr.list(); } }); }
/** * 根据多种混合的条件(如大于,等于,小于,不等于,包含)分页获取LIST 当pagesize<=0时,不进行分页 * * @param conditionList * @param currypage * @param pagesize * @param orderName * @param asc * @return * @author 杨浚 */ public List<T> getBeanListByMultiCondition(final Object[][] conditionList,final Object[][] orderlist) { return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException,condition); } addCriteriaOrder(cr,orderlist); if(currypage!=0 && pagesize !=0) { cr.setMaxResults(pagesize); cr.setFirstResult((currypage - 1) * pagesize); } return cr.list(); } }); }
/** * 把查询条件加入Criteria中。 * * @param cr * @param condition * @author 杨浚 */ private void addCriteriaCondition(Criteria cr,Object[] condition) { try { if(condition!=null&&condition[0] != null && !condition[0].equals("")) { Method[] methods = Restrictions.class.getMethods(); for(Method mth : methods) { boolean isThisMethod = false; if(mth.getName().equals((String)condition[0])) { isThisMethod = true; Class[] parameters = mth.getParameterTypes(); try { if(parameters.length+1!=condition.length){ isThisMethod=false; }else{ for(int i = 0; i < parameters.length; i++) { if(!parameters[i].isInstance(condition[i+1])) { isThisMethod = false; } } } } catch(Exception e) { isThisMethod = false; LOG.error("exception,but nvm!",e); } } if(isThisMethod) { Object[] desArray = new Object[condition.length - 1]; System.arraycopy(condition,desArray,condition.length - 1); Criterion re = (Criterion)mth.invoke(null,desArray); cr.add(re); return; } } } } catch(Exception e) { LOG.error("把查询条件加入Criteria中出错",e); } }
/** * 把排序条件放入Criteria中,其中[i][1]为一个boolean,true表示升序,false表示降序,[i][0]为排序条件 * * @param cr * @param order * @author 杨浚 */ private void addCriteriaOrder(Criteria cr,Object[][] order) { for(int i = 0; i < order.length; i++) { cr.addOrder((Boolean)order[i][1]?Order.asc((String)order[i][0]):Order.desc((String)order[i][0])); } }
/** * 根据多种混合的条件(如大于,等于,小于,不等于,包含)获得结果总数 * * @param conditionList * @return * @author 杨浚 */ public long getBeanCountByMultiCondition(final Object[][] conditionList) { return (Long)getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException,condition); } return cr.setProjection(Projections.rowCount()).uniqueResult(); } }); } /** * 根据混合的条件和范围获得结果 * @author 杨浚 * @param conditionList * @param projectionList * @param singleResult * @return */ protected T getResultByMultiCondition(final Object[][] conditionList,final Object[] projectionList,final boolean singleResult){ return (T)getHibernateTemplate().executeWithNativeSession(new HibernateCallback(){
public Object doInHibernate(Session sess) throws HibernateException,SQLException { Criteria cr=sess.createCriteria(getBean()); for(Object[] condition : conditionList) { addCriteriaCondition(cr,condition); } cr.setProjection(addProjection(cr,projectionList)); if(singleResult){ return cr.uniqueResult(); }else{ return cr.list(); } } }); } /** * 把查询的范围加入criteria中 * @param cr * @param projection */ private ProjectionList addProjection(Criteria cr,Object[] projection){ ProjectionList pl=Projections.projectionList(); if(projection!=null && projection[0]!=null && !projection[0].equals("")){ try { Object[] desArray = new Object[projection.length - 1]; System.arraycopy(projection,projection.length - 1); Class[] classArray=new Class[desArray.length]; for(int i=0;i<desArray.length;i++){ classArray[i]=desArray[i].getClass(); } Method method = Projections.class.getMethod((String)projection[0],classArray); Projection p = (Projection) method.invoke(null,desArray); pl.add(p); } catch (SecurityException e) { LOG.error("addProjection("+cr+","+Arrays.toString(projection)+")",e); } catch (NoSuchMethodException e) { LOG.error("addProjection("+cr+",e); } catch (IllegalArgumentException e) { LOG.error("addProjection("+cr+",e); } catch (IllegalAccessException e) { LOG.error("addProjection("+cr+",e); } catch (InvocationTargetException e) { LOG.error("addProjection("+cr+",e); } } return pl; }
/** * 根据条件得到对象列表 * * @param eq * 为null或empty则不判断 * @param currypage * 小于1则不分页 * @param pagesize * @param ordername * 为null或""则不排序 * @param asc * @return * @author 华理德 * @date 2009-04-01 */ protected List<T> getListByEq(Map<String,boolean asc) { return getListByEqAndIlink(eq,ordername,asc); }
/** * 根据条件得到对象列表 * * @param eq * 为null或empty则不判断 * @param currypage * 小于1则不分页 * @param pagesize * @param ordername * 为null或length为0则不排序 * @param asc * @return * @author 华理德 * @date 2009-04-01 */ protected List<T> getListByEq(Map<String,String[] ordername,boolean[] asc) { return getListByEqAndIlink(eq,asc); } /** * 根据条件进行模糊查询 * @param ilinkName * @param ilinkValue * @param currypage * @param pagesize * @param ordername * @param asc * @return */ protected List<T> getListByIlink(String name,String value,boolean asc) { return getListByEqAndIlink(null,getMap(name,value),asc); }
/** * 根据条件得到对象列表 * * @param eq * 进行相等判断,为null或empty则不判断 * @param ilink * 进行模糊判断,不区分大小写,为null或empty则不判断 * @param currypage * 小于1则不分页 * @param pagesize * @param ordername * 为null或""则不排序 * @param asc * @return * @author 华理德 * @date 2009-04-02 */ public List<T> getListByEqAndIlink(final Map<String,final String ordername,final boolean asc) { return getListByEqAndIlink(eq,ilink,(ordername==null||ordername.equals(""))?null:new String[]{ordername},(ordername==null||ordername.equals(""))?null:new boolean[]{asc}); } public List<T> getListByIlink(Map<String,(ordername==null||ordername.equals(""))?null:new boolean[]{asc}); }
/** * 根据条件得到对象列表 * * @param eq * 进行相等判断,为null或empty则不判断 * @param ilink * 进行模糊判断,不区分大小写,为null或empty则不判断 * @param currypage * 小于1则不分页 * @param pagesize * @param ordername * 为null或length为0则不排序 * @param asc * @return * @author 华理德 * @date 2009-09-23 */ protected List<T> getListByEqAndIlink(final Map<String,final String[] ordername,final boolean[] asc) { return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException,SQLException { Criteria c = session.createCriteria(getBean()); if(eq != null && !eq.isEmpty()) { c.add(Restrictions.allEq(eq)); } if(ilink != null && !ilink.isEmpty()) { for(Iterator<Entry<String,Object>> i = ilink.entrySet().iterator(); i.hasNext();) { Entry<String,Object> e = i.next(); c.add(Restrictions.ilike(e.getKey(),"%"+ilikePattern.matcher(e.getValue().toString()).replaceAll("\$0")+"%")); } } if(currypage > 0) { c.setFirstResult((currypage - 1) * pagesize); c.setMaxResults(pagesize); } if(ordername != null && ordername.length>0) { for(int i = 0; i < ordername.length; i++) { boolean flag = asc[i]; if(flag) c.addOrder(Order.asc(ordername[i])); else c.addOrder(Order.desc(ordername[i])); } } return c.list(); } }); } protected List<T> getListByEqAndIlink(final Map<String,"%"+ilikePattern.matcher(e.getValue().toString()).replaceAll("\$0")+"%")); } } if(ordername != null && ordername.length>0) { for(int i = 0; i < ordername.length; i++) { boolean flag = asc[i]; if(flag) c.addOrder(Order.asc(ordername[i])); else c.addOrder(Order.desc(ordername[i])); } } return c.list(); } }); }
/** * 根据属性得到唯一结果 * * @param name * @param value * @return */ protected T getObjectByEq(String name,Object value) { return getObjectByEq(getMap(name,value)); }
/** * 根据条件得到唯一结果 * * @param eq * @return */ protected T getObjectByEq(final Map<String,Object> eq) { return (T)getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException,SQLException { Criteria c = session.createCriteria(getBean()); c.add(Restrictions.allEq(eq)); return c.uniqueResult(); } }); }
/** * 根据条件得到对象列表 * * @param name * 为null或""则不判断 * @param value * @param currypage * 小于1则不分页 * @param pagesize * @param ordername * 为null或""则不排序 * @param asc * @return * @author 华理德 * @date 2009-04-09 */ protected List<T> getListByEq(String name,Object value,boolean asc) { return getListByEq(getMap(name,asc); }
/** * 根据条件得到对象列表 * * @param name * 为null或""则不判断 * @param value * @param currypage * 小于1则不分页 * @param pagesize * @param ordername * 为null或length为0则不排序 * @param asc * @return * @author 华理德 * @date 2009-04-09 */ protected List<T> getListByEq(String name,boolean[] asc) { return getListByEq(getMap(name,asc); }
/** * 根据条件获取记录数 * * @param eq * 为null或empty则不判断 * @return * @author 华理德 * @date 2009-04-09 */ protected long getCountByEq(Map<String,Object> eq) { return getCountByEqAndIlink(eq,null); } /** * 根据条件获取记录数 * @param name * @param value * @return */ protected long getCountByIlink(String name,String value) { return getCountByEqAndIlink(null,value)); }
/** * 根据条件获取记录数 * * @param eq * 进行相等判断,为null或empty则不判断 * @param ilink * 进行模糊判断,不区分大小写,为null或empty则不判断 * @return * @author 华理德 * @date 2009-04-09 */ public long getCountByEqAndIlink(final Map<String,Object> ilink) { return (Long)getHibernateTemplate().executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException,SQLException { DetachedCriteria dc = DetachedCriteria.forClass(getBean()); if(eq != null && !eq.isEmpty()) { dc.add(Restrictions.allEq(eq)); } if(ilink != null && !ilink.isEmpty()) { for(Iterator<Entry<String,Object> e = i.next(); dc.add(Restrictions.ilike(e.getKey(),"%"+e.getValue()+"%")); } } Criteria c = dc.getExecutableCriteria(session); c.setProjection(Projections.rowCount()); //Object result = c.uniqueResult(); //return result instanceof Integer?result:Integer.valueOf(((Long)result).intValue()); return c.uniqueResult(); } }); }
/** * 根据条件获取记录数 * * @param name * 为null或""则不判断 * @param value * @return * @author 华理德 * @date 2009-04-09 */ protected long getCountByEq(String name,Object value) { return getCountByEq(getMap(name,value)); }
/** * 保存对象 * * @param obj * @author 华理德 * @date 2009-04-09 */ protected void saveObject(T obj) { getHibernateTemplate().save(obj); }
/** * 更新对象 * * @param obj * @author 华理德 * @date 2009-04-09 */ protected void updateObject(T obj) { getHibernateTemplate().update(obj); }
/** * 删除对象 * * @param obj * @author 华理德 * @date 2009-04-09 */ protected void deleteObject(T obj) { getHibernateTemplate().delete(obj); }
/** * 根据条件删除对象 * * @param name * @param value * @return 删除的记录数 * @author 华理德 * @date 2009-04-09 */ protected int deleteObject(String name,Object value) { if(value instanceof List) { return deleteObject(name,(List)value); } else { List<Object> list = new ArrayList<Object>(); list.add(value); return deleteObject(name,list); } }
/** * 根据条件删除对象 * * @param name * @param value * 为null或empty则不处理 * @return 删除的记录数 * @author 华理德 * @date 2009-04-09 */ protected int deleteObject(final String name,final List<Object> value) { if(value == null || value.isEmpty()) { return 0; } else { return (Integer)getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException,SQLException { String hql = "delete " + getBean().getName() + " where " + name + " in (:value)"; Query query = session.createQuery(hql.toString()); query.setParameterList("value",value); return query.executeUpdate(); } }); } }
/** * 根据条件删除对象 * * @param name * @param value * 为null或empty则不处理 * @return 删除的记录数 * @author 华理德 * @date 2009-07-28 */ protected int deleteObject(final String name,final Object[] value) { if(value == null || value.length == 0) { return 0; } else { return deleteObject(name,Arrays.asList(value)); } } /** * 根据条件得到对象列表 * * @param name * @param values * 进行匹配判断,为null或empty则直接返回空List * @param currypage * 小于1则不分页 * @param pagesize * @param ordername * 为null或""则不排序 * @param asc * @return * @author 华理德 * @date 2009-07-29 */ protected List<T> getListByIn(String name,Collection values,boolean asc) { return getListByIn(name,values,(ordername==null||ordername.equals(""))?null:new boolean[]{asc}); }
/** * 根据条件得到对象列表 * * @param name * @param values * 进行匹配判断,为null或empty则直接返回空List * @param currypage * 小于1则不分页 * @param pagesize * @param ordername * 为null或length为0则不排序 * @param asc * @return * @author 华理德 * @date 2009-09-23 */ protected List<T> getListByIn(final String name,final Collection values,final boolean[] asc) { if(values == null || values.isEmpty()) return new ArrayList(); return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException,SQLException { Criteria c = session.createCriteria(getBean()); c.add(Restrictions.in(name,values)); if(currypage > 0) { c.setFirstResult((currypage - 1) * pagesize); c.setMaxResults(pagesize); } if(ordername != null && ordername.length>0) { for(int i = 0; i < ordername.length; i++) { boolean flag = asc[i]; if(flag) c.addOrder(Order.asc(ordername[i])); else c.addOrder(Order.desc(ordername[i])); } } return c.list(); } }); }
/** * 根据条件查找记录的总数 * @param param * @param value * @return */ public int getBeanCountByIn(final String param,final Collection value){ if(value ==null || value.isEmpty()){return 0;} return (Integer)getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session sess) throws HibernateException,SQLException { Criteria c = sess.createCriteria(getBean()); c.add(Restrictions.in(param,value)); return c.setProjection(Projections.rowCount()).uniqueResult(); } }); } /** * 根据条件查找记录 * @param param * @param value * @return */ public List<T> getBeanListByIn(String param,Collection value){ return getListByIn(param,value,null); } /** * 根据条件查找记录并分页 * @param param * @param value * @param cpage * @param pagesize * @return */ public List<T> getBeanListByIn(String param,int pagesize){ return getListByIn(param,cpage,"sid",false); } /** * 根据条件查找记录并按照条件排序 * @param param * @param value * @param cpage * @param pagesize * @param Order * @param asc * @return */ public List<T> getBeanListByIn(String param,boolean asc){ return getListByIn(param,asc); } /* * ======================================================================= * 提供给本类处理的私有方法 * ======================================================================= */ /** * 根据条件返回Map * * @param name * @param value * @return name为null或""则返回null */ private Map<String,Object> getMap(String name,Object value) { if(name != null && !name.equals("")) { Map<String,Object> hs = new HashMap<String,Object>(); hs.put(name,value); return hs; } return null; } }
web.xml的配置
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:application-*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 扫描xml配置文件 </listener> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-servlet.xml</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/static/*</url-pattern> </servlet-mapping> <servlet> <servlet-name>dwr</servlet-name> <servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>crossDomainSessionSecurity</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>allowScriptTagRemoting</param-name> <param-value>true</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dwr</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> <servlet> <servlet-name>freemarker</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:ftl-servlet.xml</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>freemarker</servlet-name> <url-pattern>/ftl/*</url-pattern> </servlet-mapping> <servlet> <servlet-name>error</servlet-name> <servlet-class>com.guu.uurms.servlet.ErrorServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>error</servlet-name> <url-pattern>/error</url-pattern> </servlet-mapping> <filter> <filter-name>ftl</filter-name> <filter-class>com.guu.uurms.filter.FreemarkerFilter</filter-class> </filter> <filter-mapping> <filter-name>ftl</filter-name> <url-pattern>*.ftl</url-pattern> </filter-mapping> <filter> <filter-name>controller</filter-name> <filter-class>com.guu.uurms.filter.ControllerFilter</filter-class> </filter> <filter-mapping> <filter-name>controller</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <error-page> <error-code>404</error-code> <location>/error</location> </error-page> <error-page> <error-code>500</error-code> <location>/error</location> </error-page> <welcome-file-list> <welcome-file>index.ftl</welcome-file> </welcome-file-list> </web-app> (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|