要搭建的项目的项目结构如下(使用的框架为: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数据源配置 --> </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> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:context-dispatcher.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> <!-- druid --> <servlet> <servlet-name>DruidStatView</servlet-name> <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DruidStatView</servlet-name> <url-pattern>/druid/*</url-pattern> </servlet-mapping> <session-config> <!-- 设置过期时间为一年,相当于是一年都不过期 --> <session-timeout>525600</session-timeout> </session-config> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
|
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" /> <!-- 定时器驱动 --> <task:annotation-driven/> <!-- 引入jdbc配置文件 --> <context:property-placeholder location="classpath:jdbc.properties,classpath:redis.properties" /> <!-- 以下用于配置多数据源 配置parentDataSource的父bean,再配置多个数据源继承这个bean,对driverClassName、 url、username、password等数据源连接参数进行各自的重写、例如mysqlDataSource、 在DataSource bean中要注入所要切换的数据、并且设置默认的数据源 --> <!--<bean id="parentDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"></bean> 创建MySQL对应的jdbc数据源 <bean id="mysqlDataSource" parent="parentDataSource"> <property name="driverClassName" value="${mysqlDriver}"></property> <property name="url" value="${mysqlUrl}"></property> <property name="username" value="${mysqlUsername}"></property> <property name="password" value="${mysqlPassword}"></property> </bean> --> <!-- 数据源 org.apache.commons.dbcp.BasicDataSource com.alibaba.druid.pool.DruidDataSource --> <bean id="parentDataSource" class="com.alibaba.druid.pool.DruidDataSource"> <!-- 初始化连接大小 --> <property name="initialSize" value="8" /> <!-- 连接池最大使用连接数量 --> <property name="maxActive" value="32" /> <!-- 连接池最小空闲 --> <property name="minIdle" value="4" /> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="60000" /> <!--<property name="validationQuery"><value>SELECT 1</value></property>--> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="testWhileIdle" value="true" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- 配置一个连接池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="25200000" /> <!-- 打开removeAbandoned功能 --> <property name="removeAbandoned" value="true" /> <!-- 1800秒,也就是30分钟 --> <property name="removeAbandonedTimeout" value="1800" /> <!-- 关闭abanded连接时输出错误日志 --> <property name="logAbandoned" value="true" /> <!-- 监控数据库 --> <property name="filters" value="mergeStat" /> </bean> <!-- 创建MySQL对应的jdbc数据源 --> <bean id="mysqlDataSource" parent="parentDataSource"> <property name="driverClassName" value="${mysqlDriver}"></property> <property name="url" value="${mysqlUrl}"></property> <property name="username" value="${mysqlUsername}"></property> <property name="password" value="${mysqlPassword}"></property> </bean> <!--创建jdbc数据源 --> <bean id="oracleDataSource" parent="parentDataSource"> <property name="driverClassName" value="${oracleDriver}" /> <property name="url" value="${oracleUrl}" /> <property name="username" value="${oracleUsername}" /> <property name="password" value="${oraclePassword}" /> </bean> <!-- 配置druid监控spring jdbc --> <bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"> </bean> <!-- 注意下面的com.ucap.tpl.mapper.base.impl.DataSources是自己定义的数据源--> <bean id="dataSource" class="com.ucap.tpl.mapper.base.impl.DataSources"> <property name="dbType" value="${dbType}"></property> <property name="targetDataSources"> <map key-type="java.lang.String"> <!-- 注意下面的key的值要和DataSourceInstances中定义的值相同--> <entry value-ref="mysqlDataSource" key="MYSQL"></entry> <entry value-ref="oracleDataSource" key="ORACLE"></entry> </map> </property> <property name="defaultTargetDataSource" ref="oracleDataSource"></property> </bean> <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 声明式事务 --> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/> <!-- 创建SqlSessionFactory,同时指定数据源 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis.xml"/> <property name="mapperLocations"> <list> <!-- 配置Mapper文件 --> <value>classpath:sqlmaps/${dbType}/*.xml</value> </list> </property> </bean> <import resource="redis-context.xml"/> </beans>
|
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