1. 程式人生 > >maven構建spring mvc專案 + Mybatis整合

maven構建spring mvc專案 + Mybatis整合

一、新建專案

1、File>New>Other>Maven>Maven Project, 點選Next

 


2、選擇專案儲存路徑。然後點選Next。
 


3、選擇專案型別,在Artifact Id中選擇maven-archetype-webapp,然後點選Next。
 


4、Group ID一般寫大專案名稱。Artifact ID是子專案名稱。
例如Spring的web包,Group ID:org.springframework,artifactId:spring-web。
Package是預設給你建一個包,不寫也可以。
填完後,點選Finish。



5、建好後的專案結構如下:


 
6、開啟cmd命令視窗,cd到專案的跟目錄。執行以下語句:
mvn clean eclipse:eclipse

注:
mvn clean     //清理(刪除target目錄下編譯內容)

mvn eclipse:eclipse   //生成Eclipse專案結構

7、選中專案,右擊:New>Other>java>Source Folder,點選Next
 


8、以下Floder Name必須為src/main/java
 


9、現目錄結構如下:
 




二、配置檔案設定(附部分配置說明)
1、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>cn.com.abel</groupId>
	<artifactId>springProject</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>springProject Maven Webapp</name>
	<url>http://maven.apache.org</url>
  
    <properties>
		<slf4j.version>1.6.4</slf4j.version>
		<spring.version>3.1.2.RELEASE</spring.version>
		<jdk.version>1.6</jdk.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	
	<dependencies>
	    <dependency>
		    <groupId>junit</groupId>
		    <artifactId>junit</artifactId>
		    <version>3.8.1</version>
		    <scope>test</scope>
	    </dependency>
	    
	    <!-- spring begin -->
	    <dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<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-context</artifactId>
   			<version>${spring.version}</version>
   		</dependency>
   		<dependency>
   			<groupId>org.springframework</groupId>
   			<artifactId>spring-aop</artifactId>
   			<version>${spring.version}</version>
   		</dependency>
   		<dependency>
   			<groupId>org.springframework</groupId>
   			<artifactId>spring-tx</artifactId>
   			<version>${spring.version}</version>
   		</dependency>
   		
   		<dependency>
   			<groupId>org.aspectj</groupId>
   			<artifactId>aspectjrt</artifactId>
   			<version>1.6.9</version>
   		</dependency>
   		<dependency>
   			<groupId>org.aspectj</groupId>
   			<artifactId>aspectjweaver</artifactId>
   			<version>1.6.9</version>
   		</dependency>
   		<dependency>
   			<groupId>cglib</groupId>
   			<artifactId>cglib-nodep</artifactId>
   			<version>2.2</version>
   		</dependency>
   		<!-- spring end -->
   		
   		<!-- mybatis begin -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.1.1</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.1.1</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<!-- mybatis end -->
		
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.21</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		
		<dependency>
			<groupId>org.freemarker</groupId>
			<artifactId>freemarker</artifactId>
			<version>2.3.19</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.16</version>
		</dependency>
		
	</dependencies>
	
	<build>
		<finalName>springProject</finalName>
		<plugins>
			<!-- jetty外掛 -->
			<plugin>
				<groupId>org.mortbay.jetty</groupId>
				<artifactId>maven-jetty-plugin</artifactId>
				<version>6.1.25</version>
			</plugin>
			
			<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.1</version>
				<configuration>
					<configurationFile>src/main/resources/mybatis-generator.xml</configurationFile>
					<overwrite>true</overwrite>
				</configuration>
			</plugin>
		</plugins>
	</build>
  
</project>

2、web.xl

<?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"
	version="2.5">
  	 <display-name>springProject Application</display-name>
  	 
  	 <!-- 指定上下文配置檔案 -->
  	 <context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
				 classpath:applicationContext.xml
		</param-value>
	</context-param>
	
	<!-- spring監聽器,監聽springMvc環境 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!-- 壓入專案路徑 -->
	<listener>
	   <listener-class>org.springframework.web.util.WebAppRootListener</listener-class>
	</listener>
  
	 <!-- springMvc前置總控制器,在分發其它的控制器前都要經過這個總控制器 -->
	 <servlet>
		<servlet-name>spring</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring-servlet.xml</param-value>
		</init-param>
		<!-- 啟動順序 -->
		<load-on-startup>1</load-on-startup>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>spring</servlet-name>
		<url-pattern>/</url-pattern>
		<!-- 
		<url-pattern>/</url-pattern>  會匹配到/login這樣的路徑型url,不會匹配到模式為*.jsp這樣的字尾型url
		<url-pattern>/*</url-pattern> 會匹配所有url:路徑型的和字尾型的url(包括/login,*.jsp,*.js和*.html等)
		 -->
	</servlet-mapping>
	
</web-app>

3、spring-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:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
						http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
						http://www.springframework.org/schema/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">

	<!-- 
	自動掃描元件,可以寫多個。component-scan 預設掃描的註解型別是 @Component,
	不過,在 @Component語義基礎上細化後的 @Repository、 @Service 和 @Controller 
	也同樣可以獲得 component-scan 的青睞 
	 -->
	<context:component-scan base-package="cn.com.abel.springProject.**"/>
<!--	<context:component-scan base-package="cn.com.abel.springProject.controller" />-->
	
	<!--  
	<mvc:annotation-driven /> 是一種簡寫形式,完全可以手動配置替代這種簡寫形式,會自動註冊
	DefaultAnnotationHandlerMapping與AnnotationMethodHandlerAdapter 兩個bean,
	是spring MVC為@Controllers分發請求所必須的。 
	 -->
	<mvc:annotation-driven />
	
	<!-- 
	配置js,css等靜態檔案直接對映到對應的資料夾,不被DispatcherServlet處理
	若將以下改為:<mvc:default-servlet-handler />則使用預設的Servlet來響應靜態檔案
	 -->
    <mvc:resources mapping="/resources/**" location="/resources/" />
	
	<!-- 
	攔截器,本例中以下使用的方案是:攔截所有url。
	另一種是:攔截匹配的URL,以下例子是當訪問/user/*被BaseInterceptor攔截
	<mvc:interceptors >
	  <mvc:interceptor>
		  <mvc:mapping path="/user/*" />
		  <bean class="cn.com.abel.springProject.interceptors.BaseInterceptor"></bean>
	  </mvc:interceptor>
  </mvc:interceptors>
	 -->
	<mvc:interceptors>
		<bean class="cn.com.abel.springProject.interceptors.BaseInterceptor" />
	</mvc:interceptors>
	
<!--	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />-->
	
	<!-- FreeMarker begin -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"
		lazy-init="false">
		<property name="contentType" value="text/html; charset=UTF-8" />
		<property name="exposeSpringMacroHelpers" value="true" />
		<property name="requestContextAttribute" value="rc" />
		<property name="prefix" value="" />
		<property name="suffix" value=".html" />
	</bean>
	<bean id="freemarkerConfig"
		class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
		<property name="freemarkerVariables">
			<map>
				<entry key="xml_escape" value-ref="fmXmlEscape" />
				<entry key="html_escape" value-ref="fmHtmlEscape" />
			</map>
		</property>
		<property name="templateLoaderPaths">
			<list>
				<value>/WEB-INF/views/</value>
			</list>
		</property>
		<property name="freemarkerSettings">
			<props>
				<prop key="tag_syntax">auto_detect</prop>
				<prop key="template_update_delay">0</prop>
				<prop key="defaultEncoding">UTF-8</prop>
				<prop key="url_escaping_charset">UTF-8</prop>
				<prop key="locale">zh_CN</prop>
				<prop key="boolean_format">true,false</prop>
				<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
				<prop key="date_format">yyyy-MM-dd</prop>
				<prop key="time_format">HH:mm:ss</prop>
				<prop key="number_format">0.##</prop>
				<prop key="whitespace_stripping">true</prop>
				<prop key="classic_compatible">true</prop>
			</props>
		</property>
		<property name="defaultEncoding" value="utf-8" />
	</bean>
	
	<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" />
	<bean id="fmHtmlEscape" class="freemarker.template.utility.HtmlEscape" />
	<!-- FreeMarker end -->

</beans>	

4、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:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-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/jdbc
 	http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
 	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
	
	
    <!-- 載入資料來源配置檔案 -->
    <bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <!-- 標準配置 -->
                <value>classpath:/jdbc.properties</value>
            </list>
        </property>
    </bean>
	
	<!-- 配置資料來源 -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${ad.jdbc.driverClassName}" />
		<property name="url" value="${ad.jdbc.url}" />
		<property name="username" value="${ad.jdbc.username}" />
		<property name="password" value="${ad.jdbc.password}" />
	</bean>
	
	<!-- 配置事務管理器 -->  
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<!-- configLocation:用於指定Mybatis的配置檔案位置 -->
		<property name="configLocation" value="classpath:mybatis-config.xml" />
	</bean>
	
<!--	<context:component-scan base-package="cn.com.abel.springProject.**"/>-->
    
    <!-- 
         註冊 
    AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、
	PersistenceAnnotationBeanPostProcessor、RequiredAnnotationBeanPostProcessor
	四個bean容器
     -->
    <context:annotation-config />
	
	
    <tx:annotation-driven />
	
	<!-- 
	自動掃描和註冊Mapper介面
	basePackage是用來指定Mapper介面檔案所在的基包,
	在這個基包或其所有子包下面的Mapper介面都將被搜尋到。
	多個基包之間可以使用逗號或者分號進行分隔
	 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="
		  cn.com.abel.springProject.mapper,
		  cn.com.abel.springProject.dao
		" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
	</bean>

</beans>


5、mybatis-generator.xml (MyBatis自動生成對映檔案:model、dao)

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE generatorConfiguration  
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"  
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
	<!-- classPathEntry:資料庫的JDBC驅動,換成你自己的驅動位置 -->  
	<classPathEntry location="E:/m2/repository/mysql/mysql-connector-java/5.1.13/mysql-connector-java-5.1.13.jar" />

	<context id="generatorTables" targetRuntime="MyBatis3">

		<plugin type="org.mybatis.generator.plugins.MapperConfigPlugin">
		<property name="fileName" value="mybatis-config.xml"/>
		<property name="targetPackage" value="/"/>
		<property name="targetProject" value="src/main/resources"/>
		</plugin>
		
		<!-- 此處是將Example改名為Criteria 當然 想改成什麼都行 -->
		<plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">
		<property name="searchString" value="Example"/>
		<property name="replaceString" value="Criteria"/>
		</plugin>

		<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>

		<!-- commentGenerator 去除自動生成的註釋  -->
		<commentGenerator>
		<property name="suppressDate" value="true" />
		</commentGenerator>

		<!-- jdbcConnection是指定的jdbc的連線資訊; -->
		<jdbcConnection driverClass="com.mysql.jdbc.Driver"
		connectionURL="jdbc:mysql://localhost/can_mall" userId="root"
		password="123">
		</jdbcConnection>

		<!-- 
		預設false,把JDBC DECIMAL 和 NUMERIC 型別解析為 Integer true,
		把JDBC DECIMAL 和 NUMERIC 型別解析為java.math.BigDecimal 
		-->
		<javaTypeResolver>
		<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!-- javaModelGenerator是模型的生成資訊,這裡將指定這些Java model類的生成路徑; -->
		<javaModelGenerator targetPackage="cn.com.abel.springProject.model"
		targetProject="src/main/java">
		<property name="enableSubPackages" value="true" />
		<property name="trimStrings" value="true" />
		</javaModelGenerator>

		<!-- sqlMapGenerator是mybatis 的sqlMapper XML檔案的生成資訊,包括生成路徑等; -->
		<sqlMapGenerator targetPackage="cn.com.abel.springProject.dao"
		targetProject="src/main/resources">
		<property name="enableSubPackages" value="true" />
		</sqlMapGenerator>

		<!-- javaClientGenerator是應用介面的生成資訊; -->
		<javaClientGenerator type="XMLMAPPER"
		targetPackage="cn.com.abel.springProject.dao" targetProject="src/main/java">
		<property name="enableSubPackages" value="true" />
		</javaClientGenerator>


		<!-- table是使用者指定的被生成相關資訊的表,它必須在指定的jdbc連線中已經被建立。 -->
		<table tableName="testTabel" domainObjectName="TestModel" >
			<!-- 返回新增記錄ID值 -->
			<generatedKey column="ID" sqlStatement="MySql" identity="true"/>
			<columnOverride column="IS_NEW" javaType="Boolean"/>
		</table>

	</context>
</generatorConfiguration>  

6、IndexController.java
package cn.com.abel.springProject.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

import cn.com.abel.springProject.dao.TestModelMapper;
import cn.com.abel.springProject.model.TestModel;

/**
TestModelMapper與TestModel為Mybatis自動生成的dao和model
*/
@Controller
@RequestMapping("")
public class IndexController {
	
	@Autowired
	private TestModelMapper testDao;
	
	@RequestMapping
	public String index(ModelMap model) {
		
		//從testTable中查詢ID為1的記錄
		TestModel testModel = testDao.selectByPrimaryKey(1L);

		model.addAttribute("testModel", testModel);
		model.addAttribute("hello", "hfffello spring mvc");
		return "index";
	}

}

專案原始碼下載地址