1. 程式人生 > >SSM框架整合(IntellIj IDEA+Maven+Spring+SpringMVC+MyBatis)之MyBatis

SSM框架整合(IntellIj IDEA+Maven+Spring+SpringMVC+MyBatis)之MyBatis

我認為框架整合不熟練的話按照MyBatis->SpringMVC->Spring順序整合比較好,先配置MyBatis是因為不需要額外的配置伺服器,進行單元測試比較容易。Spring是用來進行整合的,所以等其它框架配置好之後進行整合不會顯得很亂。


1. IntelliJ IDEA搭建Maven專案

這裡寫圖片描述


這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

新建完專案之後就是下面這樣一個空專案


這裡寫圖片描述

按規範搭建一個專案結構,src下面分為main和test,main放正式程式碼和正式資源配置檔案,test下放測試程式碼和測試資原始檔


這裡寫圖片描述


然後右鍵給專案設定屬性,main下面的java設定為sources root,resources設定為resources root;test下面的java設定為test resources root,resources設定為test resources root,idea打包是分類打包的,比如說java檔案裡是方程式碼的就不能方配置檔案,不然打包的時候配置檔案沒有包含進去,同樣的測試檔案裡不能放正式程式碼。
要先設定好各個檔案的屬性才能建包,沒設定好屬性右鍵就沒有package這個選項,如果點選了directory建立的是目錄,名字為com.xxx.xxx的目錄,不是層疊的包,必須在sources root狀態下才有建包的選項。



這裡寫圖片描述

2. 配置MyBatis
2.1. 導包
配置pom.xml的時候注意包的使用範圍,也就是scope屬性。有一次做專案報錯就是因為這個。當時專案要做一個郵件驗證功能,我就用javaEE自帶的郵件包來做,測試的時候好好的能傳送,但是釋出到伺服器上的時候就不能傳送。檢查了好久才發現是javaee-api設定的範圍是provided,也就是不打包釋出到伺服器上,我就把provided給刪了,預設為compile打包到伺服器,然後發現連啟動伺服器都報錯了。經過仔細排查發現是javaee-api自帶的servlet包和tomcat自帶的servlet包衝突了,所以我又把javaee-api的範圍給改回provided,郵件要用的包再單獨新增,這下才徹底解決了。

<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.overridere.web</groupId>
  <artifactId
>
blogmanage</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>blogmanage Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>javax.servlet.jsp.jstl</artifactId> <version>1.2.2</version> </dependency> <!-- spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>4.2.6.RELEASE</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>4.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.batch</groupId> <artifactId>spring-batch-infrastructure</artifactId> <version>3.0.7.RELEASE</version> </dependency> <!-- dbcp --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <!-- 新增mybatis支援 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> </dependency> <!-- jdbc驅動包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.8</version> </dependency> <!-- 新增日誌支援 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.12</version> </dependency> <dependency> <groupId>asm</groupId> <artifactId>asm</artifactId> <version>3.3.1</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.18.1-GA</version> </dependency> <!-- json對應MappingJackson2HttpMessageConverter,2.x版本以上 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>blogmanage</finalName> </build> </project>

2.2. jdbc.properties配置檔案

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/blog
username=root
password=ying1995520***

2.3編寫MyBatis配置檔案SqlMapConfig.xml

<?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>
    <!-- 載入資料庫連線引數配置檔案 -->
    <properties resource="jdbc.properties" />

    <!-- 全域性配置引數 -->
    <settings>
        <!-- 開啟延遲載入 -->
        <setting name="lazyLoadingEnabled" value="true" />
        <setting name="aggressiveLazyLoading" value="false" />

        <!-- 開啟二級快取 -->
        <setting name="cacheEnabled" value="true" />
    </settings>

    <typeAliases>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <package name="com.jyh.mapper"/>
    </mappers>

</configuration>

2.4 使用Maven外掛自動生成domain類、Mapper介面和Mapper.xml檔案
2.4.1在pom.xml檔案中引入外掛

<build>
    <finalName>blogmanage</finalName>
      <!-- mybatis自動生成程式碼外掛 -->
      <plugins>
          <plugin>
              <groupId>org.mybatis.generator</groupId>
              <artifactId>mybatis-generator-maven-plugin</artifactId>
              <version>1.3.5</version>
              <configuration>
                  <verbose>true</verbose>
                  <overwrite>true</overwrite>
              </configuration>
          </plugin>
      </plugins>
  </build>

2.4.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>
    <!-- 配置mysql 驅動jar包路徑.用了絕對路徑 -->
    <classPathEntry location="E:/JAVA/maven/mavenRepository/mysql/mysql-connector-java/5.1.8/mysql-connector-java-5.1.8.jar" />

    <context id="wangyongzhi_mysql_tables" targetRuntime="MyBatis3">
        <!-- 防止生成的程式碼中有很多註釋,加入下面的配置控制 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
            <property name="suppressDate" value="true" />
        </commentGenerator>

        <!-- 資料庫連線 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/blog"
                        userId="root"
                        password="ying1995520***">
        </jdbcConnection>

        <javaTypeResolver >
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- Model模型生成器,用來生成含有主鍵key的類,記錄類 以及查詢Example類
            targetPackage     指定生成的model生成所在的包名
            targetProject     指定在該專案下所在的路徑
        -->
        <javaModelGenerator targetPackage="com.jyh.domain" targetProject="src/main/java">
            <!-- 是否對model新增 建構函式 -->
            <property name="constructorBased" value="true"/>

            <!-- 是否允許子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="true" />

            <!-- 建立的Model物件是否 不可改變  即生成的Model物件不會有 setter方法,只有構造方法
            <property name="immutable" value="true"/> -->

            <!-- 是否對類CHAR型別的列的資料進行trim操作 -->
            <property name="trimStrings" value="true" />

            <!-- 給Model新增一個父類
            <property name="rootClass" value="com.foo.louis.Hello"/>
             -->
        </javaModelGenerator>

        <!-- sql mapper 對映配置檔案 -->
        <sqlMapGenerator targetPackage="com.jyh.mapper"  targetProject="src/main/resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!-- 客戶端程式碼,生成易於使用的針對Model物件和XML配置檔案 的程式碼
                type="ANNOTATEDMAPPER",生成Java Model 和基於註解的Mapper物件
                type="MIXEDMAPPER",生成基於註解的Java Model 和相應的Mapper物件
                type="XMLMAPPER",生成SQLMap XML檔案和獨立的Mapper介面
        -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.jyh.mapper"  targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
            <!--
                定義Maper.java 原始碼中的ByExample() 方法的可視性,可選的值有:
                public;
                private;
                protected;
                default
                注意:如果 targetRuntime="MyBatis3",此引數被忽略\
                <property name="exampleMethodVisibility" value=""/>
             -->

            <!--
                  方法名計數器
                  Important note: this property is ignored if the target runtime is MyBatis3.
                  <property name="methodNameCalculator" value=""/>
             -->

             <!-- 為生成的介面新增父介面
             <property name="rootInterface" value=""/>-->
        </javaClientGenerator>

        <!-- 資料表進行生成操作 schema:相當於庫名; tableName:表名; domainObjectName:對應的DO -->
        <table schema="blog" tableName="article" domainObjectName="Article"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
        <table schema="blog" tableName="user" domainObjectName="User"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
        <table schema="blog" tableName="comment" domainObjectName="Comment"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>

    </context>
</generatorConfiguration>

這裡寫圖片描述

2.4.3 執行外掛
這裡寫圖片描述

這裡寫圖片描述

2.4.4 執行結果
這裡寫圖片描述

3. 單元測試執行結果:

這裡寫圖片描述