- 浏览: 761439 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
飞出四季做的茧:
z赞
JAVA日期格式化字符串的24小时制 -
daniaowansui:
亲测,可行!
JS 在open打开的窗口中调用父页面JS方法 -
zh_123:
ie9测试过吗貌似列不能冻结啊!
Css 实现的表头, 表列冻结, 可以超大数据量 -
Jxdwuao:
IXR 写道少年,在哪里混呢?在虹桥机场这边阿, 兄弟你在何方 ...
修改JS文件FF刷新不生效 -
IXR:
少年,在哪里混呢?
修改JS文件FF刷新不生效
application.xml
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath*:conf/develop.properties</value> <value>classpath*:conf/sso/config.properties</value> <value>classpath*:conf/db/jdbc.properties</value> </list> </property> </bean> <!-- 第一个数据库 --> <bean id="readDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClassName"> <value>${jdbc.read.driverClassName}</value> </property> <property name="url"> <value>${jdbc.read.url}</value> </property> <property name="username"> <value>${jdbc.read.username}</value> </property> <property name="password"> <value>${jdbc.read.password}</value> </property> <!-- Connection Pooling DBCP --> <!-- 初始化时创建的连接数 --> <property name="initialSize" value="5" /> <!-- 最大连接数据库连接数,设置为0时,表示没有限制; --> <property name="maxActive" value="100" /> <!-- 最大等待连接中的数量,设置为0时,表示没有限制; --> <property name="maxIdle" value="30" /> <!-- 最大等待秒数,单位为毫秒, 超过时间会报出错误信息; --> <property name="maxWait" value="100000" /> <!-- 是否可用预执行 --> <property name="poolPreparedStatements" value="true" /> <!-- 设置从数据源中返回的连接是否采用自动提交机制,默认值为 true;false支持事务 --> <property name="defaultAutoCommit" value="false" /> <!-- 连接关闭时是否要清除缓存 --> <property name="removeAbandoned" value="true"/> <!-- 清空等待时间 --> <property name="removeAbandonedTimeout" value="1"/> </bean> <context:annotation-config /> <context:component-scan base-package="com.woyo.travel.hotel"/> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="false"/> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="writeDataSource"/> </bean>
读写MAP:
<bean id="sqlMapClientRead" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="dataSource"> <ref bean="dataSourceRead"/> </property> <property name="configLocation"> <value>classpath:/conf/sqlmap/sqlmap-config.xml</value> </property> <!-- <property name="mappingLocations"> <value>classpath*:/conf/sqlmap/mysql/*.xml</value> </property>--> </bean> <bean name="sqlMapClientTemplateRead" class="org.springframework.orm.ibatis.SqlMapClientTemplate"> <constructor-arg ref="sqlMapClientRead"></constructor-arg> </bean>
SQLMAP 配置 :
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <settings useStatementNamespaces="false" enhancementEnabled="true" lazyLoadingEnabled="true"/> <typeHandler jdbcType="DATE" javaType="java.util.Date" callback="com.ibatis.sqlmap.engine.type.DateTypeHandler" /> <!-- system user --> <sqlMap resource="conf/sqlmap/userdefine/sqlmap-user.xml"/> <sqlMap resource="conf/sqlmap/userdefine/sqlmap-category.xml"/> </sqlMapConfig>
SQLMAP:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap namespace="activityProduct"> <resultMap class="com.woyo.brand.domain.model.ActivityProduct" id="activityProduct"> <result property="id" column="id" /> <result property="activityType" column="activity_type" /> <result property="productId" column="product_id" /> <result property="activityId" column="activity_id" /> </resultMap> <sql id="activityProduct_masterStatement"> <![CDATA[SELECT * FROM activity_product ]]> </sql> <update id="activityProduct_updateByMap" parameterClass="java.util.HashMap"> <![CDATA[ UPDATE activity_product ]]> </update> </sqlMap>
web.xml
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring/*.xml</param-value> </context-param> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.properties</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
读写分离的 Java BaseDao 类:
/** * DAO基类。针对数据库的读、写操作分别采用不同的Template,可以在一定程度上防止大量并发造成的死锁。 * * @author CrayHu(hukl424@163.com) * @version Revision: 1.00 Date: 2010-6-13 */ public class BaseDaoImpl<T extends DomainObject> { /** * 分页statement后缀:_count */ protected static final String COUNT_STATEMENT_SUFFIX = "_count"; private String entityClass; /** * 用于写操作的Template */ private SqlMapClientTemplate writeTemplate; /** * 用于读操作的Template */ private SqlMapClientTemplate readTemplate; /** * @return the writeTemplate */ public SqlMapClientTemplate getWriteTemplate() { return writeTemplate; } /** * 需要在配置文件中配置id为writeSqlMapClient的bean * * @param sqlMapClient the SqlMapClient object to set */ @Resource(name="writeSqlMapClient") public void setWriteSqlMapClient(SqlMapClient sqlMapClient) { writeTemplate = new SqlMapClientTemplate(sqlMapClient); } /** * @return the readTemplate */ public SqlMapClientTemplate getReadTemplate() { return readTemplate; } /** * 需要在配置文件中配置id为writeSqlMapClient的bean * * @param sqlMapClient the SqlMapClient object to set */ @Resource(name="readSqlMapClient") public void setReadSqlMapClient(SqlMapClient sqlMapClient) { readTemplate = new SqlMapClientTemplate(sqlMapClient); } /** * 新增实体类 * * @param statement * @param entity * @return */ protected DomainObject save(String statement, DomainObject entity) { Integer entityId = (Integer)writeTemplate.insert(statement, entity); if(entityId != null && entityId > 0) { entity.setId(entityId); } return entity; } /** * 新增 * * @param statement * @param entity */ protected void save(String statement, Object entity) { writeTemplate.insert(statement, entity); } /** * 新增返回本次会话自增Id。 * added by wallce_xu * * @param statement * @param entity */ protected int savegetId(String statement, Object entity) { return (Integer)(writeTemplate.insert(statement, entity)); } /** * 新增返回本次会话自增id * added by wallce_xu * * @param statement * @param entity */ protected void saveid(String statement, Object entity) { int i = (Integer) writeTemplate.insert(statement, entity); } /** * 修改 * * @param statement * @param params */ protected void update(String statement, Object params) { writeTemplate.update(statement, params); } /** * 根据参数删除 * * @param statement * @param params */ protected void delete(String statement, Object params) { writeTemplate.delete(statement, params); } /** * 批量删除 * @param statement * @param params */ protected void deleteByIds(String statement, Object params) { writeTemplate.delete(statement, params); } /** * 根据参数取得<code>T</code>类型实体 * * @param statement * @param params * @return */ @SuppressWarnings("unchecked") protected T getEntity(String statement, Object params) { return (T)readTemplate.queryForObject(statement, params); } /** * 根据根据参数取得任意类型实体 * * @param statement * @param param * @return */ protected Object getObject(String statement, Object param) { return readTemplate.queryForObject(statement, param); } /** * 根据参数查询列表,可分页 * * @param statement * @param params * @return */ @SuppressWarnings("unchecked") protected List<T> query(String statement, QueryParams params) { if(params != null && params.getPaging() != null) { int records = queryCount(statement, params); //如果查询出符合条件的记录数为0,那么就直接返回一个空的List,因为后面的已经没有执行的必要 if(records == 0) { return new ArrayList<T>(0); } params.getPaging().setRecords(records); } return (List<T>)readTemplate.queryForList(statement, params); } /** * 根据参数查询列表,可分页 * * @param statement * @param params * @return */ @SuppressWarnings("unchecked") protected List queryEntities(String statement, QueryParams params) { if(params != null && params.getPaging() != null) { int records = queryCount(statement, params); //如果查询出符合条件的记录数为0,那么就直接返回一个空的List,因为后面的已经没有执行的必要 if(records == 0) { return new ArrayList<T>(0); } params.getPaging().setRecords(records); } return readTemplate.queryForList(statement, params); } /** * 查询列表,不提供分页功能 * * @param statement * @param params * @return */ @SuppressWarnings("unchecked") protected List<T> query(String statement, Object params) { return (List<T>)readTemplate.queryForList(statement, params); } /** * 无参数查询列表,不提供分页功能 * * @param statement * @return */ @SuppressWarnings("unchecked") protected List<T> query(String statement) { return (List<T>)readTemplate.queryForList(statement); } /** * 查询任意类型的对象列表。不局限于T类型的 * * @param statement * @param params * @return */ @SuppressWarnings("unchecked") protected List queryEntities(String statement, Object params) { return readTemplate.queryForList(statement, params); } /** * 批量新增/修改/删除。注意批量新增时是无法正确的获取自增主键的值(批处理中最后一个新增可以获取正确的值,其它皆不可以), * 所以如果需要获取自增主键的值,不应该使用该方法。 * * @param statement * @param params * @return 返回操作影响的行数 */ protected int batch(final String statement, final Object[] params) { return (Integer)writeTemplate.execute(new SqlMapClientCallback() { @Override public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException { executor.startBatch(); for(Object param : params) { if(param == null) { continue; } executor.update(statement, param); } return executor.executeBatch(); } }); } /** * 根据参数判断该记录是否已存在(逻辑上存在) * * @param statement * @param params * @return */ protected boolean isExistEntity(String statement, Object params) { return (Integer)readTemplate.queryForObject(statement, params) > 0; } /** * 取得指定的statement的完全限定名称。形式为<code>namespace</code> + "." + <code>statement</code> * * @param namespace * @param statement * @return */ protected String getQualifiedName(String namespace, String statement) { return new StringBuffer().append(namespace).append(".").append(statement).toString(); } /** * 取得指定的statement的完全限定名称。该方法以泛型<code>T</code>的实际类型的完全限定名 + "." + <code>statement</code>。这就要求在 * 书写iBatis配置文件时,namespace必须写成“泛型<code>T</code>的实际类型的完全限定名”。<br> * 例如,如果有DAO实现类TravelGuideDaoImpl<TravelGuide>,TravelGuide位于com.woyoframework.travel.core.bo.guide下, * 那么调用该方法将返回com.woyoframework.travel.core.bo.guide.TravelGuide.xxx。 * * @param statement * @return */ @SuppressWarnings("unchecked") protected String getQualifiedName(String statement) { /** * 避免每次都去获取 */ if(StringUtils.isBlank(entityClass)) { entityClass = DomainObject.class.getName(); Type superClass = getClass().getGenericSuperclass(); if(superClass instanceof ParameterizedType) { ParameterizedType genericType = (ParameterizedType)superClass; Type[] typeArgs = genericType.getActualTypeArguments(); if(typeArgs.length > 0) { entityClass = ((Class<T>)typeArgs[0]).getName(); } } } return new StringBuffer().append(entityClass).append(".").append(statement).toString(); } /** * 根据条件查询整数结果。 * * @param statement * @param params * @return */ protected int uniqueIntResult(String statement, Object params) { if(params == null) { return (Integer)readTemplate.queryForObject(statement); } Object result = (Integer)readTemplate.queryForObject(statement, params); return result != null ? (Integer)result : 0; } /** * 查询符合条件的记录数,仅供分页查询调用。 * * @param statement * @param params * @return * update andy_luo 2010-7-2 15:43 增加params非空判断,如果为空表示查询所有的数量 */ protected int queryCount(String statement,QueryParams<?> params) { if(params == null) { return (Integer)readTemplate.queryForObject(statement + COUNT_STATEMENT_SUFFIX); } return (Integer)readTemplate.queryForObject(statement + COUNT_STATEMENT_SUFFIX, params); } }
发表评论
-
定时器任务缓慢
2019-10-09 13:51 0值机系统在国庆前定时器不再执行了。查日志Spring定时任 ... -
HTTPINVOKE调用量大缓慢的问题
2017-02-16 16:09 0平台接口采用的SPRING开源的HTTPINVOKE方式调用 ... -
Spring定时器
2014-10-27 21:40 853新建一个用于执行定时器的类 TimerTask ,新建准备用 ... -
Spring JSON格式传输
2012-10-17 16:39 930http://blog.csdn.net/leec ... -
一个很值得研究的博客
2012-08-27 16:15 800Spring 框架和 JAVA SE 学习 htt ... -
DAO 命名问题导致启动时注入报错
2012-03-31 17:04 1027新建立了 DAO 命名为 TCmpInfoDao 并且使用了 ... -
Spring 自动装配学习
2011-09-09 14:18 851http://sunli315.iteye.com/?show ... -
spring2.5 加了事务注解报错的解决
2011-07-22 22:47 2061Spring 2.5 的包和所依赖的包加上 , 配置了数据库连 ... -
测试驱动开发 JUNIT 单元测试类
2011-05-13 20:51 1393单元测试需要构造数据 , 而且会考虑到事务的回滚等等问题, 测 ... -
公司工厂模式的使用
2011-03-11 14:15 1241公司一个酒店有多个供应商, 采用了设计模式, 接口是 Hot ... -
推荐的Spring MVC
2010-10-21 13:44 952http://www.iteye.com/topic/6462 ... -
Spring 拦截式事务管理
2010-07-29 15:44 1474友系统中的配置: <?xml version= ... -
Spring 注解式注入和事务方式
2010-07-29 14:56 1584公司的Spring统一用注解。 其声明为: ... -
在Spring配置property属性信息
2010-07-19 17:49 5575使用PropertyPlaceholderConfigurer ...
相关推荐
Spring配置 Spring 配置 映射 加注释!!!!Spring配置 Spring 配置 映射 加注释!!!!
为了保护这些敏感信息不被非法访问或篡改,我们可以对Spring配置文件进行加密处理。本文将深入探讨如何在Java环境中,利用TE网络技术实现Spring配置文件的加密。 首先,我们需要理解Spring配置文件的基本结构。...
spring配置文件实例
Spring 配置文件详解 Spring 配置文件是 Spring 框架中最重要的配置文件之一,它负责定义和配置应用程序的Bean对象,以及它们之间的依赖关系。Spring 配置文件通常以XML文件的形式存在,文件名通常为...
spring配置 spring配置 spring配置 spring配置 spring配置
ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssm...
连接MYSQL数据库,SPRING配置文件示例。
spring配置文件详解,交你如何理解spring,熟练运用spring
### Spring配置步骤详解 #### 一、Spring框架简介 Spring框架是Java平台上的一个开源框架,它提供了一种简化企业级应用开发的方式。Spring的核心功能包括依赖注入(Dependency Injection, DI)、面向切面编程...
spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件...
spring配置的简单案例.zip spring配置的简单案例.zip spring配置的简单案例.zip spring配置的简单案例.zip spring配置的简单案例.zip spring配置的简单案例.zip spring配置的简单案例.zip spring配置的简单案例.zip ...
一、Spring配置概述 Spring的配置方式主要有两种:XML配置和Java配置。早期,XML配置是主流,而现在,随着Spring Boot的兴起,Java配置逐渐成为首选,因为它更加简洁和直观。不过,理解XML配置对于学习Spring的基础...
下面是对Spring配置文件的详细介绍。 首先,Spring配置文件通常是以`.xml`为扩展名的文件,例如`beans.xml`。这些文件存储在项目的`src/main/resources`目录下,以便在运行时被自动加载。Spring容器...
在本压缩包中,我们找到了一系列与Spring相关的配置文件,这些文件在构建JavaWeb应用时起着至关重要的作用。 1. `jdbc.properties`: 这个文件通常用于存储数据库连接的相关信息,如URL、用户名、密码等。它是Spring...
xbean简化spring配置文件 xbean是 Apache Geronimo 项目的一个子项目,旨在简化Spring配置文件的编写。下面我们来详细介绍如何使用xbean简化Spring配置文件。 在Spring之前,我们使用Factory模式来管理bean。例如...
《Spring配置全书》深入解析 Spring框架是Java企业级开发的重要工具,它引入了松耦合的配置和对象组装方式,使得应用的构建变得更加简洁高效。依赖注入作为Spring容器的核心功能,彻底改变了传统Java应用中对象之间...
在Spring MVC项目中,加载jar包中的Spring配置文件是一个常见的需求,特别是在进行SSM(Spring、Spring MVC、MyBatis)整合时。SSM框架的整合通常涉及到多个配置文件的组织和管理,其中一部分配置可能会被打包到独立...
spring 配置模板,bean文件,功能配置;