maven構建spring mvc專案 + Mybatis整合
阿新 • • 發佈:2019-01-23
一、新建專案
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,點選Next8、以下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";
}
}
專案原始碼下載地址