maven+springmvc+spring data jpa


1、 maven創建web項目

mvn archetype:create -DgroupId=com.mycompany.webapp -DartifactId=myweb -DarchetypeArtifactId=maven-archetype-webapp

maven創建多模塊工程
mvn archetype:generate ^
-DarchetypeArtifactId=appdot-archetypes-archetype ^
-DarchetypeGroupId=org.appdot.archetypes ^
-DarchetypeVersion=2.0.0-RC2 ^
-DarchetypeRepository=http://repo.appdot.org/nexus/content/groups/public/ ^
-DarchetypeRepositoryId=appdot-repo -DdefaultEncoding=UTF-8

2、使用jetty發佈,修改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>com.mycompany.webapp</groupId>
  <artifactId>myweb</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>myweb Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>myweb</finalName>
    <plugins>
    	<!-- jetty插件 -->
	    <plugin>
		    <groupId>org.mortbay.jetty</groupId>
		    <artifactId>maven-jetty-plugin</artifactId>
	    </plugin>
    </plugins>
  </build>
</project>

3、添加其他資源文件目錄結構

src/test/java
src/test/resources
src/main/java
src/main/webapp

4、集成springmvc 

(1)    修改pom.xml,增加springspringmvc的依賴包

<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>com.mycompany.webapp</groupId>
  <artifactId>myweb</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>myweb Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
  <!-- 統一配置jar包version -->
	<spring.version>3.2.5.RELEASE</spring.version>
  </properties>
	
  
  
  
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    
   	<!-- spring3 start -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</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-jdbc</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-web</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-expression</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>
	<!-- spring3 end -->
	
	<!-- start spring mvc --> 
       <dependency>  
           <groupId>org.springframework</groupId>  
           <artifactId>spring-webmvc</artifactId>  
           <version>${spring.version}</version>  
       </dependency> 
       <!-- end spring mvc -->  
        
  </dependencies>
  
  
  <build>
    <finalName>myweb</finalName>
    <plugins>
    	<!-- jetty插件 -->
	    <plugin>
		    <groupId>org.mortbay.jetty</groupId>
		    <artifactId>maven-jetty-plugin</artifactId>
	    </plugin>
    </plugins>
  </build>
</project>

2web.xml中增加Spring-MVC的請求轉發器

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  
   <!-- Spring-MVC的請求轉發器 -->
  <servlet>
	  <servlet-name>spring-mvc</servlet-name>
	  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	  <init-param>
		  <param-name>contextConfigLocation</param-name>
		  <param-value>classpath:springmvc-servlet.xml</param-value>
	  </init-param>
	  <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  <servlet-name>spring-mvc</servlet-name>
  <url-pattern>/</url-pattern>
  </servlet-mapping>
  
</web-app>

3)在scr/main/resources中添加springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc
	   http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
	   http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<!--  
	當映射爲@RequestMapping("/user/add")時:
	1、攔截*.do,例如:/user/add.do,弊端:所有的url都要以.do結尾。不會影響訪問靜態文件。
	2、攔截/app/*,例如:/app/user/add,弊端:請求的url都要包含/app,@RequestMapping("/user/add")中不須要包含/app。
	3、攔截/,例如:/user/add,弊端:對jpg,js,css靜態文件的訪問也被攔截不能正常顯示。後面有解決辦法。
	4、攔截/*,可以走到Action中,但轉發到jsp時再次被攔截,不能訪問到jsp。
-->

	<!-- 掃描web包,應用Spring的註解 -->
	<context:component-scan base-package="com.web.test.controller"/>
	
	<!-- 會自動註冊DefaultAnnotationHandlerMapping與AnnotationMethodHandlerAdapter 兩個bean,
	是spring MVC爲@Controllers分發請求所必須的。 -->
    <mvc:annotation-driven /> 

   
	<!-- 配置視圖解析器,將ModelAndView及字符串解析爲具體的頁面 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver"
		p:viewClass="org.springframework.web.servlet.view.JstlView" 
		p:prefix="/WEB-INF/jsp/"
		p:suffix=".jsp" />

     <!-- 對靜態資源文件的訪問  方案一 (二選一)  
    <mvc:default-servlet-handler/>  
     -->
       
    <!-- 對靜態資源文件的訪問  方案二 (二選一) -->
	<mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"/>  
	<mvc:resources mapping="/js/**" location="/js/" cache-period="31556926"/>  
	<mvc:resources mapping="/css/**" location="/css/" cache-period="31556926"/>   
     
</beans>

4TestController

package com.web.test.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


/**
 * 
 * @author xuzebin
 *
 */
@Controller
@RequestMapping("/test")
public class TestController {

	@RequestMapping("/show")
	public String show(){
		System.out.println("hello world");

		return "test";
	}

	
}

5、集成spring data jpahibernate

(1)pom.xml中增加對應的依賴包

<!-- spring-data-jpa start -->
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-commons</artifactId>
			<version>1.7.1.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-jpa</artifactId>
			<version>1.5.1.RELEASE</version>
		</dependency>
		<!-- spring-data-jpa end -->
		
		<!-- hibernate4 start -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>${hibernate.version}</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>${hibernate.version}</version>
		</dependency>
		<!-- hibernate4 start -->
		
		<!-- 數據庫依賴 -->
		<!-- mysql數據庫驅動 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.21</version>
		</dependency>
		<!-- oracle11g數據庫驅動 <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>${oracle.version}</version> 
			</dependency> -->
		<!-- <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> -->
		<dependency>
			<groupId>com.kenai.nbpwr</groupId>
			<artifactId>org-apache-commons-dbcp</artifactId>
			<version>1.2.2-201002241055</version>
		</dependency>
		<!-- 數據庫依賴 -->
		
		<!-- 事務控制所需 aspectjweaver -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.7.0</version>
		</dependency>

2)修改web.xml

 <!-- Spring配置 -->   
  <listener>  
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>   
  </listener> 
  <!-- 指定Spring Bean的配置文件所在目錄。默認配置在WEB-INF目錄下 -->  
  <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

  
  <!-- 編碼過濾器 -->
  <filter>
  	<filter-name>encodingFilter</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>encodingFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping> 


  <!-- 解決spring data jpa 事務懶加載 -->  
  <filter>  
      <filter-name>openEntityManagerInViewFilter</filter-name>  
      <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>  
  </filter>  
  <filter-mapping>  
      <filter-name>openEntityManagerInViewFilter</filter-name>  
      <url-pattern>/*</url-pattern>  
  </filter-mapping> 

3)在src/main/resources中加入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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
		http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
	<!-- 註解組件掃描 -->
	<context:component-scan base-package="com.web.test">
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
	</context:component-scan>

	<aop:aspectj-autoproxy proxy-target-class="true" />

	<!-- 開啓註解事務只對當前配置文件有效 -->
	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

	<jpa:repositories base-package="com.web.test" repository-impl-postfix="Impl"
		entity-manager-factory-ref="entityManagerFactory" transaction-manager-ref="transactionManager"></jpa:repositories>

	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="packagesToScan" value="com.web.test.entity" />
		<property name="persistenceProvider">
			<bean class="org.hibernate.ejb.HibernatePersistence" />
		</property>
		<property name="jpaVendorAdapter">
			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
				<property name="generateDdl" value="false" />
				<property name="database" value="MYSQL" />
				<property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
				<property name="showSql" value="true" />
			</bean>
		</property>
		<property name="jpaDialect">
			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
		</property>
		<property name="jpaPropertyMap">
			<map>
				<entry key="hibernate.query.substitutions" value="true 1, false 0" />
				<entry key="hibernate.default_batch_fetch_size" value="16" />
				<entry key="hibernate.max_fetch_depth" value="2" />
				<entry key="hibernate.generate_statistics" value="true" />
				<entry key="hibernate.bytecode.use_reflection_optimizer" value="true" />
				<entry key="hibernate.cache.use_second_level_cache" value="false" />
				<entry key="hibernate.cache.use_query_cache" value="false" />
				<entry key="hibernate.hbm2ddl.auto" value="update" />
			</map>
		</property>
	</bean>

	<!--事務管理器配置 -->
	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="entityManagerFactory" />
	</bean>
	
	<!-- 數據源 -->
	<bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName">
			<value>org.gjt.mm.mysql.Driver</value>
		</property>
		<property name="url">
			<value>jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8</value>
		</property>
		<property name="username" value="root" />
		<property name="password" value="123456" />
	</bean>

	
	
</beans>

6、目錄結構圖


7、源碼下載

簡例下載


8、補充

pom.xml中還需增加(置於<build>中),不然重新clean   install時目錄src/main/webapp會消失

  	<!-- Filtering test resources files 引用文件資源 -->
	<testResources>
		<testResource>
			<directory>src/test/resources</directory>
			<filtering>true</filtering>
		</testResource>
		<testResource>
			<directory>src/main/webapp</directory>
			<filtering>true</filtering>
			<includes>
				<include>**/*.xml</include>
			</includes>
		</testResource>
	</testResources>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章