SpringMVC,MyBatis项目中兼容Oracle和MySql的解决方案及其项目环境搭建配置、web项目中的单元测试写法、HttpClient调用post请求等案例
要搭建的项目的项目结构如下(使用的框架为:Spring、SpingMVC、MyBatis):
2.pom.xml中的配置如下(注意,本工程分为几个小的子工程,另外两个工程最终是jar包):
其中pom.xml中的内容如下,其中${ip}为ip地址:
<?xml version="1.0" encoding="UTF-8"?> <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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>xxx.xxx.xxx</groupId> <artifactId>xxx</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <name>App tpl</name> <modules> <module>xxx-api</module> <module>xxx-impl</module> <module>xxx-webapp</module> </modules> <scm> <connection>scm:svn:http://${ip}/svn/xxx/trunk</connection> <developerConnection>scm:svn:http://${ip}/svn/xxx/trunk</developerConnection> <url>http://${ip}/svn/xxx/trunk</url> </scm> </project> |
其中xxx-xxx-webapp中的pom配置如下:
其中maven项目的目录结构:
xxx-xxx-webapp
--src
--main
---java
---resources
---webapp
--test
--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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>xxx.xxx.xxx</groupId> <artifactId>xxx-xxx-webapp</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>xxx-xxx-webapp</name> <url>http://maven.apache.org</url> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.5</source> <target>1.5</target> <fork>true</fork> <meminitial>128m</meminitial> <maxmem>512m</maxmem> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <artifactId>maven-eclipse-plugin</artifactId> <version>2.5.1</version> <configuration> <additionalProjectnatures> <projectnature> org.springframework.ide.eclipse.core.springnature </projectnature> </additionalProjectnatures> <additionalBuildcommands> <buildcommand> org.springframework.ide.eclipse.core.springbuilder </buildcommand> </additionalBuildcommands> <downloadSources>false</downloadSources> <downloadJavadocs>false</downloadJavadocs> <wtpversion>1.5</wtpversion> </configuration> </plugin> <!-- 要加上下面的一句,否则执行:mvn package -Dmaven.test.skip=true的时候会报错 --> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> </plugin> </plugins> </build> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>4.0.3.RELEASE</spring.version> </properties> <dependencies> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.2</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.2</version> </dependency> <!-- Test --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency> <dependency> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.3</version> </dependency> <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>1.5.4</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.3.0</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.6</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>net.sf.ezmorph</groupId> <artifactId>ezmorph</artifactId> <version>1.0.6</version> </dependency> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.3</version> <classifier>jdk15</classifier> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.7</version> </dependency> <dependency> <groupId>org.jasig.cas.client</groupId> <artifactId>cas-client-core</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>org.jasig.cas.client</groupId> <artifactId>ucap-cas-client</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>transaction</artifactId> <version>3.1.1</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>web.servlet</artifactId> <version>3.1.1</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> <!--CMS引用json --> <dependency> <groupId>org.json</groupId> <artifactId>org.json</artifactId> <version>chargebee-1.0</version> </dependency> <!-- json --> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-lgpl</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-lgpl</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20140107</version> </dependency> <dependency> <groupId>com.ucap.webservice</groupId> <artifactId>uservices-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.mybatis.caches</groupId> <artifactId>mybatis-ehcache</artifactId> <version>1.0.2</version> </dependency> <!-- 提交兼容MySQL的依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!-- 阿里巴巴的druid数据源配置 --> <!-- 整合redis所需的jar包 --> </dependencies> </project> |
其中xxx-api工程的pom文件如下:
工程结构:
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <!—和第一个pom文件中的pom.xml相同--> <groupId>xxx.xxx.xxx</groupId> <!—和第一个pom文件中的pom.xml相同à <artifactId>xxx</artifactId> <version>1.0-SNAPSHOT</version> </parent> <groupId>xxx.xxx.xxx</groupId> <artifactId>xxx-xxx-api</artifactId> <packaging>jar</packaging> <name>App tpl Api</name> <version>1.0-SNAPSHOT</version> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.5</source> <target>1.5</target> <fork>true</fork> <meminitial>128m</meminitial> <maxmem>512m</maxmem> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <artifactId>maven-eclipse-plugin</artifactId> <version>2.5.1</version> <configuration> <additionalProjectnatures> <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> </additionalProjectnatures> <additionalBuildcommands> <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> </additionalBuildcommands> <downloadSources>false</downloadSources> <downloadJavadocs>false</downloadJavadocs> <wtpversion>1.5</wtpversion> </configuration> </plugin> </plugins> </build> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!—这里放置的是工程中的jar依赖--> </dependencies> </project> |
其中xxx-xxx.impl工程中的pom文件如下:
工程结构如下:
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>xxx.xxx.xxx</groupId> <artifactId>xxx</artifactId> <version>1.0-SNAPSHOT</version> </parent> <groupId>xxx.xxx.xxx</groupId> <artifactId>xxx-xxx-xxx</artifactId> <packaging>jar</packaging> <name>App tpl Api</name> <version>1.0-SNAPSHOT</version> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.5</source> <target>1.5</target> <fork>true</fork> <meminitial>128m</meminitial> <maxmem>512m</maxmem> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <artifactId>maven-eclipse-plugin</artifactId> <version>2.5.1</version> <configuration> <additionalProjectnatures> <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> </additionalProjectnatures> <additionalBuildcommands> <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> </additionalBuildcommands> <downloadSources>false</downloadSources> <downloadJavadocs>false</downloadJavadocs> <wtpversion>1.5</wtpversion> </configuration> </plugin> <!-- 要加上下面的一句,否则执行:mvn package -Dmaven.test.skip=true的时候会报错 --> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> </plugin> </plugins> </build> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>4.0.3.RELEASE</spring.version> </properties> <dependencies> <!-- Spring,使用下面的方式之后能够使用 @RunWith(SpringJUnit4ClassRunner.class) 的方式编写单元测试了 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.2</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.2</version> </dependency> <!-- Test --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency> <dependency> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.3</version> </dependency> <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>1.5.4</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.3.0</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.6</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>net.sf.ezmorph</groupId> <artifactId>ezmorph</artifactId> <version>1.0.6</version> </dependency> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.3.1</version> </dependency> <dependency> <groupId>org.apache</groupId> <artifactId>httpmime</artifactId> <version>4.3</version> </dependency> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.3</version> <classifier>jdk15</classifier> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.7</version> </dependency> <dependency> <groupId>com.ucap.utils</groupId> <artifactId>utils</artifactId> <version>1.4-SNAPSHOT</version> </dependency> <dependency> <groupId>com.ucap.base</groupId> <artifactId>base</artifactId> <version>1.6-SNAPSHOT</version> </dependency> <dependency> <groupId>com.ucap.wcm</groupId> <artifactId>website-api</artifactId> <version>1.6-SNAPSHOT</version> </dependency> <dependency> <groupId>xxx.xxx.xxx</groupId> <artifactId>app-tpl-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.jasig.cas.client</groupId> <artifactId>cas-client-core</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>org.jasig.cas.client</groupId> <artifactId>ucap-cas-client</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>transaction</artifactId> <version>3.1.1</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>web.servlet</artifactId> <version>3.1.1</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>com.ucap.rpc</groupId> <artifactId>rpc</artifactId> <version>1.1-SNAPSHOT</version> </dependency> </dependencies> </project> |
3.在web.xml中配置使用的Spring配置的文件,代码如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>spring_Modle</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.properties</param-value> </context-param> <filter> <servlet> <!-- druid --> <session-config> <welcome-file-list> |
4、接着配置spring的applicationContext.xml,配置如下:
依赖的文件是:jdbc.properties、mybatis.xml、context-dispatcher.xml
jdbc.properties的配置如下:
##配置数据库类型,参数可以填写成mysql,oracle,默认是oracle的数据库 dbType=oracle #如果是mysql的配置成 #dbType=mysql ##Oracle对应的数据库相关配置 oracleDriver=oracle.jdbc.driver.OracleDriver oracleUrl=jdbc:oracle:thin:@localhost:1521:orcl oracleUsername=cmspro oraclePassword=cmspro ##针对MySQL版本的时候进行如下配置 mysqlDriver=com.mysql.jdbc.Driver mysqlUrl=jdbc\:mysql\://localhost\:3306/test mysqlUsername=root mysqlPassword= |
mybatis.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="lazyLoadingEnabled" value="true" /> <!--积极加载设置成false --> <setting name="aggressiveLazyLoading" value="false" /> <!--开启二级缓存,缓存中只要是需要配置的针对的都是二级缓存 --> <setting name="cacheEnabled" value="true" /> </settings> <typeAliases> <typeAlias type="xxx.xxx.xxx.entity.Component" alias="component" /> <typeAlias type="xxx.xxx.xxx.entity.Layout" alias="layout" /> <typeAlias type="xxx.xxx.xxx.entity.Master" alias="master" /> <typeAlias type="xxx.xxx.xxx.entity.MasterType" alias="masterType" /> <typeAlias type="xxx.xxx.xxx.entity.Special" alias="special" /> <typeAlias type="xxx.xxx.xxx.entity.SpecialShare" alias="specialShare" /> <typeAlias type="xxx.xxx.xxx.entity.SpecialVersion" alias="specialVersion" /> <typeAlias type="xxx.xxx.xxx.entity.Style" alias="style" /> <typeAlias type="xxx.xxx.xxx.entity.Block" alias="block" /> <typeAlias type="xxx.xxx.xxx.entity.InnerStyle" alias="innerStyle" /> <typeAlias type="xxx.xxx.xxx.entity.RoleFunction" alias="roleFunction" /> <typeAlias type="xxx.xxx.xxx.entity.SpecialSharedInfo" alias="specialSharedInfo" /> </typeAliases> <plugins> <plugin interceptor="xxx.xxx.xxx.interceptor.PageInterceptor"></plugin> </plugins> <!-- 下面的Mapper文件在app-tpl-impl中定义 --> <!-- <mappers> <mapper resource="sqlmaps/ComponentMapper.xml" /> <mapper resource="sqlmaps/LayoutMapper.xml" /> <mapper resource="sqlmaps/MasterMapper.xml" /> <mapper resource="sqlmaps/MasterTypeMapper.xml" /> <mapper resource="sqlmaps/SpecialMapper.xml" /> <mapper resource="sqlmaps/SpecialShareMapper.xml" /> <mapper resource="sqlmaps/SpecialVersionMapper.xml" /> <mapper resource="sqlmaps/StyleMapper.xml" /> <mapper resource="sqlmaps/BlockMapper.xml" /> <mapper resource="sqlmaps/InnerStyleMapper.xml" /> <mapper resource="sqlmaps/RoleFunctionMapper.xml" /> </mappers> --> </configuration> |
context-dispatcher.xml的配置如下:
<?xml version="1.0" encoding="UTF-8"?> <beans default-lazy-init="true" xmlns="http://www.springframework.org/schema/beans" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 使用注解的包,包括子集 --> <context:component-scan base-package="xxx.xxx.xxx" /> <!-- 通过注解,把URL映射到Controller上,该标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter --> <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8" /> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/pages/" /> <property name="suffix" value=".jsp"></property> </bean> <bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" /> <!--<bean id="multipartResolver" class="xxx.xxx.xxx.resolver.MyCommonsMultipartResolver"> <property name="maxUploadSize" value="20480000"/>1024*20即20k <property name="resolveLazily" value="true"/>resolveLazily属性启用是为了推迟文件解析,以便在UploadAction 中捕获文件大小异常 <property name="defaultEncoding" value="UTF-8"/> </bean> --> <!-- 拦截器 --> <mvc:interceptors> <bean class="xxx.xxx.xxx.interceptor.LoginInterceptor"> <property name="redirectUrl" value="http://127.0.0.1:8888/cas/logout?service=http://127.0.0.1:8888/website-webapp/" /> </bean> </mvc:interceptors> <!-- 总错误处理 --> <!-- <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="defaultErrorView"> <value>/error/error</value> </property> <property name="defaultStatusCode"> <value>500</value> </property> <property name="warnLogCategory"> <value>org.springframework.web.servlet.handler.SimpleMappingExceptionResolver</value> </property> </bean> --> <!-- 对静态资源文件的访问 --> <mvc:resources mapping="/images/**" location="/images/" cache-period="31556926" /> <mvc:resources mapping="/img/**" location="/img/" cache-period="31556926" /> <mvc:resources mapping="/scripts/**" location="/scripts/" cache-period="31556926" /> <mvc:resources mapping="/styles/**" location="/styles/" cache-period="31556926" /> </beans> |
applicationContext.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" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <!-- 缓存配置 <ehcache:annotation-driven cache-manager="cacheManager" /> <bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> <property name="configLocation" value="classpath:ehcache.xml"/> </bean> <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"> <property name="cacheManager" ref="cacheManagerFactory" /> </bean> --> <!-- 打开注解 --> <context:annotation-config /> <!-- 打开自动扫描 --> <context:component-scan base-package="xxx.xxx.xxx" /> <!-- 定时器驱动 --> <!-- 引入jdbc配置文件 --> <!-- <!-- 数据源 org.apache.commons.dbcp.BasicDataSource com.alibaba.druid.pool.DruidDataSource --> <!--创建jdbc数据源 --> <!-- 配置druid监控spring jdbc --> <!-- 注意下面的com.ucap.tpl.mapper.base.impl.DataSources是自己定义的数据源--> <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --> <!-- 创建SqlSessionFactory,同时指定数据源 --> <import resource="redis-context.xml"/> |
5、基于以上applicationContext.xml,我们知道,若想兼容不同的数据库、需要以下类:
注意:上图的sqlmaps下的目录名称和jdbc.properties中的数据库名称相同
其中:DataSourceInstances.java的代码如下:
package xxx.xxx.xxx.mapper.base.impl; /** * DataSourceInstances.java * @attention 定义数据源,和applicationContext.xml中的DataSources的targetDataSources的key对应 * @author toto * @date 2016-9-11 * @note begin modify by 涂作权 2016-9-11 原始创建 */ public class DataSourceInstances { public static final String MYSQL = "MYSQL"; public static final String ORACLE = "ORACLE"; } |
DataSourceSwitch.java的代码如下:
package xxx.xxx.xxx.mapper.base.impl; /** * DataSourceSwitch.java 用于切换数据库类型 * @attention * @author toto * @date 2016-9-11 * @note begin modify by 涂作权 2016-9-11 原始创建 */ @SuppressWarnings({"unchecked"}) public class DataSourceSwitch { private static final ThreadLocal contextHolder = new ThreadLocal(); public static void setDataSourceType(String dataSourceType) { contextHolder.set(dataSourceType); } public static String getDataSourceType() { return (String)contextHolder.get(); } public static void clearDataSourceType() { contextHolder.remove(); } } |
DataSources.java的代码结构如下:
package xxx.xxx.xxx.mapper.base.impl; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; /** * DataSources.java 类或者接口的简要说明 * @attention <p>配置于applicationContext中,线程局部变量ThreadLocal contextHolder保存当前需要的数据类型</p> * <p>当DataSourceSwitch.setDataSourceType(DataSourceInstances.xxxx),保存当前需要的数据源类型的,</p> * <p>DataSources会从当前线程中查找线程变量的数据类型,从而决定使用何种类型的数据员</p> * * @author toto * @date 2016-9-11 * @note begin modify by 涂作权 2016-9-11 原始创建 */ public class DataSources extends AbstractRoutingDataSource { //private static final Logger logger = Logger.getLogger(DataSources.class); public String dbType; //@Override protected Object determineCurrentLookupKey() { if (dbType.equalsIgnoreCase(DataSourceInstances.MYSQL)) { DataSourceSwitch.setDataSourceType(DataSourceInstances.MYSQL); } else if(dbType.equalsIgnoreCase(DataSourceInstances.ORACLE)) { DataSourceSwitch.setDataSourceType(DataSourceInstances.ORACLE); } else { DataSourceSwitch.setDataSourceType(DataSourceInstances.ORACLE); } return DataSourceSwitch.getDataSourceType(); } public String getDbType() { return dbType; } public void setDbType(String dbType) { this.dbType = dbType; } } |
6、其它常用工具:
公共的mapper类
package xxx.xxx.xxx.mapper.base.impl; import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.log4j.Logger; import org.mybatis.spring.support.SqlSessionDaoSupport; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import xxx.xxx.xxx.mapper.base.BaseMapper; import com.ucap.utils.UUIDGenerator; @SuppressWarnings("unchecked") public class BaseMapperImpl<T, PK extends Serializable> extends SqlSessionDaoSupport implements BaseMapper<T, PK> { public static Logger logger = Logger.getLogger(BaseMapperImpl.class); private Class<T> entityClass = null; /** * 创建默认构造方法,以取得真正的泛型类型 */ public BaseMapperImpl() { Class<?> c = getClass(); Type type = c.getGenericSuperclass(); if (type instanceof ParameterizedType) { Type[] parameterizedType = ((ParameterizedType) type).getActualTypeArguments(); entityClass = (Class<T>) parameterizedType[0]; } } @Resource(name = "sqlSessionFactory") public void setSuperSqlSessionFactory(SqlSessionFactory sqlSessionFactory) { super.setSqlSessionFactory(sqlSessionFactory); } // 保存实体对象 @CacheEvict(value = "ehcache", allEntries = true) public T insert(T entity) { try { Field[] fileds = entity.getClass().getDeclaredFields(); for (Field field : fileds) { if (field.getName().equals("id")) { Method setIdMethod = entity.getClass().getDeclaredMethod( "setId", String.class); setIdMethod.invoke(entity, UUIDGenerator.generate()); } } } catch (Exception e) { e.printStackTrace(); } getSqlSession().insert(entity.getClass().getName() + "Mapper.insert",entity); return entity; } // 更新 @CacheEvict(value = "ehcache", allEntries = true) public void update(T entity) { getSqlSession().update(entity.getClass().getName() + "Mapper.update",entity); } // 根据id删除某个对象 @CacheEvict(value = "ehcache", allEntries = true) public void deleteById(PK id) { getSqlSession().delete(entityClass.getName() + "Mapper.deleteById", id); } //根据id,逻辑上删除某个对象(更行状态值) public void deleteByUpdateState(PK id) { getSqlSession().delete(entityClass.getName() + "Mapper.deleteByUpdateState", id); } // 根据id加载某个对象 @Cacheable(value = "ehcache", key = "#id") public T fetch(PK id) { return (T)getSqlSession().selectOne(entityClass.getName() + "Mapper.fetch", id); } // 查找所有的对象 public List<T> findAll() { return (List<T>)getSqlSession().selectList(entityClass.getName() + "Mapper.findAll", null); } //设置是否共享,如果SHARESTATE = 1 表示的是共享,SHARESTATE = 0:表示专享 public void updateShareState(T entity) { getSqlSession().update(entityClass.getName() + "Mapper.updateShareState", entity); } /** * 查询所有对象:分页查询 * @param paramMap * @return 返回某1页的数据 * @attention 方法的使用注意事项 【必带参数:page】 * @author YangWeiQiang * @date 2015-11-12 */ public List<T> findAllByPage(Map paramMap) { return (List<T>)getSqlSession().selectList(entityClass.getName() + "Mapper.queryListByPage", paramMap); } // 根据查询参数,当前页数,每页显示的数目得到分页列表 /* @Cacheable(value = "ehcache", key = "'queryPage-'+#condition+'-'+#currentPage+'-'+#pageSize") public Pager<T> queryPage(Map<String, Object> condition, Integer currentPage, Integer pageSize) { Pager<T> pager = new Pager<T>(pageSize, count(condition), currentPage); try { if (condition == null) { condition = new HashMap<String, Object>(); } condition.put("beginRow", (pager.getCurrentPage() - 1) * pager.getPageSize()); condition.put("pageSize", pager.getPageSize()); List<T> dataList = this.getSqlSession().selectList( entityClass.getName() + "Mapper.queryList", condition); pager.setDataList(dataList); return pager; } catch (RuntimeException re) { logger.error("findList " + entityClass.getName() + "failed :{}", re); re.printStackTrace(); } return null; }*/ /** * 通过条件查询 */ public int count(Map<String, Object> condition) { int count = (Integer)getSqlSession().selectOne(entityClass.getName() + "Mapper.count", condition); return count; } @Cacheable(value = "ehcache", key = "'queryList-'+#condition+'-orderBy-'+#orderBy+'-sortBy-'+#sortBy") public List<T> queryList(Map<String, Object> condition, String orderBy, String sortBy) { if (condition == null) { condition = new HashMap<String, Object>(); condition.put("orderBy", orderBy); condition.put("sortBy", sortBy); } return (List<T>)getSqlSession().selectList( entityClass.getName() + "Mapper.queryList", condition); } /** * 通过条件查询一条 */ @Cacheable(value = "ehcache", key = "'queryOne-'+#condition") public T queryOne(Map<String, Object> condition) { return (T)getSqlSession().selectOne( entityClass.getName() + "Mapper.queryOne", condition); } /** * 更新或保存 */ @CacheEvict(value = "ehcache", allEntries = true) public T updateOrSave(T t, PK id) { if (null != fetch(id)) { update(t); } else { return insert(t); } return t; } @Cacheable(value = "ehcache", key = "'findOne-'+#property+'-'+#value") public T findOne(String property, Object value) { Map<String, Object> condition = new HashMap<String, Object>(); condition.put(property, value); return (T)getSqlSession().selectOne( entityClass.getName() + "Mapper.findOne", condition); } @Cacheable(value = "ehcache", key = "'findList-'+#property+'-'+#value") public List<T> findList(String property, Object value) { Map<String, Object> condition = new HashMap<String, Object>(); condition.put(property, value); return getSqlSession().selectList( entityClass.getName() + "Mapper.findList", condition); } public Class<T> getEntityClass() { return entityClass; } public Integer selectMaxId() { return getSqlSession().selectOne( entityClass.getName() + "Mapper.selectMaxId"); } @CacheEvict(value = "ehcache", allEntries = true) public void deleteByCondition(Map<String, Object> condition) { getSqlSession().delete( entityClass.getName() + "Mapper.deleteByCondition", condition); } @CacheEvict(value = "ehcache", allEntries = true) public void deleteByProperty(String property, Object value) { Map<String, Object> condition = new HashMap<String, Object>(); condition.put(property, value); deleteByCondition(condition); } @CacheEvict(value = "ehcache", allEntries = true) public void updateNull(T entity) { getSqlSession().update(entityClass.getName() + "Mapper.updateNull",entity); } @Cacheable(value = "ehcache", key = "'selectOne-'+#mapperId+'-'+#obj") public T selectOne(String mapperId, Object obj) { return (T)getSqlSession().selectOne( entityClass.getName() + "Mapper." + mapperId, obj); } @Cacheable(value = "ehcache", key = "'selectList-'+#mapperId+'-'+#obj") public List<T> selectList(String mapperId, Object obj) { return getSqlSession().selectList( entityClass.getName() + "Mapper." + mapperId, obj); } @CacheEvict(value = "ehcache", allEntries = true) public List<T> insertList(List<T> entities) { return getSqlSession().selectList( entityClass.getName() + "Mapper.insertList", entities); } /* public DetailsPager<T> queryDetailsPage(Map<String, Object> condition, PK id) { T currentObj = fetch(id); if (currentObj != null) { List<PK> ids = getSqlSession().selectList( entityClass.getName() + "Mapper.findIds", condition); int currentObjIndex = ids.indexOf(id); DetailsPager<T> page = new DetailsPager<T>(currentObj); if (currentObjIndex > 0) page.setPreObj(fetch(ids.get(currentObjIndex - 1))); if (currentObjIndex < ids.size() - 1) page.setNextObj(fetch(ids.get(currentObjIndex + 1))); return page; } return null; }*/ public List<T> like(String property, Object value) { Map<String, Object> condition = new HashMap<String, Object>(); condition.put(property, value); return getSqlSession().selectList( entityClass.getName() + "Mapper.like", condition); } } |
在xxx-xxx-webapp中的单元测试写法:
package xxx.xxx.xxx; import javax.annotation.Resource; import org.apache.log4j.Logger; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import xxx.xxx.xxx.entity.Component; import xxx.xxx.xxx.service.component.ComponentService; /** * ComponentTestCase.java 单元测试案例 * @attention * @author toto * @date 2016-8-24 * @note begin modify by 涂作权 2016-8-24 原始创建 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:context-dispatcher.xml", "classpath:applicationContext.xml"}) public class ComponentTestCase { private static final Logger logger = Logger.getLogger(ComponentTestCase.class); @Resource(name = "componentService") private ComponentService componentService; @Test public void testHello() { Component component = componentService.findComponent("98a77fe0a737400b80c354b216773119"); logger.info("-----------------------"); logger.info(component.getComponentName()); logger.info("-----------------------"); } } |
httpClient调用http请求。其中接口是一个action,直接返回的是json数据。
String url = ExtendedServerConfig.getInstance().getStringProperty("MANUSCRIPTS_APPENDIXS_URL"); String result = ""; HttpPost httpRequest = new HttpPost(url); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("params", params)); httpRequest.setEntity(new UrlEncodedFormEntity(nameValuePairs,HTTP. HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest); //释放post请求 //httpRequest.abort(); if (httpResponse.getStatusLine().getStatusCode() == 200) { HttpEntity httpEntity = httpResponse.getEntity(); result = EntityUtils.toString(httpEntity); } |
maven常用命令:
mvn -Pall eclipse:eclipse
mvn clean
mvn compile -Dmaven.test.skip=true
mvn install -Dmaven.test.skip=true
mvn package -Dmaven.test.skip=true
SpringMVC,MyBatis项目中兼容Oracle和MySql的解决方案及其项目环境搭建配置、web项目中的单元测试写法、HttpClient调用post请求等案例相关推荐
- java web项目_[适合初中级Java程序员修炼手册从0搭建整个Web项目](二)
前言 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206种一棵树最好的时间是十年前,其次是现在 six-finger-web 一个Web后端 ...
- Spring+SpringMVC+Mybatis实现增删改查--(五)SSM修改员工页面搭建
Spring+SpringMVC+Mybatis实现增删改查--(五)SSM修改员工页面搭建 修改员工: 1.在index.jsp页面点击"编辑"弹出编辑对话框 2.去数据库查询部 ...
- 谷粒商城项目篇1_分布式基础篇_分布式基础概念、环境搭建、创建项目
写在前面 为丰富项目经验,特此学习B站开源视频<全网最强电商教程<谷粒商城>对标阿里P6/P7,40-60万年薪>希望通过此学习能巩固所学,将技术栈串接起来. 此项目三个阶段 ...
- 【Spring Boot】使用Spring Boot来搭建Java web项目以及开发过程
[Spring Boot]使用Spring Boot来搭建Java web项目以及开发过程 一.Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来 ...
- 腾讯云轻量应用服务器 CentOS7.6 +Tomcat/apache 搭建个人web项目,并允许外网通过80或8080端口访问【超详细】
目录 1. 腾讯云购买学生轻量应用服务器 2. 为服务器用户设置密码允许远程登录 3. 本地下载Xshell和Xftp远程管理更方便 4. 域名认证和域名解析 5. 服务器安装JDK和Tomcat 6 ...
- Gin+Gorm+sessions 搭建 golang web项目
Gin是用Go(Golang)编写的HTTP web框架.它具有类似Martini的API,但性能比Martini快40倍 Gorm,Golang 出色的ORM库 sessions,具有多后端支持的用 ...
- MyEclipse搭建java Web项目开发环境
MyEclipse搭建java Web项目开发环境 首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭 ...
- java web开发myeclipse_【java项目实战】一步步教你使用MyEclipse搭建java Web项目开发环境(一)...
首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭建. 1.安装工具 第一步,下载并安装JDK,到官网 ...
- Spring Boot + JPA +MySQL 数据操作及示例环境搭建(自动建表)
JPA 是Java官方提供的数据持久的统一API , 是一个接口标准,并没有具体实现. JPA的实现常见的有: Hibernate TopLink (Eclipse Link) Spring Boot ...
最新文章
- python跟java-还在纠结选Python还是Java?看完就有数了
- MVC与三层架构的区别
- SSL 的 java 实现
- Centos挂载硬盘
- linux查看nginx、apache、php、php-fpm、mysql及配置项所在目录
- Bishops Alliance—— 最大上升子序列
- Linux设备驱动模型2——总线式设备驱动组织方式
- input file获取文件路径_python 基础 — 整理文件
- python下载url链接_使用Python从url地址下载所有pdf文件
- Codeforces Round #468 (Div. 2, based on Technocup 2018 Final Round)
- 算法笔记_面试题_13.二叉树的最近公共祖先
- app前后台交互php_PHP分布式架构RPC介绍以及手写RPC框架
- 【SCI文献下载】手把手教你如何免费下载SCI文献
- Hibernate JPA 效率低下的原因
- 双三次插值算法(bicubic interpolation)与图形学和计算方法的关系
- Laravel文档梳理10、请求生命的周期
- 一天狂点3.7万个赞! 男子因“点赞过多”被大众点评网处罚 法庭上吵翻
- Excel:一个Excel自动计算公式,一个Excel手动计算?多进程
- cesium实用功能-选中gltf、glb拖动修改位置,bim没试
- js监听手机返回按键操作,禁用返回按键操作。
热门文章
- 前端基础之JavaScript_2
- django中的项目使用mysql中的配置新建用户授予权限
- 2.Hadoop的学习(Ubuntu的目录及权限)
- 组合数据类型{集合,序列【字符串,元组,列表】,字典}
- jdk1.8 源码分析导图
- VTK:ShareCamera分享相机用法实战
- boost::mpi模块实现测试mpi版本
- boost::hana::all用法的测试程序
- boost::exception的用法测试
- ITK:在图像上叠加标签图