springmvc+spring+mybatis整合 idea版

最近公司要開發新項目記錄下過程:給大家一個參考,優美不優美大家自己評論

創建maven項目

在這裏插入圖片描述
當然jdk 根據自己的需要選擇版本,我現在一直用的1.8
在這裏插入圖片描述
groupid 一般公司域名倒着寫 artifactID 項目名稱
也可以groupid 公司域名加項目名稱用.分隔,artifactid用-分隔
在這裏插入圖片描述
maven選擇
新建項目完成

整合順序

在這裏插入圖片描述
1.spring爲核心 我們先添加spring的支持
2.spring 再整合mybatis
3.spring 整合springmvc

mave 依賴

pom 添加依賴

<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.dhcc.ecs</groupId>
  <artifactId>com-dhcc-ecs</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>com-dhcc-ecs Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>

    <java.version>1.8</java.version>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

    <!--lib setting-->
    <spring.version>4.3.3.RELEASE</spring.version>
    <jackson.version>2.6.3</jackson.version>


  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.39</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>c3p0</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.1.1</version>
    </dependency>

    <!-- DAO框架:mybatis-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.1</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>

    <!-- servlet 相關依賴-->
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.6.7</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>

    <!--spring依賴-->
    <!--1)核心依賴-->
    <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-context-support</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--2)spring DAO-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--3)spring web-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--4)spring test-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>



  </dependencies>

  <build>
    <finalName>com-dhcc-ecs</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

文件結構先大致添加好

在這裏插入圖片描述
在這裏插入圖片描述

spring 支持

配置文件 applicationContext

<?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:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
       http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
       http://www.springframework.org/schema/tx 
       http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.0.xsd
       http://cxf.apache.org/jaxws 	
       http://cxf.apache.org/schemas/jaxws.xsd
     ">

	<!-- 加載系統模塊配置文件begin -->
	<context:component-scan base-package="com.hrp.**.serviceImpl"
		use-default-filters="false">
		<context:include-filter type="annotation"
			expression="org.springframework.stereotype.Service" />
	</context:component-scan>
	<!-- 加載系統模塊配置文件end -->

測試類

 @Test
    public void  test1(){

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        DemoService demoService= (DemoService) applicationContext.getBean("demoService");
        demoService.findAll();
    }

SpringMvc 支持

web.xml 配置

<!--spring mvc 支持 前端控制器-->
  <servlet>
    <servlet-name>hrp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:hrp.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>hrp</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

  <!--解決亂碼問題-->
  <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>

springmvc 配置我這裏名字爲hrp.xml
1.開啓掃碼功能 只掃描controller層
2.jsp視圖解析器 我這裏用的html不是jsp freemarker模板
3.過濾靜態資源文件
4.開啓掃碼

<!-- 過濾靜態資源文件訪問 -->
	<mvc:resources location="/lib/" mapping="/lib/**" />

	<mvc:default-servlet-handler />

	
	
	<!--登陸 用戶 等註解探測器,表示不需要爲每個訪問路徑配置控制類 -->
	<!--開啓掃描-->
	<context:component-scan base-package="com.hrp.**.controller" use-default-filters="false">
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
	</context:component-scan>
	<!--開啓註解功能-->
	<mvc:annotation-driven />

	<!--&lt;!&ndash; 攔截器設置,處理session超時,自動跳轉到登錄頁面 &ndash;&gt;-->
	<!--<mvc:interceptors>-->
		<!--<bean class="com.base.InterceptorController" />-->
	<!--</mvc:interceptors>-->


	<!-- jsp視圖解析器 -->
	<!--bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view/" />
		<property name="suffix" value=".html" />
	</bean-->

	<!-- 設置freeMarker的配置文件路徑 -->
    <bean id="freemarkerConfiguration"
          class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <!--註釋掉的下方代碼是指引freemarker的基本信息的配置位置,因爲我已經將配置信息移到了applicationContext文件下,所以這裏就沒必要存在了,不註釋也不會有問題的 -->
        <!--<property name="location" value="classpath:/WEB-INF/config/freemarker.properties" />-->
    </bean>

spring 和 springmvc 整合

我們現在想想有一個問題就是spring配置文件沒有被加載,但是所以我們在tomcat啓動的時候需要加載spring的配置文件
servletcontext 域對象
服務器啓動的創建servletcontext 域對象 服務器關閉的時候才銷燬
其中有一類監聽監聽servletcontext 域對象的創建和銷燬
因此我們使用監聽器去加重spring的配置文件

這一段我們自己好好理解下
spring-web jar提供相關的監聽器

web.xml 中添加

<!--默認值加載web-inf 的applicationContext.xml 所以我們需要初始化文件位置-->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

此時controller就可以注入service了

@Controller
@RequestMapping("/demo")
public class DemoController {

    **@Resource
    DemoService demoService;**

    @RequestMapping("/demo")
    public  void demotest(){
        demoService.findAll();
        System.out.println("controller======" );
    }
}

添加mybatis 支持

sqlMapConfig.xml mybatis 主配置文件
和mapper.hrp下面的 mapper配置文件

<?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"/><!-- 使用延遲加載 -->
        <setting name="aggressiveLazyLoading" value="false"/><!-- 按需加載對象屬性(即訪問對象中一個懶對象屬性,不會加載對象中其他的懶對象屬性) -->
        <setting name="cacheEnabled" value="true"/><!-- 開啓二級緩存,默認是false -->
        <setting name="callSettersOnNulls" value="true"/><!--解決,查詢返回結果含null沒有對應字段值問題-->
        <setting name="mapUnderscoreToCamelCase" value="true"/> <!--開啓駝峯命名,比如 mysql 中的字段  User_Code  對應Java bean中的userCode -->
        <!--<setting name="logImpl" value="STDOUT_LOGGING" />-->
        <!--有效值-->
        <!--SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING-->
        <setting name="logImpl" value="LOG4J" />
    </settings>
    <typeAliases>
        <!--單個類命名-->
        <typeAlias type="com.hrp.sys.entity.SysUser" alias="sysUser"/>
        <!--也可以使用註解@Alias-->
        <!--批量將一個包下的所有類都起別名-->
        <package name="com.hrp.sys.entity"></package>
    </typeAliases>
    
    <environments default="">
        <environment id="">
            <!--<transactionManager type=""></transactionManager>-->
            <!--<dataSource type=""></dataSource>-->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://ip:3306/databsename?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;autoReconnect=true&amp;failOverReadOnly=false&amp;allowMultiQueries=true"/>
                <property name="username" value="root"/>
                <property name="password" value="****"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/hrp/demo/DemoMapper.xml"></mapper>

    </mappers>
</configuration>

<!-- 
cacheEnabled  對在此配置文件下的所有cache 進行全局性開/關設置。true | false 。默認:true
lazyLoadingEnabled 全局性設置懶加載。如果設爲‘false’,則所有相關聯的都會被初始化加載。true | false。默認:true
aggressiveLazyLoading 當設置爲‘true’的時候,懶加載的對象可能被任何懶屬性全部加載。否則,每個屬性都按需加載。true | false。默認:true
multipleResultSetsEnabled 允許和不允許單條語句返回多個數據集(取決於驅動需求)true | false。默認:true
useColumnLabel 使用列標籤代替列名稱。不同的驅動器有不同的作法。參考一下驅動器文檔,或者用這兩個不同的選項進行測試一下。true | false。默認:true
useGeneratedKeys 允許JDBC 生成主鍵。需要驅動器支持。如果設爲了true,這個設置將強制使用被生成的主鍵,有一些驅動器不兼容不過仍然可以執行。true | false。默認:false
autoMappingBehavior 指定MyBatis 是否並且如何來自動映射數據表字段與對象的屬性。PARTIAL將只自動映射簡單的,沒有嵌套的結果。FULL 將自動映射所有複雜的結果。NONE,PARTIAL,FULL。默認:PARTIAL
defaultExecutorType 配置和設定執行器,SIMPLE 執行器執行其它語句。REUSE 執行器可能重複使用prepared statements 語句,BATCH執行器可以重複執行語句和批量更新。SIMPLE,REUSE,BATCH。默認:SIMPLE,
defaultStatementTimeout 設置一個時限,以決定讓驅動器等待數據庫迴應的多長時間爲超時。正整數。默認:Not Set
 -->

spirng mybatis 整合

spirng配置xml文件中
1.配置連接池
2. 配置sqlsessionfactory工廠
3. 配置maperr文件

spring 事務添加

1.配置事務管理器
2. 事務通知
3. 配置aop增強

<!-- spring 聲明式的事務 -->
	<aop:aspectj-autoproxy />

	<aop:config>
		<aop:pointcut id="appService"
			expression="execution(* com.hrp.**..service..*Service*.*(..))" />
		<aop:advisor advice-ref="txAdvice" pointcut-ref="appService" />
	</aop:config>
	<!-- PROPAGATION_REQUIRED 支持當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。<br> PROPAGATION_SUPPORTS支持當前事務,如果當前沒有事務,就以非事務方式執行。
		PROPAGATION_MANDATORY 支持當前事務,如果當前沒有事務,就拋出異常。 PROPAGATION_REQUIRES_NEW新建事務,如果當前存在事務,把當前事務掛起。
		PROPAGATION_NOT_SUPPORTED 以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。 PROPAGATION_NEVER以非事務方式執行,如果當前存在事務,則拋出異常。
		PROPAGATION_NESTED 如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,則進行與PROPAGATION_REQUIRED類似的操作。 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!-- 添加數據 納入事物攔截的方法前綴 -->
			<tx:method name="add*" propagation="REQUIRED" />
			<tx:method name="insert*" propagation="REQUIRED" />
			<tx:method name="save*" propagation="REQUIRED" />
			<tx:method name="init*" propagation="REQUIRED" />
		

			<tx:method name="*" propagation="SUPPORTS" />


		</tx:attributes>
	</tx:advice>

	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章