mybatis+spring+c3p0+maven+ehcache

项目截图

 

pom.xml如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.alibaba</groupId><artifactId>mybatispring</artifactId><version>0.0.1-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><springversion>4.0.0.RELEASE</springversion><junitversion>4.12</junitversion></properties><dependencies><!-- junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junitversion}</version><scope>test</scope></dependency><!-- db --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.35</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.1.1</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.2.2</version></dependency><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${springversion}</version><type>jar</type><scope>compile</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${springversion}</version><type>jar</type><scope>compile</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${springversion}</version><type>jar</type><scope>compile</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${springversion}</version><type>jar</type><scope>compile</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${springversion}</version><type>jar</type><scope>compile</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${springversion}</version><type>jar</type><scope>compile</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${springversion}</version><type>jar</type><scope>compile</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>${springversion}</version><type>jar</type><scope>compile</scope></dependency><!-- cglib --><dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>2.2.2</version></dependency><!-- log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!-- c3p0数据源 --><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5-pre10</version></dependency></dependencies></project>

然后配置spring,applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd "><!-- 加载配置文件 --><context:property-placeholder location="classpath:db.properties" /><!-- 数据源,使用dbcp --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close"><property name="driverClass" value="${jdbc.driverClass}" /><property name="jdbcUrl" value="${jdbc.jdbcUrl}" /><property name="user" value="${jdbc.user}" /><property name="password" value="${jdbc.password}" /><property name="minPoolSize" value="${jdbc.miniPoolSize}" /><property name="maxPoolSize" value="${jdbc.maxPoolSize}" /><property name="initialPoolSize" value="${jdbc.initialPoolSize}" /><property name="maxIdleTime" value="${jdbc.maxIdleTime}" /><property name="acquireIncrement" value="${jdbc.acquireIncrement}" /><property name="acquireRetryAttempts" value="${jdbc.acquireRetryAttempts}" /><property name="acquireRetryDelay" value="${jdbc.acquireRetryDelay}" /><property name="testConnectionOnCheckin" value="${jdbc.testConnectionOnCheckin}" /><property name="automaticTestTable" value="${jdbc.automaticTestTable}" /><property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}" /><property name="checkoutTimeout" value="${jdbc.checkoutTimeout}" /></bean><!-- sqlSessinFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 加载mybatis的配置文件 --><property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" /><!-- 数据源 --><property name="dataSource" ref="dataSource" /></bean><!-- 原始dao接口 --><bean id="userDao" class="com.alibaba.dao.UserDaoImpl"><property name="sqlSessionFactory" ref="sqlSessionFactory" /></bean><!-- mapper配置 MapperFactoryBean:根据mapper接口生成代理对象 --><!-- <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> mapperInterface指定mapper接口 <property name="mapperInterface" value="cn.itcast.ssm.mapper.UserMapper"/> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean> --><!-- mapper批量扫描,从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册 遵循规范:将mapper.java和mapper.xml映射文件名称保持一致,且在一个目录 中 自动扫描出来的mapper的bean的id为mapper类名(首字母小写) --><!-- 指定扫描的包名 如果扫描多个包,每个包中间使用半角逗号分隔 --><!-- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="cn.itcast.ssm.mapper"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean> --></beans>

引用的db.properties如下

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl = jdbc:mysql://localhost:3306/test
jdbc.user = root
jdbc.password = 123456
jdbc.miniPoolSize = 1
jdbc.maxPoolSize = 20
jdbc.initialPoolSize = 1
jdbc.maxIdleTime = 25000
jdbc.acquireIncrement = 1jdbc.acquireRetryAttempts = 30
jdbc.acquireRetryDelay = 1000
jdbc.testConnectionOnCheckin = true
jdbc.automaticTestTable = c3p0TestTable
jdbc.idleConnectionTestPeriod = 18000
jdbc.checkoutTimeout=3000

SqlMapConfig.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><!-- 别名定义 --><typeAliases><!-- 批量别名定义 指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以)--><package name="com.alibaba"/></typeAliases><!-- 加载 映射文件 --><mappers><mapper resource="mybatis/UserMapper.xml"/><!-- 批量加载mapper指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中上边规范的前提是:使用的是mapper代理方法和spring整合后,使用mapper扫描器,这里不需要配置了--><!-- <package name="cn.itcast.ssm.mapper"/> --></mappers></configuration>

UserDao.java

package com.alibaba.dao;import com.alibaba.po.User;public interface UserDao {public User findUserById(int id) throws Exception;
}

UserDaoImpl.java

package com.alibaba.dao;import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;import com.alibaba.po.User;public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{public User findUserById(int id) throws Exception {SqlSession sqlSession = this.getSqlSession();User user = sqlSession.selectOne("mapper.UserMapper.getUser", id);return user;}}

UserDaoTest.java

package com.alibaba.dao;import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.alibaba.po.User;public class UserDaoTest {private ApplicationContext applicationContext;//在setUp这个方法得到spring容器
    @Beforepublic void setUp() throws Exception {applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");}@Testpublic void testFindUserById() throws Exception {UserDao userDao = (UserDao) applicationContext.getBean("userDao");//调用userDao的方法User user = userDao.findUserById(1);System.out.println(user);}}

 log4j如下

# Global logging configuration
#\u5728\u5f00\u53d1\u73af\u5883\u4e0b\u65e5\u5fd7\u7ea7\u522b\u8981\u8bbe\u7f6e\u6210DEBUG\uff0c\u751f\u4ea7\u73af\u5883\u8bbe\u7f6e\u6210info\u6216error
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

如果项目运行会报c3p0找不到文件错误,那个没影响,只需要把Log4jdebug改为Info即可,生产环境就不会报错。

 



加入ehcache

    <!-- ehcache --><dependency><groupId>org.mybatis.caches</groupId><artifactId>mybatis-ehcache</artifactId><version>1.0.3</version></dependency><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache-core</artifactId><version>2.6.11</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.12</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.12</version></dependency><dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>2.2.2</version></dependency>

配置文件ehcache.xml

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"><diskStore path="D:\develop\ehcache" /><defaultCache maxElementsInMemory="1000" maxElementsOnDisk="10000000"eternal="false" overflowToDisk="false" timeToIdleSeconds="120"timeToLiveSeconds="120" diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"></defaultCache>
</ehcache>

<!-- name:缓存名称。
maxElementsInMemory:缓存最大个数。
eternal:对象是否永久有效,一但设置了,timeout将不起作用。
timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
timeToLiveSeconds:设置对象在失效前允许存活时间,最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时 间无穷大。
overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
maxElementsOnDisk:硬盘最大缓存个数。
diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU。你可以设置为 FIFO或是LFU。
clearOnFlush:内存数量最大时是否清除。 -->

 

在SqlMapConfig.xml里设置,其实是默认设置好的,另外两个是设置延迟加载的没影响,第三个默认是true放这只是方便管理

<settings><!-- 打开延迟加载 的开关 --><setting name="lazyLoadingEnabled" value="true" /><!-- 将积极加载改为消极加载即按需要加载 --><setting name="aggressiveLazyLoading" value="false" /><!-- 开启二级缓存 --><setting name="cacheEnabled" value="true" /></settings>

在UserMapper.xml里配置

<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

此外User需要序列化,因为有可能缓存是存在硬盘上。

此时就可以使用ehcache了。

 

转载于:https://www.cnblogs.com/tuifeideyouran/p/4580775.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windbg linux内核调试,windbg调试虚拟机XP系统

一、先介绍一下被调试的虚拟机系统环境:虚拟机:vmware workstation 10.0版本虚拟机操作系统: Microsoft windows xp professional 2002 service pack3cpu:2.8GHz,2.64GB内存二、这个没有直接关系。做个笔记而已。1.在XP系统中&#xff0c;创建了一个first.c文件测试代码如下:#i…

C#反射技术在多语言实现中的实际用处参考,让初学者学技术有个针对性【附源码】...

做软件&#xff0c;有点儿类似铁人三项比赛&#xff1f;赛跑、射击、游泳? 光某个环节突出&#xff0c;也没多大用&#xff0c;需要整体能力都强&#xff0c;能把整体都可以搞定&#xff0c;才容易得到比赛的胜利&#xff0c;光某一环节非常优秀&#xff0c;也赢得不来整个比…

华为网卡支持linux,在openwrt下对华为WA633无线AP的千兆网卡驱动进行支持

1.下面是这款AP的全裸图&#xff0c;AP的无线网卡采用了AR9223&#xff0c;PHY采用了博通的BCM5461&#xff0c;主控CPU位octeon 500&#xff0c;射频功放采用的是RF5602方案。由于这款CPU并不常见&#xff0c;我至今未在网上找到它的datasheet&#xff0c;导致我们在玩这款AP的…

linux 正则表达式 视频教程,30分钟带你玩转正则表达式

定义&#xff1a;正则表达式说白了就是有普通字符、以及特殊字符组成的文子模式。{匹配模式标准}正则表达式将会作为一个模板与所搜索的字符串进行匹配。可以让使用者轻易达到搜寻/删除/取代某些特定字符的处理程序。此外vim、grep、find、awk、sed等命令都支持正则表达式注&am…

电脑SSH登陆树莓派Raspberry的两种方式

采用SSH登陆Raspberry需要提前知道Raspberry的IP&#xff0c;SSH登陆端口为22&#xff0c;这里分享两种基于SSH网络登陆树莓派的方式。 一、利用路由器搭建局域网登陆树莓派 1、用路由器搭建局域网&#xff0c;电脑无线或有线方式连接路由器&#xff0c;树莓派用网线连接路由…

Linux sed工具用法

一、sed用法 语法&#xff1a; sed [-nefr] [动作] 作用&#xff1a; 以行为单位的新增/删除/修改/插入/替换等功能&#xff0c;bash脚本中常用。sed功能强大&#xff0c;主要体现在[动作]的指定 选项与参数&#xff1a; -n &#xff1a;只有经过 sed 特殊处理的那一行&…

SourceInsight配置

如图&#xff1a; 1&#xff09; SourceInsight: a) 搜索结果直接替换 b) 配置背景色 c) 显示行号、设置tab键宽度为4个空格以及其他 d) 字体设置 e) 不创建备份文件

linux防火墙查看被动模式,Centos7搭建vsftpd及被动模式下的防火墙设置

一、安装vsftpd&#xff1a;yum -y install vsftpd二、 创建用户名useradd zhangsanpasswd 123456useradd lisipasswd 123456在配置文件下设置拒绝匿名访问重启下服务systemctl restart vsftpd.service将lisi添加进黑名单vim /etc/vsftpd/ftpusers黑名单是路径位于/etc/vsftpd/…

前端小知识点(1):undefined和null区别

目录 一、奇怪点 二、历史原因 三、具体区别 四、代码演示 五、运行结果 一、奇怪点 有点奇怪的是&#xff0c;JavaScript语言居然有两个表示"无"的值&#xff1a;undefined和null。这是为什么&#xff1f; 二、历史原因 1995年JavaScript诞生时&#xff0c;…

六款主流数据恢复软件(绿色版)下载

From: http://hi.baidu.com/zhaodx/item/406401abe55cfa9e14107377 由于我们误操作或病毒侵害等意外情况发生&#xff0c;难免会删除硬盘上的有用数据或文件&#xff0c;此时请记住&#xff1a;千万不要再往这个硬盘里复制文件或写入新的数据了&#xff0c;哪怕已经清空了回收站…

树莓派UART串口编程--使用wiringPi库-C开发【1-基础应用】

一、串口说明 莓派3B上UART串口位于GPIO的8脚和10脚&#xff0c;分别为GPIO8Tx&#xff0c;GPIO10Rx。在连接外部接口时&#xff0c;需要交换接口&#xff0c;即GPIO8连接到外设的Rx&#xff0c;GPIO10连接到外设的Tx。Rpi3的接口如下&#xff1a; Rpi3B的GPIO8和GPIO10该串口…

linux mint视频,Linux Mint 20.1 beta 发布,新增免费视频播放器

经过六个月的开发&#xff0c;Linux Mint 20.1“ Ulyssa”的 Beta 版于近日发布了。Mint 20.1 是一个长期支持(LTS)版本&#xff0c;基于 Ubuntu 20.04 LTS &#xff0c;将持续维护到 2025 年。该 Beta 版本基本上实装了此前预告的一些新功能&#xff0c;并提供了 Cinnamon、MA…

linux python pymysql,Python之pymysql的使用

在Python3.x中&#xff0c;可以使用pymysql来MySQL数据库的连接&#xff0c;并实现数据库的各种操作&#xff0c;本次博客主要介绍了pymysql的安装和使用方法。PyMySQL的安装一、.windows上的安装方法&#xff1a;在python3.6中&#xff0c;自带pip3&#xff0c;所以在python3中…

树莓派静态IP配置方法

一、网络接口文件 配置静态IP有个好处在于每次的访问IP是固定的&#xff0c;比如用到的samba服务器共享文件时可以不改动网络地址。树莓派网络接口在/etc/network/interfaces 文件中进行配置&#xff0c;打开该文件&#xff1a;sudo vi /etc/network/interfaces 可以看到第四行…

前端小知识点(2):普通字符串和new String有什么区别

目录 一、其实不仅字符串 二、那么到底为什么&#xff1f; 三、代码案例 四、运行结果 一、其实不仅字符串 var str abc; typeof str > string //他不是对象&#xff0c;可以有方法或者属性 var num 123; //他不是对象&#xff0c;可以有方法或者属性 typeof num …

Linux 管理登陆的用户/查看/剔除

Linux是多用户操作系统&#xff0c;支持多用户同时在线&#xff0c;支持对登陆用户的管理&#xff1a;查看与剔除等。 一、查看在线用户命令 命令&#xff1a; w 二、查看登录记录命令 命令 last 三、剔除在线用户命令 命令&#xff1a;sudo pkill -kill -t usr 四、pkill…

Windows下 maven3.0.4的安装步骤+maven配置本地仓库

简单讲下maven的安装步骤&#xff1a; 1.在安装maven之前&#xff0c;先确保已经安装JDK1.6及以上版本&#xff0c;并且配置好环境变量。 2.下载maven3&#xff0c;最新版本是Maven3.0.4 &#xff0c;下载地址&#xff1a;http://maven.apache.org/download.html 下载apache…

前端小知识点(3):JavaScript 单线程

目录 一、为什么 JavaScript 是单线程&#xff1f; 二、JavaScript是单线程&#xff0c;怎样执行异步的代码&#xff1f; 三、事件循环机制 四、代码1 五、结果1 六、代码2 七、结果2 一、为什么 JavaScript 是单线程&#xff1f; JavaScript 语言的一大特点就是单线程…

Linux安装samba的过程,Samba安装全过程

对于linux与windows共享&#xff0c;和平共处&#xff0c;我们可以用Samba软件Samba是一套免费的开源软件&#xff0c;可以在linux或其他类unix操作系统上实现windows域控制器&#xff0c;文件服务&#xff0c;打印服务等。Samba实现了windows系统所使用的核心网络协议&#xf…

树莓派UART串口编程--使用wiringPi库-C开发【2-修改驱动】

一、前言 上一篇博文记录了使用wiringPi提供的串口驱动wiringSerial.c wiringSerial.h&#xff0c;并基于该驱动对串口进行简单的通信&#xff0c;测试中发现该串口的驱动比较简单&#xff0c;接收数据会存在分包的现象&#xff0c;另外一点是串口配置只提供了波特率参数配置&…