Spring+ehcache mybatis整合合ehcache无异常,输出这样的日志算是缓存生效了吗

 mg电子游艺手机下载:今年债市是一个震荡平衡的市场 系统性风险不存在
 mg电子游艺手机下载:今年债市是一个震荡平衡的市场 系统性风险不存在
 下,这样的机会是非常难得的。在平时,想要看到这样级别的比赛是非常难的,有时候几个月也不一定会遇到一场。所以,在有了这样的比赛后,吸引的人自然就更多了,而这些观众可以看到这样级别的比赛,自然也会更加兴奋
关键词:mg电子游艺手机下载
 mg电子游艺手机下载:今年债市是一个震荡平衡的市场 系统性风险不存在
合作媒体推荐
看过本文的人还看过6277人阅读
ehcache缓存(2)
package com.zxh.customer.hashmap.
import java.util.L
import java.util.M
&* @author Administrator
&* @param &T&
public interface IBaseDao {
&&&& * 单表插入记录
&&&& * @param obj
&public& &T&& int insert(String _mybitsId,& T obj);
& * 更新单表
& * @param obj
&public& &T&& int update(String _mybitsId, T obj);
&&&& * 删除记录
&&&& * @param clz
&&&& * @param id
&public& &T&& int delete(String _mybitsId, T obj);
& * 返回查询一览表的信息
& * @param &T&
& * @param _mybitsId& mybatis中对应业务标识
& * @param _params
& * @return
&public& &T&& List&T& query(String _mybitsId, Map&String, Object& _params);
& * 查询相关列表信息
& * @param &T& 返回数据
& * @param id mybatis中对应业务标识
& * @param _params
& * @return
&public &T& List&T& query(String _mybitsId, Object _params);
& * 查询单个数据
& * @param queryString
& * @param object
& * @return
&public Object queryOne(String queryString, Object object);
package com.zxh.customer.hashmap.
import java.sql.C
import java.util.L
import java.util.M
import org.mybatis.spring.support.SqlSessionDaoS
import org.springframework.stereotype.R
import com.googlecode.ehcache.annotations.C
import com.googlecode.ehcache.annotations.TriggersR
@Repository(&baseDao&)
public class BaseDaoImpl extends SqlSessionDaoSupport implements IBaseDao {
& * 获取相关的数据库连接
&public Connection getConnection() {
&&return getSqlSession().getConnection();
&@TriggersRemove(cacheName = &springEhcache&, removeAll = true)
&public &T& int delete(String _mybitsId, T obj) {
&&return getSqlSession().delete(_mybitsId, obj);
&@TriggersRemove(cacheName = &springEhcache&, removeAll = true)
&public &T& int insert(String _mybitsId, T obj) {
&&return getSqlSession().insert(_mybitsId, obj);
&@TriggersRemove(cacheName = &springEhcache&, removeAll = true)
&public &T& int update(String _mybitsId, T obj) {
&&return getSqlSession().update(_mybitsId, obj);
&@Cacheable(cacheName = &springEhcache&)
&public &T& List&T& query(String _mybitsId, Map&String, Object& _params) {
&&return getSqlSession().selectList(_mybitsId, _params);
&@Cacheable(cacheName = &springEhcache&)
&public &T& List&T& query(String _mybitsId, Object _params) {
&&return getSqlSession().selectList(_mybitsId, _params);
&@Cacheable(cacheName = &springEhcache&)
&public Object queryOne(String _mybitsId, Object object) {
&&return getSqlSession().selectOne(_mybitsId, object);
&?xml version=&1.0& encoding=&UTF-8& ?&&
&!DOCTYPE mapper&
& PUBLIC &-//mybatis.org//DTD Mapper 3.0//EN&&
&mapper namespace=&com.zxh.customer.hashmap.model.user&&
&&select id=&selectUserById& parameterType=&hashmap& resultType=&hashmap&&
&&SELECT CUST_ID, CUST_NAME FROM CUST WHERE
&&CUST_ID = #{custId}
&&/select&
&&select id=&selectUsersByName& parameterType=&hashmap&
&&resultType=&hashmap&&
&&SELECT CUST_ID, CUST_NAME FROM CUST WHERE
&&CUST_NAME =
&&#{custName}
&&/select&
&&insert id=&insertUser& parameterType=&hashmap&&
&&insert into cust(cust_id,
&&cust_name) values(seq_cust.nextval, #{custName})
&&/insert&
&&delete id=&deleteUser& parameterType=&hashmap&&
&&delete from cust where
&&cust_id = #{custId}
&&/delete&
&&update id=&updateUser& parameterType=&hashmap&&
&&update cust set cust_name
&&= #{custName} where cust_id = #{custId}
&&/update&
&/mapper&&
package com.zxh.customer.hashmap.
public interface IBaseService {
package com.zxh.customer.hashmap.
import javax.annotation.R
import com.zxh.customer.hashmap.dao.IBaseD
public class BaseServiceImpl implements IBaseService {
&@Resource
&protected IBaseDao baseD
&public IBaseDao getBaseDao() {
&&return baseD
&public void setBaseDao(IBaseDao baseDao) {
&&this.baseDao = baseD
package com.zxh.customer.hashmap.
import java.util.L
import java.util.M
public interface IUserService extends IBaseService {
& * 获取单条记录
&public Map queryUserById(Map map);
& * 获取多条记录
&public List&Map& queryUsers(Map map);
& * 插入记录
& * @throws Exception
&public void insertUser(Map map) throws E
& * 删除记录
& * @throws Exception
&public void deleteUser(Map map) throws E
& * 更新记录
&public void updateUser(Map map);
package com.zxh.customer.hashmap.
import java.util.L
import java.util.M
import org.springframework.stereotype.S
import org.springframework.transaction.annotation.T
@Service(&userService&)
public class UserServiceImpl extends BaseServiceImpl implements IUserService {
& * Map map 也可以定义领域模型实体类
&@Override
&public Map queryUserById(Map map) {
&&return (Map) this.baseDao.queryOne(
&&&&&com.zxh.customer.hashmap.model.user.selectUserById&, map);
&@Override
&public List&Map& queryUsers(Map map) {
&&return this.baseDao.query(
&&&&&com.zxh.customer.hashmap.model.user.selectUsersByName&, map);
& * 如果没有配置@Transactional&&& 使用sqlSession的jdbc事务& 每一个操作都是一个单独的事务
& * 抛出异常事务也不会回滚&& 无论抛出什么异常了
&@Transactional
&public void insertUser(Map map) throws Exception {
&&this.baseDao.insert(&com.zxh.customer.hashmap.model.user.insertUser&,
&&// 只有抛出运行期异常& 事务才会回滚,&& 如果抛出Exception不会回滚了&&
&&// throw new RuntimeException();
&@Transactional
&public void deleteUser(Map map) throws Exception {
&&this.baseDao.delete(&com.zxh.customer.hashmap.model.user.deleteUser&,
&&throw new Exception();
&@Override
&public void updateUser(Map map) {
&&this.baseDao.update(&com.zxh.customer.hashmap.model.user.updateUser&,
&?xml version=&1.0& encoding=&UTF-8&?&
&beans xmlns=&&
&xmlns:xsi=&& xmlns:p=&&
&xmlns:context=&& xmlns:tx=&&
&xmlns:aop=&&
&xmlns:ehcache=&&
&xsi:schemaLocation=&
&&context:annotation-config /&
&&context:component-scan base-package=&com.zxh.customer.hashmap& /&
&&context:property-placeholder
&&location=&classpath:sysconfig/jdbc_config.properties& /&
&&!-- 使用ehcache缓存 --&&
&&& &bean id=&ehCacheManager& class=&org.springframework.cache.ehcache.EhCacheManagerFactoryBean&&
&&& &&property name=&configLocation& value=&classpath:sysconfig/ehcache.xml& /&
&&& &/bean&
&&ehcache:annotation-driven cache-manager=&ehCacheManager& /&
&&!--JNDI数据源配置 &bean id=&dataSource& class=&org.springframework.jndi.JndiObjectFactoryBean&&
&&&property name=&jndiName&& &value&jdbc/JTORDER&/value& &/property& &/bean& --&
&&bean id=&dataSource&
&&class=&org.springframework.jdbc.datasource.DriverManagerDataSource&&
&&&property name=&driverClassName& value=&${driver}& /&
&&&property name=&url& value=&${url}& /&
&&&property name=&username& value=&jtorder& /&
&&&property name=&password& value=&jtorder& /&
&&bean id=&sqlSessionFactory& class=&org.mybatis.spring.SqlSessionFactoryBean&&
&&&property name=&dataSource& ref=&dataSource& /&
&&&property name=&mapperLocations&
&&&value=&classpath*:com/zxh/customer/hashmap/model/**/*.xml& /&
&&&property name=&configLocation& value=&classpath:sysconfig/Configuration.xml& /&
&&bean id=&transactionManager&
&&class=&org.springframework.jdbc.datasource.DataSourceTransactionManager&&
&&&property name=&dataSource& ref=&dataSource& /&
&&tx:annotation-driven transaction-manager=&transactionManager&
&&proxy-target-class=&true& /&
&&!-- 使用SqlSessionDaoSupport 需要注入sqlSessionFactory --&
&&bean id=&baseDao& class=&com.zxh.customer.hashmap.dao.BaseDaoImpl&&
&&&property name=&sqlSessionFactory& ref=&sqlSessionFactory& /&
&?xml version=&1.0& encoding=&UTF-8& ?&&
&!DOCTYPE configuration&
&&&& PUBLIC &-//mybatis.org//DTD Config 3.0//EN&&
&configuration&
&&!-- 设置mybatis3 运行时的行为方式 --&
&&settings&
&&&!-- 设置超时时间,它决定驱动等待一个数据库响应的时间 --&
&&&setting name=&defaultStatementTimeout& value=&60000& /&
&&&!-- 启用或禁用 缓存 --&
&&&setting name=&cacheEnabled& value=&false& /&
&&&!-- 启用或禁用延迟加载。当禁用时, 所有关联对象都会即时加载 --&
&&&setting name=&lazyLoadingEnabled& value=&true& /&&&
&&&!-- 等等 --&
&&/settings&
&/configuration&
&?xml version=&1.0& encoding=&UTF-8&?&
&&!-- name:Cache的唯一标识 maxElementsInMemory:内存中最大缓存对象数 maxElementsOnDisk:磁盘中最大缓存对象数,若是0表示无穷大
&&eternal:Element是否永久有效,一但设置了,timeout将不起作用 overflowToDisk:配置此属性,当内存中Element数量达到maxElementsInMemory时,Ehcache将会Element写到磁盘中
&&timeToIdleSeconds:设置Element在失效前的允许闲置时间。仅当element不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大
&&timeToLiveSeconds:设置Element在失效前允许存活时间。最大时间介于创建时间和失效时间之间。仅当element不是永久有效时使用,默认是0.,也就是element存活时间无穷大
&&diskPersistent:是否缓存虚拟机重启期数据 diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒
&&diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区
&&memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)
&&备注: 持久化到硬盘的路径由虚拟机参数&java.io.tmpdir&决定. 例如, 在windows中, 会在此路径下 C:\Documents
&&and Settings\li\Local Settings\Temp 在linux中, 通常会在: /tmp 下 System.out.println(System.getProperty(&java.io.tmpdir&)); --&
&&diskStore path=&java.io.tmpdir& /&
&&defaultCache maxElementsInMemory=&10000& eternal=&false&
&&timeToIdleSeconds=&120& timeToLiveSeconds=&120& overflowToDisk=&true&
&&diskPersistent=&false& diskExpiryThreadIntervalSeconds=&120&
&&memoryStoreEvictionPolicy=&LRU& /&
&&cache name=&springEhcache& maxElementsInMemory=&1000& eternal=&false&
&&overflowToDisk=&false& timeToIdleSeconds=&600& timeToLiveSeconds=&3600&
&&memoryStoreEvictionPolicy=&LRU& /&
&/ehcache&
driver=oracle.jdbc.driver.OracleDriver
url=jdbc\:oracle\:thin\:@172.16.1.241\:1521\:jtcrm
username=jtorder
password=jtorder
import static org.junit.Assert.
import java.util.HashM
import java.util.M
import javax.annotation.R
import org.junit.A
import org.junit.AfterC
import org.junit.B
import org.junit.BeforeC
import org.junit.I
import org.junit.T
import org.junit.runner.RunW
import org.springframework.test.context.ContextC
import org.springframework.test.context.junit4.SpringJUnit4ClassR
import com.zxh.customer.hashmap.service.IUserS
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = &classpath:sysconfig/applicationContext.xml&)
public class UserServiceImplTest {
&@Resource
&private IUserService userS
&@BeforeClass
&public static void setUpBeforeClass() throws Exception {
&@AfterClass
&public static void tearDownAfterClass() throws Exception {
&public void setUp() throws Exception {
&public void tearDown() throws Exception {
&public void testQueryUserById() {
&&Map map = new HashMap();
&&map.put(&custId&, 604763L);
&&Map resultMap = this.userService.queryUserById(map);
&&System.out.println(resultMap.get(&CUST_NAME&));
&public void testInsertUser() throws Exception {
&&Map map = new HashMap();
&&map.put(&custName&, &大方地&);
&&this.userService.insertUser(map);&&
&public void testQueryUserById1() {
&&Map map = new HashMap();
&&map.put(&custId&, 604763L);
&&Map resultMap = this.userService.queryUserById(map);
&&System.out.println(resultMap.get(&CUST_NAME&));
&public void testDeleteUser() {
&&fail(&Not yet implemented&);
&public void testUpdateUser() {
&&fail(&Not yet implemented&);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:260894次
积分:2481
积分:2481
排名:第10576名
原创:15篇
转载:117篇
评论:26条
(1)(1)(4)(5)(38)(28)(20)(3)(3)(2)(4)(2)(5)(2)(7)(9)使用Maven搭建Spring+SpringMVC+Mybatis+ehcache项目 - 推酷
使用Maven搭建Spring+SpringMVC+Mybatis+ehcache项目
搭建Spring不用说肯定是必须的,前端使用SpringMVC 而不使用Struts2是因为SpringMVC的效率要比struts2要高很多,虽然struts2有丰富的标签可以使用,使用Mybatis是因为以后项目要做报表模块,Mybatis使用SQL Mapping的方式很容易操作数据库。
这里我们使用intellij idea来做我们的开发工具,废话不多说,开干。框架的版本是
Spring 3.2.8.RELEASE
Spring MVC 3.2.8.RELEASE
mybatis 3.2.8
一、创建Maven Web项目
(略)本项目中用的maven是 3.3.3版本的,要求jdk版本是1.7之后的
二、在pom.xml中加入项目依赖的jar包
项目包依赖关系如下:
pom文件如下:
&properties&
&!-- Generic properties --&
&java.version&1.7&/java.version&
&project.build.sourceEncoding&UTF-8&/project.build.sourceEncoding&
&project.reporting.outputEncoding&UTF-8&/project.reporting.outputEncoding&
&!-- Web --&
&jsp.version&2.2&/jsp.version&
&jstl.version&1.2&/jstl.version&
&servlet.version&3.0.1&/servlet.version&
&!-- Spring --&
&spring-framework.version&3.2.8.RELEASE&/spring-framework.version&
&!-- Logging --&
&slf4j.version&1.7.5&/slf4j.version&
&!-- Test --&
&junit.version&4.11&/junit.version&
&/properties&
&dependencies&
&!--Aspect oriented--&
&dependency&
&groupId&org.aspectj&/groupId&
&artifactId&aspectjrt&/artifactId&
&version&1.8.7&/version&
&/dependency&
&dependency&
&groupId&org.aspectj&/groupId&
&artifactId&aspectjweaver&/artifactId&
&version&1.8.7&/version&
&/dependency&
&!-- Spring MVC --&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-webmvc&/artifactId&
&version&${spring-framework.version}&/version&
&/dependency&
&!-- Spring and Transactions --&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-tx&/artifactId&
&version&${spring-framework.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-jdbc&/artifactId&
&version&${spring-framework.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-test&/artifactId&
&version&${spring-framework.version}&/version&
&scope&test&/scope&
&/dependency&
&!-- Spring and Transactions --&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-tx&/artifactId&
&version&${spring-framework.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-web&/artifactId&
&version&${spring-framework.version}&/version&
&/dependency&
&!-- Logging with SLF4J & Log4j --&
&dependency&
&groupId&org.slf4j&/groupId&
&artifactId&slf4j-api&/artifactId&
&version&${slf4j.version}&/version&
&scope&compile&/scope&
&/dependency&
&dependency&
&groupId&org.slf4j&/groupId&
&artifactId&slf4j-log4j12&/artifactId&
&version&1.7.12&/version&
&/dependency&
&!-- mybatis &mysql --&
&dependency&
&groupId&org.mybatis&/groupId&
&artifactId&mybatis-spring&/artifactId&
&version&1.2.2&/version&
&/dependency&
&dependency&
&groupId&org.mybatis&/groupId&
&artifactId&mybatis&/artifactId&
&version&3.2.8&/version&
&/dependency&
&dependency&
&groupId&org.mybatis&/groupId&
&artifactId&mybatis-ehcache&/artifactId&
&version&1.0.0&/version&
&/dependency&
&dependency&
&groupId&mysql&/groupId&
&artifactId&mysql-connector-java&/artifactId&
&version&5.1.34&/version&
&/dependency&
&dependency&
&groupId&junit&/groupId&
&artifactId&junit&/artifactId&
&version&${junit.version}&/version&
&scope&test&/scope&
&/dependency&
&!--commons--&
&dependency&
&groupId&commons-dbcp&/groupId&
&artifactId&commons-dbcp&/artifactId&
&version&1.4&/version&
&/dependency&
&dependency&
&groupId&commons-lang&/groupId&
&artifactId&commons-lang&/artifactId&
&version&2.5&/version&
&/dependency&
&!-- Other Web dependencies --&
&dependency&
&groupId&javax.servlet&/groupId&
&artifactId&jstl&/artifactId&
&version&${jstl.version}&/version&
&/dependency&
&dependency&
&groupId&javax.servlet&/groupId&
&artifactId&javax.servlet-api&/artifactId&
&version&${servlet.version}&/version&
&scope&provided&/scope&
&/dependency&
&dependency&
&groupId&javax.servlet.jsp&/groupId&
&artifactId&jsp-api&/artifactId&
&version&${jsp.version}&/version&
&scope&provided&/scope&
&/dependency&
&dependency&
&groupId&org.apache.taglibs&/groupId&
&artifactId&taglibs-standard-impl&/artifactId&
&version&1.2.3&/version&
&/dependency&
&/dependencies&
三、添加日志的支持
日志我们使用slf4j,并用log4j来实现
SLF4J不同于其他日志类库,与其它有很大的不同。SLF4J(Simple logging Facade for Java)不是一个真正的日志实现,而是一个抽象层( abstraction layer),它允许你在后台使用任意一个日志类库。
SLF4J还有很多优点,具体可以参考
日志的实现类还是用熟悉的log4j,先要在项目的pom.xml文件中加入日志的支持
&!-- Logging with SLF4J & Log4j --&
&dependency&
&groupId&org.slf4j&/groupId&
&artifactId&slf4j-api&/artifactId&
&version&1.7.5&/version&
&scope&compile&/scope&
&/dependency&
&dependency&
&groupId&org.slf4j&/groupId&
&artifactId&slf4j-log4j12&/artifactId&
&version&1.7.12&/version&
&/dependency&
配置很简单,log4j的详细配置可以参考log4j官网
log4j.properties
log4j.rootLogger=INFO,Console,File
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Threshold = DEBUG
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d %p [%c]
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.File=${catalina.home}/logs/
log4j.appender.A2.Append=false
log4j.appender.A2.DatePattern='-'yyyy-MM-dd'.log'
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d %p [%c] - %m%n
三、整合Spring+Mybatis
把Spring和Mybatis的jar包都引入之后就可以整合这两个框架了
先看下项目的相关配置文件
其中gererator.properties和generatorConfig.xml是用来根据数据库自动生成mapper接口,实体,以及映射文件的
mybatis-config是mybatis的一些映射的相关配置,比如mapper,cache等
spring-mybatis是自动扫描,自动装配mapper以及datasource,sqlSessionFactory等配置
这些会在接下来详细说明
1.JDBC配置文件
jdbc.initialSize=5
jdbc.maxActive=20
jdbc.maxIdle=5
jdbc.defaultAutoCommit=true
jdbc.removeAbandoned=true
jdbc.removeAbandonedTimeout=30
jdbc.logAbandoned=true
jdbc.testWhileIdle=true
jdbc.validationQuery=select 1 from dual
jdbc.timeBetweenEvictionRunsMillis=30000
jdbc.numTestsPerEvictionRun=10
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root
2.创建spring-mybatis.xml
创建spring-mybatis.xml来配置mybatis的一些信息,主要是数据源、事务、自动扫描、自动注入等功能
&?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:p=&http://www.springframework.org/schema/p&
xmlns:tx=&http://www.springframework.org/schema/tx&
xmlns:context=&http://www.springframework.org/schema/context&
xmlns:aop=&http://www.springframework.org/schema/aop&
xsi:schemaLocation=&http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd&&
&!-- enable component scanning --&
&context:component-scan base-package=&com.zeusjava& /&
&!-- enable autowire --&
&context:annotation-config /&
&!-- enable transaction demarcation with annotations --&
&tx:annotation-driven /&
&!-- 读取mysql jdbc的配置--&
&bean id=&propertyConfigurer&
class=&org.springframework.beans.factory.config.PropertyPlaceholderConfigurer&&
&property name=&location& value=&classpath:jdbc.properties& /&
&!-- 配置数据源,从上面配置文件读取--&
&!-- 数据源 --&
&bean id=&dataSource& class=&mons.dbcp.BasicDataSource&&
&property name=&driverClassName& value=&${jdbc.driverClassName}& /&
&property name=&url& value=&${jdbc.url}& /&
&property name=&username& value=&${jdbc.username}& /&
&property name=&password& value=&${jdbc.password}& /&
&property name=&initialSize& value=&${jdbc.initialSize}& /&
&property name=&maxActive& value=&${jdbc.maxActive}& /&
&property name=&maxIdle& value=&${jdbc.maxIdle}& /&
&property name=&defaultAutoCommit& value=&${jdbc.defaultAutoCommit}& /&
&property name=&removeAbandoned& value=&true& /&
&property name=&removeAbandonedTimeout& value=&${jdbc.removeAbandonedTimeout}& /&
&property name=&logAbandoned& value=&${jdbc.logAbandoned}& /&
&!--主动检测连接池是否有效--&
&property name=&testWhileIdle&
value=&${jdbc.testWhileIdle}& /&
&property name=&validationQuery& value=&${jdbc.validationQuery}& /&
&property name=&timeBetweenEvictionRunsMillis&
value=&${jdbc.timeBetweenEvictionRunsMillis}& /&
&property name=&numTestsPerEvictionRun& value=&${jdbc.numTestsPerEvictionRun}& /&
&bean id=&sqlSessionFactory& class=&org.mybatis.spring.SqlSessionFactoryBean&&
&property name=&dataSource& ref=&dataSource&/&
&!-- 配置扫描Domain的包路径 --&
&property name=&typeAliasesPackage& value=&com.zeusjava.kernel.entity&/&
&!-- 配置mybatis配置文件的位置 --&
&property name=&configLocation& value=&classpath:mybatis-config.xml&/&
&!-- 配置扫描Mapper XML的位置 --&
&property name=&mapperLocations& value=&classpath*:com/zeusjava/kernel/mapper/*.xml&/&
&!-- 配置扫描Mapper接口的包路径 --&
&bean class=&org.mybatis.spring.mapper.MapperScannerConfigurer&&
&property name=&basePackage& value=&com.zeusjava.kernel.dao&/&
&bean id=&sqlSessionTemplate& class=&org.mybatis.spring.SqlSessionTemplate&&
&constructor-arg ref=&sqlSessionFactory&/&
&bean id=&mybatisTransactionManager&
class=&org.springframework.jdbc.datasource.DataSourceTransactionManager&
p:dataSource-ref=&dataSource&/&
&tx:advice id=&txAdvice& transaction-manager=&mybatisTransactionManager&&
&tx:attributes&
&tx:method name=&save*& propagation=&REQUIRED&/&
&tx:method name=&insert*& propagation=&REQUIRED&/&
&tx:method name=&add*& propagation=&REQUIRED&/&
&tx:method name=&update*& propagation=&REQUIRED&/&
&tx:method name=&delete*& propagation=&REQUIRED&/&
&tx:method name=&remove*& propagation=&REQUIRED&/&
&tx:method name=&accept*& propagation=&REQUIRED&/&
&tx:method name=&reject*& propagation=&REQUIRED&/&
&tx:method name=&execute*& propagation=&REQUIRED&/&
&tx:method name=&del*& propagation=&REQUIRED&/&
&tx:method name=&recover*& propagation=&REQUIRED&/&
&tx:method name=&sync*& propagation=&REQUIRED&/&
&tx:method name=&*& read-only=&true&/&
&/tx:attributes&
&/tx:advice&
&aop:config&
&aop:pointcut id=&txPointcut&
expression=&execution(public * com.zeusjava.kernel.service.*.*(..))&/&
&aop:advisor pointcut-ref=&txPointcut& advice-ref=&txAdvice&/&
&/aop:config&
3.创建数据库表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(40) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
into `user`(`id`,`user_name`,`password`) values (1,'赵宏轩','123456');
4.创建User的Mapping映射文件,User实体和Mapper接口
1.在pom.xml中添加mybatis-generator-maven-plugin插件
&finalName&HelloSSM&/finalName&
&groupId&org.mybatis.generator&/groupId&
&artifactId&mybatis-generator-maven-plugin&/artifactId&
&version&1.3.2&/version&
&configuration&
&verbose&true&/verbose&
&overwrite&true&/overwrite&
&/configuration&
&/plugins&
####2.在maven项目下的src/main/resources 目录下建立名为 generatorConfig.xml的配置文件以及和generator有关的属性文件,作为mybatis-generator-maven-plugin 插件的执行目标
![目录结构](/b4c55d5.png)
generatorConfig.xml
&?xml version=&1.0& encoding=&UTF-8&?&
&!DOCTYPE generatorConfiguration
PUBLIC &-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN&
&http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd&&
&generatorConfiguration&
&!--导入属性配置 --&
&properties resource=&generator.properties&&&/properties&
&!--指定特定数据库的jdbc驱动jar包的位置 --&
&classPathEntry location=&${jdbc.driverLocation}&/&
&context id=&default& targetRuntime=&MyBatis3&&
&!-- optional,旨在创建class时,对注释进行控制 --&
&commentGenerator&
&property name=&suppressDate& value=&true& /&
&/commentGenerator&
&!--jdbc的数据库连接 --&
&jdbcConnection driverClass=&${jdbc.driverClassName}& connectionURL=&${jdbc.url}& userId=&${jdbc.username}& password=&${jdbc.password}&&
&/jdbcConnection&
&javaTypeResolver &
&property name=&forceBigDecimals& value=&false& /&
&/javaTypeResolver&
&javaModelGenerator targetPackage=&com.zeusjava.kernel.entity& targetProject=&src/main/java&&
&!-- 是否对model添加 构造函数 --&
&property name=&constructorBased& value=&true&/&
&!-- 是否允许子包,即targetPackage.schemaName.tableName --&
&property name=&enableSubPackages& value=&false&/&
&!-- 建立的Model对象是否 不可改变
即生成的Model对象不会有 setter方法,只有构造方法 --&
&property name=&immutable& value=&true&/&
&property name=&trimStrings& value=&true&/&
&/javaModelGenerator&
&!--Mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 --&
&sqlMapGenerator targetPackage=&com.zeusjava.kernel.mapper& targetProject=&src/main/java&&
&property name=&enableSubPackages& value=&false&/&
&/sqlMapGenerator&
&javaClientGenerator targetPackage=&com.zeusjava.kernel.dao& targetProject=&src/main/java& type=&MIXEDMAPPER&&
&property name=&enableSubPackages& value=&&/&
&property name=&exampleMethodVisibility& value=&&/&
&property name=&methodNameCalculator& value=&&/&
&property name=&rootInterface& value=&&/&
&/javaClientGenerator&
&table tableName=&user&
domainObjectName=&User&
enableCountByExample=&false&
enableUpdateByExample=&false&
enableDeleteByExample=&false&
enableSelectByExample=&false&
selectByExampleQueryId=&false&&
&/context&
&/generatorConfiguration&
还有与之相关联的generator.properties文件
jdbc.driverLocation=D:\\idea\\maven\\mysql\\mysql-connector-java\\5.1.29\\mysql-connector-java-5.1.29.jar
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root
3.在Intellij IDEA添加一个“Run运行”选项,使用maven运行mybatis-generator-maven-plugin插件
1).点击Run,选择Edit Configurations
2).点击左上角的
3).输入name,选择Working directory,Command line 填上
mybatis-generator:generate -e
4.点击运行查看结果
运行插件控制台如果打印build Success 就说明成功了
会在指定目录产生三个文件,分别是
Mapper接口 ,
Mapping配置文件
5.创建mybatis-config.xml配置文件
&?xml version=&1.0& encoding=&UTF-8&?&
&!DOCTYPE configuration
PUBLIC &-//mybatis.org//DTD Config 3.0//EN&
&http://mybatis.org/dtd/mybatis-3-config.dtd&&
&configuration&
&settings&
&setting name=&cacheEnabled& value=&false&/&
&setting name=&lazyLoadingEnabled& value=&true&/&
&setting name=&aggressiveLazyLoading& value=&false&/&
&setting name=&localCacheScope& value=&STATEMENT&/&
&setting name=&multipleResultSetsEnabled& value=&true&/&
&setting name=&useColumnLabel& value=&true&/&
&setting name=&defaultStatementTimeout& value=&25000&/&
&setting name=&mapUnderscoreToCamelCase& value=&true&/&
&!-- 是否使用插入数据后自增主键的值,需要配合keyProperty使用 --&
&setting name=&useGeneratedKeys& value=&true&/&
&/settings&
&typeAliases&
&typeAlias alias=&User& type=&com.zeusjava.kernel.entity.User& /&
&/typeAliases&
&!--&mapper resource=&com/zeusjava/kernel/mapper/UserMapper.xml&/&--&
&!--&mapper class=&com.zeusjava.kernel.dao.UserMapper&/&--&
&!--&mapper url=&file:///D:/idea/HelloSSM/src/main/java/com/zeusjava/kernel/mapper/UserMapper.xml&/&--&
&package name=&com.zeusjava.kernel.dao&/&
&!--&mapper class=&com.zeusjava.kernel.dao.UserMapper&/&--&
&/mappers&
&/configuration&
其中最后的mapper有四种配置方式,但是,在我的电脑上只有使用url的方式才行,不知道是怎么回事,待查询。
6.建立Service接口和实现类
IUserService.java代码如下
package com.zeusjava.kernel.service;
import com.zeusjava.kernel.entity.User;
* Created by LittleXuan on .
public interface IUserService {
public User getUserById(int userId);
UserServiceImpl.java的代码如下
package com.zeusjava.kernel.service.impl;
import com.zeusjava.kernel.dao.UserMapper;
import com.zeusjava.kernel.entity.User;
import com.zeusjava.kernel.service.IUserService;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
* Created by LittleXuan on .
@Service(&userService&)
public class IUserServiceImpl implements IUserService {
private UserMapper userMapper;
public User getUserById(int userId) {
return this.userMapper.selectByPrimaryKey(userId);
7.建立测试类
import com.zeusjava.kernel.entity.User;
import com.zeusjava.kernel.service.IUserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
* Created by LittleXuan on .
@RunWith(SpringJUnit4ClassRunner.class)
//表示继承了SpringJUnit4ClassRunner类
@ContextConfiguration(locations = {&classpath:conf/spring/beans-mybatis.xml&})
public class SSMTest {
private static Logger logger = LoggerFactory.getLogger(SSMTest.class);
private IUserService userService = null;
public void test1() {
User user = userService.getUserById(1);
logger.info(&姓名:&+user.getUserName());
运行单元测试,结果如下,说明spring和mybatis的整合已经完成。
四、和SpringMVC整合
和Spring MVC的整合就简单的多了,只需要添加一个Spring MVC配置文件,和配置一下Web.xml就行了,我在前面的博客写过一篇文章,请戳
1.配置Spring MVC 配置文件zeusjava-servlet.xml
在配置文件里主要配置 自动扫描控制器 , 视图解析器 , 注解
&?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:p=&http://www.springframework.org/schema/p&
xmlns:context=&http://www.springframework.org/schema/context&
xsi:schemaLocation=&
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
&!-- 激活利用注解进行装配 --&
&context:annotation-config /&
&!-- ① :对 web 包中的所有类进行扫描,以完成 Bean 创建和自动依赖注入的功能 --&
&context:component-scan base-package=&com.zeusjava.web.controller&/&
&!-- ② :启动 Spring MVC 的注解功能,完成请求和注解 POJO 的映射 --&
&bean class=&org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter&/&
③ :对模型视图名称的解析,即在模型视图名称添加前后缀 --&
&bean class=&org.springframework.web.servlet.view.InternalResourceViewResolver&
p:prefix=&/WEB-INF/jsp/& p:suffix=&.jsp&/&
2.配置web.xml
在web.xml里配置Spring MVC的DispatcherServlet和mybatis的配置文件
&?xml version=&1.0& encoding=&UTF-8&?&
&web-app xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xmlns=&/xml/ns/javaee&
xsi:schemaLocation=&/xml/ns/javaee /xml/ns/javaee/web-app_3_0.xsd&
version=&3.0&&
&display-name&HelloSSM&/display-name&
&!-- Spring和mybatis的配置文件 --&
&context-param&
&param-name&contextConfigLocation&/param-name&
&param-value&classpath:spring-mybatis.xml&/param-value&
&/context-param&
&!-- 编码过滤器 --&
&filter-name&encodingFilter&/filter-name&
&filter-class&org.springframework.web.filter.CharacterEncodingFilter&/filter-class&
&async-supported&true&/async-supported&
&init-param&
&param-name&encoding&/param-name&
&param-value&UTF-8&/param-value&
&/init-param&
&filter-mapping&
&filter-name&encodingFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
&!-- Spring监听器 --&
&listener&
&listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&
&/listener&
&!-- 防止Spring内存溢出监听器 --&
&listener&
&listener-class&org.springframework.web.util.IntrospectorCleanupListener&/listener-class&
&/listener&
&!-- Spring MVC servlet --&
&servlet-name&SpringMVC&/servlet-name&
&servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&
&init-param&
&param-name&contextConfigLocation&/param-name&
&param-value&classpath:spring-mvc.xml&/param-value&
&/init-param&
&load-on-startup&1&/load-on-startup&
&async-supported&true&/async-supported&
&/servlet&
&servlet-mapping&
&servlet-name&SpringMVC&/servlet-name&
&url-pattern&/&/url-pattern&
&/servlet-mapping&
&welcome-file-list&
&welcome-file&/index.jsp&/welcome-file&
&/welcome-file-list&
&/web-app&
3.在WEB_INF/jsp建立一个简单的测试页面user.jsp
&%@ page language=&java& pageEncoding=&UTF-8&%&
&h1&用户ID为${user.id}的用户详情&/h1&
ID:${user.id}
姓名:${user.userName}
4.建立User控制器
通过url传入一个id,解析这个id然后查询数据库,得到User对象放入jsp页面显示。
package com.zeusjava.web.controller;
* Created by LittleXuan on .
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import com.zeusjava.kernel.entity.User;
import com.zeusjava.kernel.service.IUserService;
import mons.lang.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping(&/user&)
public class UserController {
private IUserService userService;
@RequestMapping(value=&/userInfo/{id}&, method= RequestMethod.GET)
public String toIndex(HttpServletRequest request, Model model,@PathVariable(&id&) String id) {
if(StringUtils.isEmpty(id)){
throw new IllegalArgumentException(&id不能为空&);
int userId = Integer.parseInt(id);
User user = this.userService.getUserById(userId);
model.addAttribute(&user&, user);
return &user&;
5.添加tomcat服务器并部署war包
1. File-Project Structure 点击 Artifacts 一栏
点击 + ,选择 Web-Application-Exploded 然后选择from maven选中本项目
Web Application Exploded是没有压缩的war包,相当于文件夹
Web Application Achieved是雅俗后的war包
2.intellij会自动帮我们生成一个war包
3.点击 Run-Run Configurations
点击 + 选择 tomcat server-&local
4.点击 Configure
5.点击 Deployment选项卡 ,点击 + 号,选择一个artifact,就是第二部的war包
6.OK启动服务器
在任务栏输入 http://localhost:8081/HelloSSM/user/userInfo/1 ,回车,结果如下:
一个简单的SSM项目环境就搭建好了。
五、和ehcache的整合
Ehcache是Hibernate的默认的cache,但是mybatis中需要自己集成,在Mybatis中使用会大大增加性能,下面开始整合mybatis和Ehcache
1.使用首先要把需要的jar包依赖加入pom中
&dependency&
&groupId&org.mybatis&/groupId&
&artifactId&mybatis-ehcache&/artifactId&
&version&1.0.0&/version&
&/dependency&
&dependency&
&groupId&org.ehcache&/groupId&
&artifactId&ehcache&/artifactId&
&version&3.0.0.m3&/version&
&/dependency&
2.在Resource中添加一个ehcache.xml的配置文件
&?xml version=&1.0& encoding=&UTF-8&?&
&ehcache xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xsi:noNamespaceSchemaLocation=&http://ehcache.org/ehcache.xsd&
updateCheck=&false&&
&diskStore path=&java.io.tmpdir& /&
&defaultCache eternal=&false& maxElementsInMemory=&1000&
overflowToDisk=&false& diskPersistent=&false& timeToIdleSeconds=&0&
timeToLiveSeconds=&600& memoryStoreEvictionPolicy=&LRU& /&
&cache name=&testCache& eternal=&false& maxElementsInMemory=&100&
overflowToDisk=&false& diskPersistent=&false& timeToIdleSeconds=&0&
timeToLiveSeconds=&300& memoryStoreEvictionPolicy=&LRU& /&
&/ehcache&
name:Cache的唯一标识
maxElementsInMemory:内存中最大缓存对象数
maxElementsOnDisk:磁盘中最大缓存对象数,若是0表示无穷大
eternal:Element是否永久有效,一但设置了,timeout将不起作用
overflowToDisk:配置此属性,当内存中Element数量达到maxElementsInMemory时,Ehcache将会Element写到磁盘中
timeToIdleSeconds:设置Element在失效前的允许闲置时间。仅当element不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大
timeToLiveSeconds:设置Element在失效前允许存活时间。最大时间介于创建时间和失效时间之间。仅当element不是永久有效时使用,默认是0.,也就是element存活时间无穷大
diskPersistent:是否缓存虚拟机重启期数据
diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒
diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区
memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)
3.在spring-mybatis.xml中加入chache配置
&!-- 使用ehcache缓存 --&
&bean id=&ehCacheManager& class=&org.springframework.cache.ehcache.EhCacheManagerFactoryBean&&
&property name=&configLocation& value=&classpath:ehcache.xml& /&
4.在mapper.xml中配置cache
&cache type=&org.mybatis.caches.ehcache.LoggingEhcache& &
&property name=&timeToIdleSeconds& value=&3600&/&
&property name=&timeToLiveSeconds& value=&3600&/&
&property name=&maxEntriesLocalHeap& value=&1000&/&
&property name=&maxEntriesLocalDisk& value=&&/&
&property name=&memoryStoreEvictionPolicy& value=&LRU&/&
type是使用的cache类型, LoggingEhcache 会记录下日志,如果不需要日志的话可以使用 EhcacheCache
这样配置之后,所以的操作都会执行缓存,如果有的操作不需要的话,可以在sql配置里将useCache设置为 false
&id, user_name, password&,
&from user&,
&where id = #{id,jdbcType=INTEGER}&
@Options(useCache = false,timeout = 10000,flushCache = false)
@ResultMap(&BaseResultMap&)
User selectByPrimaryKey(Integer id);
5.测试性能
public void test1() {
long beginTime=System.nanoTime();
User user = userService.getUserById(1);
long endTime=System.nanoTime();
System.out.println(&查询时间 :& + (endTime-beginTime)+&ns&);
logger.info(&姓名:&+user.getUserName());
第一次把useCache设置为 false
第二次把useCache设置为 true
两次执行的时间差了大约 0.4 秒
整个项目已经放到github上了,有需要的可以前往
查看, 不懂的地方欢迎探讨...
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 mybatis ehcache 集群 的文章

 

随机推荐