JavaWeb项目开发案例精粹-第6章报价管理系统-002辅助类及配置文件
1.
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:aop="http://www.springframework.org/schema/aop" 6 xmlns:tx="http://www.springframework.org/schema/tx" 7 xsi:schemaLocation="http://www.springframework.org/schema/beans 8 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context-2.5.xsd 11 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 12 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 13 <!-- 配置哪些包下的类需要自动扫描 --> 14 <context:component-scan base-package="com.sanqing"/> 15 16 <!-- 这里的jun要与persistence.xml中的 <persistence-unit name="jun" transaction-type="RESOURCE_LOCAL"> 17 中的name值要一致,这样才能找到相关的数据库连接 18 --> 19 <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> 20 <property name="persistenceUnitName" value="jun"/> 21 </bean> 22 <!-- 配置事物管理器 --> 23 <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 24 <property name="entityManagerFactory" ref="entityManagerFactory"/> 25 </bean> 26 <!-- 配置使用注解来管理事物 --> 27 <tx:annotation-driven transaction-manager="transactionManager"/> 28 29 </beans>
2.
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4 "http://struts.apache.org/dtds/struts-2.0.dtd"> 5 6 <struts> 7 <constant name="struts.enable.DynamicMethodInvocation" 8 value="false" /> 9 <constant name="struts.devMode" value="false" /> 10 <!-- 与spring集成 --> 11 <constant name="struts.objectFactory" value="spring" /> 12 <!-- 改变后缀名 --> 13 <constant name="struts.action.extension" value="do" /> 14 <!-- 配置国际化资源文件 --> 15 <constant name="struts.custom.i18n.resources" 16 value="globalMessages" /> 17 <!-- 处理编码问题 --> 18 <constant name="struts.i18n.encoding" value="GBK" /> 19 <!-- 当修改配置文件不需要重启服务,开发比较有用 --> 20 <constant name="struts.configuration.xml.reload" value="true" /> 21 <!-- 报表 --> 22 <!-- 23 <package name="lee" namespace="/" extends="jasperreports-default"> 24 <action name="jasper" class="jasperAction"> 25 <result name="success" type="jasper"> 26 <param name="location">report\jasper\order.jrxml</param> 27 <param name="format">HTML</param> 28 <param name="dataSource">order</param> 29 </result> 30 </action> 31 </package> 32 --> 33 <!-- 用户登录 --> 34 <package name="san" namespace="/" extends="struts-default"> 35 <action name="login" class="loginAction" > 36 <result name="success">/back_index.html</result> 37 <result name="input">/index.jsp</result> 38 </action> 39 </package> 40 <!-- 控制相关模块 --> 41 <package name="qing" namespace="/control" extends="struts-default"> 42 <interceptors><!--配置拦截器 --> 43 <interceptor name="loginIntercepter" 44 class="com.sanqing.intercepter.LoginIntercepter" /><!--配置登录判断拦截器--> 45 <interceptor-stack name="mydefault"><!--配置拦截器栈--> 46 <interceptor-ref name="defaultStack" /><!--Struts 2默认拦截器 --> 47 <interceptor-ref name="loginIntercepter" /><!--登录判断拦截器 --> 48 </interceptor-stack> 49 </interceptors> 50 <default-interceptor-ref name="mydefault" /><!--配置默认拦截器--> 51 <global-results> 52 <result name="pub_add_success">/share/pub_add_success.jsp</result> 53 <result name="pub_update_success">/share/pub_update_success.jsp</result> 54 <result name="pub_del_success">/share/pub_del_success.jsp</result> 55 <result name="input">/index.jsp</result> 56 </global-results> 57 <!-- 客户显示 --> 58 <action name="customer" class="customerAction"> 59 <result name="success"> 60 /customer/customer_list.jsp 61 </result> 62 </action> 63 <!-- 客户管理 --> 64 <action name="customermanage_*" class="customerManageAction" method="{1}"> 65 <result name="add">/customer/customer_add.jsp</result> 66 <result name="update">/customer/customer_update.jsp</result> 67 <result name="query">/customer/customer_query.jsp</result> 68 </action> 69 <!-- 产品类别显示 --> 70 <action name="producttype" class="productTypeAction"> 71 <result name="success"> 72 /product/producttype_list.jsp 73 </result> 74 </action> 75 <!-- 产品类别管理 --> 76 <action name="producttypemanage_*" class="productTypeManageAction" method="{1}"> 77 <result name="add">/product/producttype_add.jsp</result> 78 <result name="update">/product/producttype_update.jsp</result> 79 <result name="query">/product/producttype_query.jsp</result> 80 </action> 81 <!-- 产品显示 --> 82 <action name="product" class="productAction"> 83 <result name="success"> 84 /product/product_list.jsp 85 </result> 86 </action> 87 <!-- 产品管理 --> 88 <action name="productmanage_*" class="productManageAction" method="{1}"> 89 <result name="add">/product/product_add.jsp</result> 90 <result name="update">/product/product_update.jsp</result> 91 <result name="query">/product/product_query.jsp</result> 92 </action> 93 <!-- 订单显示 --> 94 <action name="order" class="orderAction"> 95 <result name="success"> 96 /order/order_list.jsp 97 </result> 98 </action> 99 <!-- 订单管理 --> 100 <action name="ordermanage_*" class="orderManageAction" method="{1}"> 101 <result name="add">/order/order_add.jsp</result> 102 <result name="update">/order/order_update.jsp</result> 103 <result name="query">/order/order_query.jsp</result> 104 </action> 105 <!-- 报价显示 --> 106 <action name="quotation" class="quotationAction"> 107 <result name="success"> 108 /quotation/quotation_list.jsp 109 </result> 110 </action> 111 <!-- 报价管理 --> 112 <action name="quotationmanage_*" class="quotationManageAction" method="{1}"> 113 <result name="add">/quotation/quotation_add.jsp</result> 114 <result name="update">/quotation/quotation_update.jsp</result> 115 <result name="query">/quotation/quotation_query.jsp</result> 116 </action> 117 <!-- 用户显示 --> 118 <action name="user" class="userAction"> 119 <result name="success"> 120 /user/user_list.jsp 121 </result> 122 </action> 123 <!-- 用户管理 --> 124 <action name="usermanage_*" class="userManageAction" method="{1}"> 125 <result name="add">/user/user_add.jsp</result> 126 <result name="update">/user/user_update.jsp</result> 127 <result name="query">/user/user_query.jsp</result> 128 </action> 129 </package> 130 </struts>
3.
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 5 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 6 <display-name>hibernate的jpa实现</display-name> 7 <context-param> 8 <param-name>contextConfigLocation</param-name> 9 <param-value>classpath:beans.xml</param-value> 10 </context-param> 11 <!-- 对Spring容器进行实例化 --> 12 <listener> 13 <listener-class> 14 org.springframework.web.context.ContextLoaderListener 15 </listener-class> 16 </listener> 17 <!-- 把jpa的EntityManager设为开启状态 解决延迟加载的问题--> 18 <filter> 19 <filter-name>Spring OpenEntityManagerInViewFilter</filter-name> 20 <filter-class> 21 org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter 22 </filter-class> 23 </filter> 24 <filter-mapping> 25 <filter-name>Spring OpenEntityManagerInViewFilter</filter-name> 26 <url-pattern>/*</url-pattern> 27 </filter-mapping> 28 <!-- 利用的spring的过滤器来设置编码方式 --> 29 <filter> 30 <filter-name>Spring character encoding filter</filter-name> 31 <filter-class> 32 org.springframework.web.filter.CharacterEncodingFilter 33 </filter-class> 34 <init-param> 35 <param-name>encoding</param-name> 36 <param-value>UTF-8</param-value> 37 </init-param> 38 </filter> 39 <filter-mapping> 40 <filter-name>Spring character encoding filter</filter-name> 41 <url-pattern>/*</url-pattern> 42 </filter-mapping> 43 <!-- struts2.1配置 start 注意我们陪着struts2的时候一定把这个过滤器ActionContextCleanUp陪在FilterDispatcher的前面--> 44 <display-name>Struts Blank</display-name> 45 <filter> 46 <filter-name>struts-cleanup</filter-name> 47 <filter-class> 48 org.apache.struts2.dispatcher.ActionContextCleanUp 49 </filter-class> 50 </filter> 51 <filter> 52 <filter-name>struts2</filter-name> 53 <filter-class> 54 org.apache.struts2.dispatcher.FilterDispatcher 55 </filter-class> 56 </filter> 57 <filter-mapping> 58 <filter-name>struts-cleanup</filter-name> 59 <url-pattern>/*</url-pattern> 60 </filter-mapping> 61 <filter-mapping> 62 <filter-name>struts2</filter-name> 63 <url-pattern>/*</url-pattern> 64 </filter-mapping> 65 <display-name>Struts Blank</display-name> 66 <!-- struts2.1 end --> 67 <welcome-file-list> 68 <welcome-file>index.html</welcome-file> 69 <welcome-file>index.htm</welcome-file> 70 <welcome-file>index.jsp</welcome-file> 71 </welcome-file-list> 72 </web-app>
4.META-INF/persistence.xml
1 <?xml version="1.0"?> 2 <persistence xmlns="http://java.sun.com/xml/ns/persistence" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 5 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> 6 <persistence-unit name="jun" transaction-type="RESOURCE_LOCAL"> 7 <provider>org.hibernate.ejb.HibernatePersistence</provider> 8 <properties> 9 <property name="hibernate.dialect" 10 value="org.hibernate.dialect.MySQLDialect"/><!--数据库方言--> 11 <property name="hibernate.connection.driver_class" 12 value="com.mysql.jdbc.Driver"/><!--数据库驱动类--> 13 <property name="hibernate.connection.username" value="root"/><!--数据库用户名--> 14 <property name="hibernate.connection.password" value="1234"/> 15 <property name="hibernate.connection.url" 16 value="jdbc:mysql://localhost:3306/quote"/><!--数据库连接URL--> 17 <property name="hibernate.max_fetch_depth" value="3"/><!--外连接抓取树的最大深度 --> 18 <property name="hibernate.hbm2ddl.auto" value="update"/><!-- 自动输出schema创建DDL语句 --> 19 <property name="hibernate.jdbc.fetch_size" value="18"/><!-- JDBC的获取量大小 --> 20 <property name="hibernate.jdbc.batch_size" value="10"/><!-- 开启Hibernate使用JDBC2的批量更新功能 --> 21 <property name="hibernate.show_sql" value="true"/><!-- 在控制台输出SQL语句 --> 22 </properties> 23 </persistence-unit> 24 </persistence>
5.
1 package com.sanqing.intercepter; 2 3 4 import java.util.Map; 5 6 import com.opensymphony.xwork2.ActionContext; 7 import com.opensymphony.xwork2.ActionInvocation; 8 import com.opensymphony.xwork2.interceptor.AbstractInterceptor; 9 import com.sanqing.po.User; 10 11 public class LoginIntercepter extends AbstractInterceptor { 12 private static final long serialVersionUID = 6203506362291764836L; 13 @Override 14 public String intercept(ActionInvocation invocation) throws Exception { 15 ActionContext ctx=invocation.getInvocationContext();//获得ActionContext对象 16 Map session=ctx.getSession(); //获得session对象 17 User user = (User)session.get("user");//获得用户登录信息 18 if(user != null) { //如果不为空,则表示已经登录 19 return invocation.invoke();//继续执行后面的操作 20 } 21 return "input";//跳转到登录页面 22 } 23 }
6.
1 package com.sanqing.util; 2 3 import java.text.DateFormat; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 import java.util.Map; 7 8 9 import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter; 10 11 public class DateConverter extends DefaultTypeConverter { 12 private static final DateFormat[] ACCEPT_DATE_FORMATS = { 13 new SimpleDateFormat("dd/MM/yyyy"), 14 new SimpleDateFormat("yyyy-MM-dd"), 15 new SimpleDateFormat("yyyy/MM/dd") }; // 支持转换的日期格式 16 @SuppressWarnings("unchecked") 17 public Object convertValue(Map context, Object value, Class toType) { 18 if (toType == Date.class) { //进行String到Date的转换 19 Date date = null; 20 String dateString = null; 21 String[] params = (String[]) value; //获得参数列表 22 dateString = params[0]; //获取日期的字符串 23 for (DateFormat format : ACCEPT_DATE_FORMATS) { 24 try { 25 date = format.parse(dateString);//对字符串进行转换 26 return date; //返回Date类型日期 27 } catch (Exception e) { 28 continue; 29 } 30 } 31 return null; 32 } else if (toType == String.class) { //进行Date到String的转换 33 Date date = (Date) value;//强制类型转换 34 return new SimpleDateFormat("yyyy-MM-dd").format(date);//返回String类型日期 35 } 36 return null; 37 } 38 }
7.
1 package com.sanqing.util; 2 3 import java.lang.reflect.Field; 4 import java.lang.reflect.Method; 5 import java.lang.reflect.ParameterizedType; 6 import java.lang.reflect.Type; 7 import java.util.ArrayList; 8 import java.util.List; 9 /** 10 * 泛型工具类 11 * 12 */ 13 public class GenericsUtils { 14 /** 15 * 通过反射,获得指定类的父类的泛型参数的实际类型. 如BuyerServiceBean extends DaoSupport<Buyer> 16 * 17 * @param clazz clazz 需要反射的类,该类必须继承范型父类 18 * @param index 泛型参数所在索引,从0开始. 19 * @return 范型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code> 20 */ 21 @SuppressWarnings("unchecked") 22 public static Class getSuperClassGenricType(Class clazz, int index) { 23 Type genType = clazz.getGenericSuperclass();//得到泛型父类 24 //如果没有实现ParameterizedType接口,即不支持泛型,直接返回Object.class 25 if (!(genType instanceof ParameterizedType)) { 26 return Object.class; 27 } 28 //返回表示此类型实际类型参数的Type对象的数组,数组里放的都是对应类型的Class, 如BuyerServiceBean extends DaoSupport<Buyer,Contact>就返回Buyer和Contact类型 29 Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); 30 if (index >= params.length || index < 0) { 31 throw new RuntimeException("你输入的索引"+ (index<0 ? "不能小于0" : "超出了参数的总数")); 32 } 33 if (!(params[index] instanceof Class)) { 34 return Object.class; 35 } 36 return (Class) params[index]; 37 } 38 /** 39 * 通过反射,获得指定类的父类的第一个泛型参数的实际类型. 如BuyerServiceBean extends DaoSupport<Buyer> 40 * 41 * @param clazz clazz 需要反射的类,该类必须继承泛型父类 42 * @return 泛型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code> 43 */ 44 @SuppressWarnings("unchecked") 45 public static Class getSuperClassGenricType(Class clazz) { 46 return getSuperClassGenricType(clazz,0); 47 } 48 /** 49 * 通过反射,获得方法返回值泛型参数的实际类型. 如: public Map<String, Buyer> getNames(){} 50 * 51 * @param Method method 方法 52 * @param int index 泛型参数所在索引,从0开始. 53 * @return 泛型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code> 54 */ 55 @SuppressWarnings("unchecked") 56 public static Class getMethodGenericReturnType(Method method, int index) { 57 Type returnType = method.getGenericReturnType(); 58 if(returnType instanceof ParameterizedType){ 59 ParameterizedType type = (ParameterizedType) returnType; 60 Type[] typeArguments = type.getActualTypeArguments(); 61 if (index >= typeArguments.length || index < 0) { 62 throw new RuntimeException("你输入的索引"+ (index<0 ? "不能小于0" : "超出了参数的总数")); 63 } 64 return (Class)typeArguments[index]; 65 } 66 return Object.class; 67 } 68 /** 69 * 通过反射,获得方法返回值第一个泛型参数的实际类型. 如: public Map<String, Buyer> getNames(){} 70 * 71 * @param Method method 方法 72 * @return 泛型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code> 73 */ 74 @SuppressWarnings("unchecked") 75 public static Class getMethodGenericReturnType(Method method) { 76 return getMethodGenericReturnType(method, 0); 77 } 78 79 /** 80 * 通过反射,获得方法输入参数第index个输入参数的所有泛型参数的实际类型. 如: public void add(Map<String, Buyer> maps, List<String> names){} 81 * 82 * @param Method method 方法 83 * @param int index 第几个输入参数 84 * @return 输入参数的泛型参数的实际类型集合, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回空集合 85 */ 86 @SuppressWarnings("unchecked") 87 public static List<Class> getMethodGenericParameterTypes(Method method, int index) { 88 List<Class> results = new ArrayList<Class>(); 89 Type[] genericParameterTypes = method.getGenericParameterTypes(); 90 if (index >= genericParameterTypes.length ||index < 0) { 91 throw new RuntimeException("你输入的索引"+ (index<0 ? "不能小于0" : "超出了参数的总数")); 92 } 93 Type genericParameterType = genericParameterTypes[index]; 94 if(genericParameterType instanceof ParameterizedType){ 95 ParameterizedType aType = (ParameterizedType) genericParameterType; 96 Type[] parameterArgTypes = aType.getActualTypeArguments(); 97 for(Type parameterArgType : parameterArgTypes){ 98 Class parameterArgClass = (Class) parameterArgType; 99 results.add(parameterArgClass); 100 } 101 return results; 102 } 103 return results; 104 } 105 /** 106 * 通过反射,获得方法输入参数第一个输入参数的所有泛型参数的实际类型. 如: public void add(Map<String, Buyer> maps, List<String> names){} 107 * 108 * @param Method method 方法 109 * @return 输入参数的泛型参数的实际类型集合, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回空集合 110 */ 111 @SuppressWarnings("unchecked") 112 public static List<Class> getMethodGenericParameterTypes(Method method) { 113 return getMethodGenericParameterTypes(method, 0); 114 } 115 /** 116 * 通过反射,获得Field泛型参数的实际类型. 如: public Map<String, Buyer> names; 117 * 118 * @param Field field 字段 119 * @param int index 泛型参数所在索引,从0开始. 120 * @return 泛型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code> 121 */ 122 @SuppressWarnings("unchecked") 123 public static Class getFieldGenericType(Field field, int index) { 124 Type genericFieldType = field.getGenericType(); 125 126 if(genericFieldType instanceof ParameterizedType){ 127 ParameterizedType aType = (ParameterizedType) genericFieldType; 128 Type[] fieldArgTypes = aType.getActualTypeArguments(); 129 if (index >= fieldArgTypes.length || index < 0) { 130 throw new RuntimeException("你输入的索引"+ (index<0 ? "不能小于0" : "超出了参数的总数")); 131 } 132 return (Class)fieldArgTypes[index]; 133 } 134 return Object.class; 135 } 136 /** 137 * 通过反射,获得Field泛型参数的实际类型. 如: public Map<String, Buyer> names; 138 * 139 * @param Field field 字段 140 * @param int index 泛型参数所在索引,从0开始. 141 * @return 泛型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code> 142 */ 143 @SuppressWarnings("unchecked") 144 public static Class getFieldGenericType(Field field) { 145 return getFieldGenericType(field, 0); 146 } 147 }
8.
1 package com.sanqing.util; 2 3 public class PageIndex { 4 private long startindex; 5 private long endindex; 6 7 public PageIndex(long startindex, long endindex) { 8 this.startindex = startindex; 9 this.endindex = endindex; 10 } 11 public long getStartindex() { 12 return startindex; 13 } 14 public void setStartindex(long startindex) { 15 this.startindex = startindex; 16 } 17 public long getEndindex() { 18 return endindex; 19 } 20 public void setEndindex(long endindex) { 21 this.endindex = endindex; 22 } 23 24 public static PageIndex getPageIndex(long viewpagecount, int currentPage, long totalpage){ 25 long startpage = currentPage-(viewpagecount%2==0? viewpagecount/2-1 : viewpagecount/2); 26 long endpage = currentPage+viewpagecount/2; 27 if(startpage<1){ 28 startpage = 1; 29 if(totalpage>=viewpagecount) endpage = viewpagecount; 30 else endpage = totalpage; 31 } 32 if(endpage>totalpage){ 33 endpage = totalpage; 34 if((endpage-viewpagecount)>0) startpage = endpage-viewpagecount+1; 35 else startpage = 1; 36 } 37 return new PageIndex(startpage, endpage); 38 } 39 }
9.
1 package com.sanqing.util; 2 3 import java.util.List; 4 5 public class PageView<T> { 6 /** 分页数据 **/ 7 private List<T> records; 8 /** 页码开始索引和结束索引 **/ 9 private PageIndex pageindex; 10 /** 总页数 **/ 11 private long totalpage = 1; 12 /** 每页显示记录数 **/ 13 private int maxresult = 12; 14 /** 当前页 **/ 15 private int currentpage = 1; 16 /** 总记录数 **/ 17 private long totalrecord; 18 /** 页码数量 **/ 19 private int pagecode = 10; 20 /** 要获取记录的开始索引 **/ 21 public int getFirstResult() { 22 return (this.currentpage-1)*this.maxresult; 23 } 24 public int getPagecode() { 25 return pagecode; 26 } 27 28 public void setPagecode(int pagecode) { 29 this.pagecode = pagecode; 30 } 31 32 public PageView(int maxresult, int currentpage) { 33 this.maxresult = maxresult; 34 this.currentpage = currentpage; 35 } 36 37 public void setQueryResult(QueryResult<T> qr){ 38 setTotalrecord(qr.getTotalrecord()); 39 setRecords(qr.getResultlist()); 40 } 41 42 public long getTotalrecord() { 43 return totalrecord; 44 } 45 public void setTotalrecord(long totalrecord) { 46 this.totalrecord = totalrecord; 47 setTotalpage(this.totalrecord%this.maxresult==0? this.totalrecord/this.maxresult : this.totalrecord/this.maxresult+1); 48 } 49 public List<T> getRecords() { 50 return records; 51 } 52 public void setRecords(List<T> records) { 53 this.records = records; 54 } 55 public PageIndex getPageindex() { 56 return pageindex; 57 } 58 public long getTotalpage() { 59 return totalpage; 60 } 61 public void setTotalpage(long totalpage) { 62 this.totalpage = totalpage; 63 this.pageindex = PageIndex.getPageIndex(pagecode, currentpage, totalpage); 64 } 65 public int getMaxresult() { 66 return maxresult; 67 } 68 public int getCurrentpage() { 69 return currentpage; 70 } 71 }
10.
1 package com.sanqing.util; 2 3 import java.util.List; 4 /** 5 * 分页实体类封装 6 * 7 */ 8 public class QueryResult<T> { 9 /** 获得结果集 **/ 10 private List<T> resultlist; 11 /** 获得总的记录数 **/ 12 private long totalrecord; 13 14 public List<T> getResultlist() { 15 return resultlist; 16 } 17 public void setResultlist(List<T> resultlist) { 18 this.resultlist = resultlist; 19 } 20 public long getTotalrecord() { 21 return totalrecord; 22 } 23 public void setTotalrecord(long totalrecord) { 24 this.totalrecord = totalrecord; 25 } 26 }
11.
1 ### direct log messages to stdout ### 2 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 3 log4j.appender.stdout.Target=System.out 4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 5 log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n 6 7 ### direct messages to file hibernate.log ### 8 log4j.appender.file=org.apache.log4j.FileAppender 9 log4j.appender.file.File=d:/crm.log 10 log4j.appender.file.layout=org.apache.log4j.PatternLayout 11 log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n 12 13 ### set log levels - for more verbose logging change 'info' to 'debug' ### 14 15 log4j.rootLogger=warn, stdout,file 16 17 #log4j.logger.org.hibernate=info 18 #log4j.logger.org.hibernate=debug 19 20 ### log HQL query parser activity 21 #log4j.logger.org.hibernate.hql.ast.AST=debug 22 23 ### log just the SQL 24 #log4j.logger.org.hibernate.SQL=debug 25 26 ### log JDBC bind parameters ### 27 log4j.logger.org.hibernate.type=info 28 #log4j.logger.org.hibernate.type=debug 29 30 ### log schema export/update ### 31 log4j.logger.org.hibernate.tool.hbm2ddl=debug 32 33 ### log HQL parse trees 34 #log4j.logger.org.hibernate.hql=debug 35 36 ### log cache activity ### 37 #log4j.logger.org.hibernate.cache=debug 38 39 ### log transaction activity 40 #log4j.logger.org.hibernate.transaction=debug 41 42 ### log JDBC resource acquisition 43 #log4j.logger.org.hibernate.jdbc=debug 44 45 ### enable the following line if you want to track down connection ### 46 ### leakages when using DriverManagerConnectionProvider ### 47 #log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace 48 log4j.logger.com.quote = debug
You can do anything you set your mind to, man!