天天看點

maven-ssm整合maven準備工作插件測試注意點

maven

1.建立maven工程

​ A.groupid:分組

​ B.artifactid:項目名稱

​ C.version:版本号

ABC組成坐标

2.選中自己的maven版本

3.Add Maven Property

​ Name:archetypeCatalog

​ Value:internal

generating project in batch mode 很慢,是應為maven擷取archetype-catalog.xml導緻

用浏覽器打開http://repo1.maven.org/maven2/archetype-catalog.xml很慢

添加Add Maven Property目的是為了解決上述問題,讓maven加載本地配置就行。

4.工程建立完成後進入界面需要點選右下角的

Enable Auto-Import 讓他自動的導入插件

5.補充檔案夾

src 下有main和test

main下有java(标記成Sources),resource(Resources),webapp

test下有java和testresource

java(标記成test Sources)

testresource(标記成test resources)

6.所有的xml檔案都要放到資源目錄下

7.建立完成

準備工作

1.在pom.xml中關聯所需jar包代碼段

<?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.yb</groupId>
  <artifactId>ssmMavenCopy</artifactId>
  <version>1.0</version>
  <packaging>war</packaging>

  <name>ssmMavenCopy 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>

    <!--定義版本号   ${org.springframework.version}-->
    <org.springframework.version>5.0.7.RELEASE</org.springframework.version>
    <org.mybatis.version>3.4.6</org.mybatis.version>
  </properties>

  <dependencies>

    <!--單元測試-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!--lombok-->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.16.6</version>
    </dependency>
    <!-- servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>
    <!--mysql驅動-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.13</version>
    </dependency>
    <!-- druid -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.0.14</version>
    </dependency>
    <!-- common-lang -->
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.6</version>
    </dependency>
    <!--spring-test-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${org.springframework.version}</version>
      <scope>test</scope>
    </dependency>
    <!--spring-core-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>
    <!--spring-context-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>
    <!--spring-context-support-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>
    <!--spring-expression-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>
    <!--spring-jdbc-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>
    <!--spring-tx-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>
    <!--spring-web-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>
    <!--spring-aop-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>
    <!--spring-webmvc-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>

    <!-- aspectj -->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.7.4</version>
    </dependency>
    <!--aspectj weaver-->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.7.4</version>
    </dependency>

    <!-- cglib -->
    <dependency>
      <groupId>cglib</groupId>
      <artifactId>cglib</artifactId>
      <version>3.1</version>
    </dependency>

    <!-- mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${org.mybatis.version}</version>
    </dependency>
    <!--mybatis-spring-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
      <!--出現這個錯誤時rg.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer;
        把是因為版本太低了
      -->
    </dependency>

    <!-- jackson-core -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.4</version>
    </dependency>
    <!--jackson-databind-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.4</version>
    </dependency>
    <!--jackson-annotations-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.4</version>
    </dependency>

    <!--slf4j-api-->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.6</version>
    </dependency>
    <!--slf4j-log4j12-->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.6</version>
    </dependency>
    <!--log4j-->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    <!--commons-fileupload-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>
    <!-- jstl -->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <!-- standard -->
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
    <!--pagehelper-->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>4.1.4</version>
    </dependency>


  </dependencies>

  <build>
    <finalName>ssmMavenCopy</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>

           

2.加入ssm相關的配置檔案

Spring:applicationContext.xml

SpringMVC:application-mvc.xml

mybatis:application-mybatis.xml , sqlMapConfig.xml

資料庫的db.properties

日志檔案的log4j.properties

spring-springMVC

1.在web.xml中配置前段控制器

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0"
         metadata-complete="false">
  <absolute-ordering/>
  <display-name>web</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>


  <!--配置前端控制器-->
  <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <!--加載的主配置檔案-->
      <param-value>classpath:applicationContext.xml</param-value>
    </init-param>
    <!-- 項目啟動就加載架構 -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <!-- form表單編碼過濾器 -->
  <filter>
    <filter-name>CharacterEncoding</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>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
           

2.配置application-mvc.xml

<mvc:annotation-driven />
<!--靜态資源處理 -->
<mvc:default-servlet-handler/>
<!--視圖解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp" />
</bean>
           

3.在applicationContext.xml中引入application-mvc.xml

<!--導入springMVC-->
<import resource="classpath:application-mvc.xml"/>
           

spring-mybatis

1.配置application-mybatis.xml

<!--注解掃描-->
    <context:component-scan base-package="com.yb"/>

    <!--spring-Mybatis整合-->
    <!--加載資料庫屬性檔案-->
    <context:property-placeholder location="classpath:db.properties"/>
    <!--連接配接池-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}" />
        <!--屬性檔案當中的名稱不能和name名稱一樣-->
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>
    <!-- 配置事務管理器 -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 資料源 -->
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 開啟注解事務 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <!-- Mybatis的工廠 -->
    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!-- 核心配置檔案的位置 -->
        <property name="configLocation" value="classpath:sqlMapConfig.xml"/>
<!--        &lt;!&ndash;配置mapper映射檔案的路徑&ndash;&gt;
        <property name="mapperLocations" value="classpath:com.yb.mapper/*Mapper.xml"/>-->
    </bean>

    <!-- 配置Mapper接口掃描 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 配置Mapper xml檔案掃描包 -->
        <property name="basePackage" value="com.yb.mapper" />
    </bean>
           

2.在applicationConntext.xml中引入application-mybatis.xml

<!--導入mybatis-->
<import resource="classpath:application-mybatis.xml"/>
           

插件

代碼生成器:mybatis-generator

1.導入插件代碼到pom.xml中(不能寫到預設的pubginManagement可能會不生效,自己寫一個plugsins)

<plugins>
  <plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>1.3.2</version>
    <configuration>
      <verbose>true</verbose>
      <overwrite>false</overwrite>
    </configuration>
    <dependencies>
      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.13</version>
      </dependency>
    </dependencies>
  </plugin>
</plugins>
           

2.導入generatorConfig.xml檔案

<?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>

   <context id="mysql" defaultModelType="hierarchical"
          targetRuntime="MyBatis3Simple">

      <!-- 自動識别資料庫關鍵字,
      預設false,如果設定為true,
      根據SqlReservedWords中定義的關鍵字清單;
      一般保留預設值,
      遇到資料庫關鍵字(Java關鍵字),
      使用columnOverride覆寫 -->
      <property name="autoDelimitKeywords" value="false" />
      <!-- 生成的Java檔案的編碼 -->
      <property name="javaFileEncoding" value="UTF-8" />
      <!-- 格式化java代碼 -->
      <property name="javaFormatter"
              value="org.mybatis.generator.api.dom.DefaultJavaFormatter" />
      <!-- 格式化XML代碼 -->
      <property name="xmlFormatter"
              value="org.mybatis.generator.api.dom.DefaultXmlFormatter" />

      <!-- beginningDelimiter和endingDelimiter:指明資料庫的用于标記資料庫對象名的符号,
      比如ORACLE就是雙引号,MYSQL預設是`反引号; -->
      <property name="beginningDelimiter" value="`" />
      <property name="endingDelimiter" value="`" />

      <!--阻止生成日期和注釋-->
      <commentGenerator>
         <property name="suppressDate" value="true" />
         <property name="suppressAllComments" value="true" />
      </commentGenerator>

      <!-- 資料庫連接配接資訊 -->
      <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                  connectionURL="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"
                  userId="root" password="123456">

         <property name ="nullCatalogMeansCurrent" value = "true"/>
      </jdbcConnection>

      <!-- java類型處理器 用于處理資料庫中的類型到Java中的類型,
          預設使用JavaTypeResolverDefaultImpl;
          注意一點,預設會先嘗試使用Integer,Long,Short等來對應DECIMAL和
         NUMERIC資料類型; -->
      <javaTypeResolver
            type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
         <!-- true:使用BigDecimal對應DECIMAL和 NUMERIC資料類型 f
             alse:預設, scale>0;length>18:使用BigDecimal;
            scale=0;length[10,18]:使用Long; scale=0;length[5,9]:
            使用Integer; scale=0;length<5:使用Short; -->
         <property name="forceBigDecimals" value="false" />
      </javaTypeResolver>


      <!--
      配置domain生成政策
        targetProject:把自動生成的domian放在哪個工程裡面
        targetPackage:哪個包下
      -->
      <javaModelGenerator targetPackage="com.yb.domain"
                     targetProject="src/main/java">
         <!-- for MyBatis3/MyBatis3Simple
         自動為每一個生成的類建立一個構造方法,
         構造方法包含了所有的field;而不是使用setter; -->
         <property name="constructorBased" value="false" />

         <!-- for MyBatis3 / MyBatis3Simple
         是否建立一個不可變的類,如果為true,
         那麼MBG會建立一個沒有setter方法的類,
         取而代之的是類似constructorBased的類 -->
         <property name="immutable" value="false" />

         <!-- 設定是否在getter方法中,
         對String類型字段調用trim()方法 -->
         <property name="trimStrings" value="true" />
      </javaModelGenerator>

      <!--
            配置mapper.xml的生成政策
            targetPackage:把自動生成的mapper放在哪個工程裡面
            targetProject:哪個包下
        -->
      <sqlMapGenerator targetPackage="com.yb.mapper"
                   targetProject="src/main/java">
         <!-- 在targetPackage的基礎上,
         根據資料庫的schema再生成一層package,
         最終生成的類放在這個package下,預設為false -->
         <property name="enableSubPackages" value="true" />
      </sqlMapGenerator>

      <!--
           mapper接口生成政策
        -->
      <javaClientGenerator targetPackage="com.yb.mapper"
                      type="XMLMAPPER" targetProject="src/main/java">
         <property name="enableSubPackages" value="true" />
      </javaClientGenerator>

      <table schema="mybatis" tableName="teacher" domainObjectName="Teacher"></table>

   </context>
</generatorConfiguration>
           

mysql8.x的資料庫需要配置:

在jdbcConnection中加入

否則生成的檔案會出錯(由于8.x的資料庫會預設将所有的查找一遍)

<!--對應資料庫的表和生成的domain名-->
<table schema="mybatis" tableName="teacher" domainObjectName="Teacher"></table>
           

測試

建立一個form表單,嘗試将文本框裡的資料插入到資料庫中

注意點

1.要将生成的mapper.xml檔案放到resources資源目錄下

在resources下再建立一個同名的檔案夾

2.在application-mybatis.xml中要配置一下mapper.xml檔案的路徑

<!-- Mybatis的工廠 -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <!-- 核心配置檔案的位置 -->
    <property name="configLocation" value="classpath:sqlMapConfig.xml"/>
    <!--配置mapper映射檔案的路徑-->
    <property name="mapperLocations" value="classpath:com.yb.mapper/*Mapper.xml"/>
</bean>