Intellij IDEA 創(chuàng)建 Maven + Spring + SpringMVC + MyBatis 項目

創(chuàng)建 maven 項目

  • File -> New -> Module,進入創(chuàng)建項目窗口,如圖選擇
image.png目
  • 點擊 Next,填寫 GroupIdArtifactIdVersion
image.png

注:

GroupID
項目組織唯一的標識符,實際對應(yīng) Java 的包的結(jié)構(gòu),是 main 目錄里 Java 的目錄結(jié)構(gòu)。一般是域名的反寫,也作為項目中類的包名。

ArtifactID
項目的唯一的標識符,實際對應(yīng)項目的名稱,就是項目根目錄的名稱。

  • 下一步,在 Properties 中添加一個參數(shù) archetypeCatalog=internal
image.png

注: maven 的 jar 包需要去 maven 的中央倉庫下載,訪問國外的服務(wù)器,墻的存在速度很慢的,所以添加參數(shù)archetypeCatalog=internal ,表示僅使用內(nèi)部元數(shù)據(jù)。

  • Next,然后 finish,maven 項目就創(chuàng)建好了,如下就是整個項目的結(jié)構(gòu)了
image.png
  • src/main 下創(chuàng)建 java文件夾,點擊Project Structrue或者快捷鍵command + ;調(diào)出窗口。

對目錄進行標注,將java目錄標注為sources標簽

image.png

對于這幾個目錄,網(wǎng)上的說明是這樣的:

Sources: 一般用于標注類似 src 這種可編譯目錄。有時候我們不單單項目的 src 目錄要可編譯,還有其他一些特別的目錄也許我們也要作為可編譯的目錄,就需要對該目錄進行此標注。只有 Sources 這種可編譯目錄才可以新建 Java 類和包。

Tests: 一般用于標注可編譯的單元測試目錄。在規(guī)范的 maven 項目結(jié)構(gòu)中,頂級目錄是 src,maven 的 src 我們是不會設(shè)置為 Sources 的,而是在其子目錄 main 目錄下的 java 目錄,我們會設(shè)置為 Sources。而單元測試的目錄是 src - test - java,這里的 java 目錄我們就會設(shè)置為 Tests,表示該目錄是作為可編譯的單元測試目錄。一般這個和后面幾個我們都是在 maven 項目下進行配置的,但是我這里還是會先說說。從這一點我們也可以看出 IntelliJ IDEA 對 maven 項目的支持是比較徹底的。

Resources: 一般用于標注資源文件目錄。在 maven 項目下,資源目錄是單獨劃分出來的,其目錄為:src - main -resources,這里的 resources 目錄我們就會設(shè)置為 Resources,表示該目錄是作為資源目錄。資源目錄下的文件是會被編譯到輸出目錄下的。

Test Resources: 一般用于標注單元測試的資源文件目錄。在 maven 項目下,單元測試的資源目錄是單獨劃分出來的,其目錄為:src - test -resources,這里的 resources 目錄我們就會設(shè)置為 Test Resources,表示該目錄是作為單元測試的資源目錄。資源目錄下的文件是會被編譯到輸出目錄下的。

Excluded: 一般用于標注排除目錄。被排除的目錄不會被 IntelliJ IDEA 創(chuàng)建索引,相當于被 IntelliJ IDEA 廢棄,該目錄下的代碼文件是不具備代碼檢查和智能提示等常規(guī)代碼功能。
通過上面的介紹,我們知道對于非 maven 項目我們只要會設(shè)置 src 即可。

(引用自 http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/eclipse-java-web-project-introduce.html

  • java 目錄下新建包,新建 controller 層、dao 層、pojo 層、service 層等層。
image.png

maven 項目的創(chuàng)建工作基本完成。

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>com.chenqingyun</groupId>
  <artifactId>myproject</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>myproject 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>
        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>

        <!--定義版本信息參數(shù),提供下面引入-->
        <org.spring.version>4.0.0.RELEASE</org.spring.version>
        <org.mybatis.version>3.4.1</org.mybatis.version>
        <org.mybatis.spring.version>1.3.0</org.mybatis.spring.version>
    </properties>

    <dependencies>

        <!--servlet-->
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-servlet-api</artifactId>
            <version>7.0.64</version>
        </dependency>

        <!--spring-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>

            <!--引入上面定義的版本信息-->
            <version>${org.spring.version}</version>

        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>${org.spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${org.spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.spring.version}</version>
        </dependency>

        <!--aop 注解-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.6.11</version>
        </dependency>

        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>${org.mybatis.spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${org.mybatis.version}</version>
        </dependency>

        <!--json 序列化和反序列化-->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.12</version>
        </dependency>

        <!--數(shù)據(jù)庫連接池-->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
            <!--<scope>runtime</scope>-->
        </dependency>

        <!--日志-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.2</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.1.2</version>
            <scope>compile</scope>
        </dependency>

        <!--mysql jdbc 驅(qū)動-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>

        <!--Java 庫-->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>20.0</version>
        </dependency>

        <!--工具類庫-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.5</version>
        </dependency>

        <!--集合工具類-->
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.1</version>
        </dependency>

        <!--單元測試-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <!--<scope>test</scope>-->
        </dependency>

        <!--日期和時間庫-->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.3</version>
        </dependency>

        <!-- id加密解密 -->
        <dependency>
            <groupId>org.hashids</groupId>
            <artifactId>hashids</artifactId>
            <version>1.0.1</version>
        </dependency>

        <!-- ftpclient -->
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.1</version>
        </dependency>

        <!-- file upload -->
        <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.0.1</version>
        </dependency>

        <!-- mybatis pager -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.github.miemiedev</groupId>
            <artifactId>mybatis-paginator</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>com.github.jsqlparser</groupId>
            <artifactId>jsqlparser</artifactId>
            <version>0.9.4</version>
        </dependency>

        <!-- alipay -->
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.10</version>
        </dependency>
        <dependency>
            <groupId>commons-configuration</groupId>
            <artifactId>commons-configuration</artifactId>
            <version>1.10</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>2.1</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
            <version>1.3</version>
        </dependency>

        <!--Redis 客戶端連接工具-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
    </dependencies>

  <build>
    <finalName>myproject</finalName>
    <plugins>
          <!--自動生成 dao 層文件插件-->
          <plugin>
              <groupId>org.mybatis.generator</groupId>
              <artifactId>mybatis-generator-maven-plugin</artifactId>
              <version>1.3.2</version>
              <configuration>
                  <verbose>true</verbose>
                  <overwrite>true</overwrite>
              </configuration>
          </plugin>

          <!-- geelynote maven的核心插件之-complier插件默認只支持編譯Java 1.4,
          因此需要加上支持高版本jre的配置,在pom.xml里面加上 增加編譯插件 -->
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <configuration>
                  <!--根據(jù)項目的 jdk 版本配置這里的版本-->
                  <source>1.8</source>
                  <target>1.8</target>
                  <encoding>UTF-8</encoding>

                  <!--非常重要-->
                  <!--通過這個參數(shù),將本地的 jar 包在編譯的時候進行引入。
                  如果沒有配置,發(fā)布到其他地方的時候,會找不到 jar 包-->
                  <compilerArguments>
                      <extdirs>${project.basedir}/src/main/webapp/WEB-INF/lib</extdirs>
                  </compilerArguments>
              </configuration>
          </plugin>
      </plugins>
  </build>
</project>

根據(jù)實際需要添加依賴

Mybatis 配置

Mybatis Generator配置

代碼生成器,自動生成 pojodao,Mapping 中的文件。

pom.xml 文件中配置插件

<plugins>
          <!--自動生成 dao 層文件插件-->
          <plugin>
              <groupId>org.mybatis.generator</groupId>
              <artifactId>mybatis-generator-maven-plugin</artifactId>
              <version>1.3.2</version>
              <configuration>
                  <verbose>true</verbose>
                  <overwrite>true</overwrite>
              </configuration>
          </plugin>
      </plugins>

配置數(shù)據(jù)庫連接配置文件 datasource.properties

resources 目錄下新建 datasource.properties 文件

# 配置下載的驅(qū)動包的位置
db.driverLocation = ./library/mysql-connector-java-5.1.44-bin.jar

# db.driverClassName = oracle.jdbc.driver.OracleDriver
db.driverClassName = com.mysql.jdbc.Driver

# db.url=jdbc:mysql://數(shù)據(jù)庫IP:數(shù)據(jù)庫 Port/database?characterEncoding=utf-8
db.url = jdbc:mysql://localhost:3306/mydb?characterEncoding=utf-8&useSSL=true
db.username = mydb
db.password = 123456

db.initialSize = 20
db.maxActive = 50
db.maxIdle = 20
db.minIdle = 10
db.maxWait = 10
db.defaultAutoCommit = true
db.minEvictableIdleTimeMillis = 3600000

配置 generatorConfig.xmll 文件

這里就使用默認文件名,在 resources 目錄下新建 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>
    <!--導(dǎo)入數(shù)據(jù)庫連接屬性配置-->
    <properties resource="datasource.properties"></properties>

    <!--指定特定數(shù)據(jù)庫的jdbc驅(qū)動jar包的位置-->
    <classPathEntry location="${db.driverLocation}"/>

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

        <!-- optional,旨在創(chuàng)建class時,對注釋進行控制 -->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!--jdbc的數(shù)據(jù)庫連接 -->
        <jdbcConnection
                driverClass="${db.driverClassName}"
                connectionURL="${db.url}"
                userId="${db.username}"
                password="${db.password}">
        </jdbcConnection>


        <!-- 非必需,類型處理器,在數(shù)據(jù)庫類型和java類型之間的轉(zhuǎn)換控制-->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>


        <!-- Model模型生成器,用來生成含有主鍵key的類,記錄類 以及查詢Example類
            targetPackage     指定生成的model生成所在的包名
            targetProject     指定在該項目下所在的路徑
        -->
        <javaModelGenerator targetPackage="com.chenqingyun.pojo" targetProject="./src/main/java">
            <!-- 是否允許子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="false"/>
            <!-- 是否對model添加 構(gòu)造函數(shù) -->
            <property name="constructorBased" value="true"/>
            <!-- 是否對類CHAR類型的列的數(shù)據(jù)進行trim操作 -->
            <property name="trimStrings" value="true"/>
            <!-- 建立的Model對象是否不可改變  即生成的Model對象不會有 setter方法,只有構(gòu)造方法 -->
            <property name="immutable" value="false"/>
        </javaModelGenerator>

        <!--mapper映射文件生成所在的目錄 為每一個數(shù)據(jù)庫的表生成對應(yīng)的SqlMap文件 -->
        <sqlMapGenerator targetPackage="mappers" targetProject="./src/main/resources">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- 客戶端代碼,生成易于使用的針對Model對象和XML配置文件 的代碼
                type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper對象
                type="MIXEDMAPPER",生成基于注解的Java Model 和相應(yīng)的Mapper對象
                type="XMLMAPPER",生成SQLMap XML文件和獨立的Mapper接口
        -->

        <!-- targetPackage:mapper接口dao生成的位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.chenqingyun.dao" targetProject="./src/main/java">
            <!-- enableSubPackages:是否讓schema作為包的后綴 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>

        <!-- tablenName: 數(shù)據(jù)庫表名
                domainObjectName: 生成的類名
                enableCountByExample: 是否可以通過對象查數(shù)量
                enableUpdateByExample: 是否可以通過對象進行更新
        -->
        <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
        
        <table tableName="information" domainObjectName="Information" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
            <columnOverride column="detail" jdbcType="VARCHAR" />
            <columnOverride column="images" jdbcType="VARCHAR" />
        </table>
    </context>
</generatorConfiguration>

生成代碼

右側(cè)菜單 Maven ProjectPlugins 下雙擊 mybatis-generator 執(zhí)行生成代碼

image.png

查看執(zhí)行結(jié)果

image.png

執(zhí)行成功,在 pojodao,mappers 目錄下就會有生成的文件了。

Mybatis-Plugin 安裝

Mybatis-Plugin 插件的作用

提供 Service 與 Mapper 接口的導(dǎo)航,提供 Mapper 接口與配置文件中對應(yīng) SQL 的導(dǎo)航

自動檢查 Mapper XML 文件中的 id 沖突

自動檢查 Mapper XML 文件中錯誤的屬性值

  • 點擊 preference -> plugins -> Browse Repository
    搜索 Mybatis-Plugin ,左側(cè)點擊install 安裝插件
    image.png

然后重啟 IDEA。

Mybatis-PageHelper 分頁插件

  • pom.xml 文件中添加依賴
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>4.1.0</version>
</dependency>
<dependency>
    <groupId>com.github.miemiedev</groupId>
    <artifactId>mybatis-paginator</artifactId>
    <version>1.2.17</version>
</dependency>
<dependency>
    <groupId>com.github.jsqlparser</groupId>
    <artifactId>jsqlparser</artifactId>
    <version>0.9.4</version>
</dependency>

Spring、Spring MVC 配置

配置 Spring 容器

resources 目錄下新建 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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--掃描包下的注解-->
    <context:component-scan base-package="com.chenqingyun" annotation-config="true"/>

    <!--<context:annotation-config/>-->
    <aop:aspectj-autoproxy/>


    <import resource="applicationContext-datasource.xml"/>


</beans>
  • 配置 applicationContext-datasource.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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <context:component-scan base-package="com.chenqingyun" annotation-config="true"/>

    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="order" value="2"/>
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
        <property name="locations">
            <list>
                <value>classpath:datasource.properties</value>
            </list>
        </property>
        <property name="fileEncoding" value="utf-8"/>
    </bean>


    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${db.driverClassName}"/>
        <property name="url" value="${db.url}"/>
        <property name="username" value="${db.username}"/>
        <property name="password" value="${db.password}"/>
        <!-- 連接池啟動時的初始值 -->
        <property name="initialSize" value="${db.initialSize}"/>
        <!-- 連接池的最大值 -->
        <property name="maxActive" value="${db.maxActive}"/>
        <!-- 最大空閑值.當經(jīng)過一個高峰時間后,連接池可以慢慢將已經(jīng)用不到的連接慢慢釋放一部分,一直減少到maxIdle為止 -->
        <property name="maxIdle" value="${db.maxIdle}"/>
        <!-- 最小空閑值.當空閑的連接數(shù)少于閥值時,連接池就會預(yù)申請去一些連接,以免洪峰來時來不及申請 -->
        <property name="minIdle" value="${db.minIdle}"/>
        <!-- 最大建立連接等待時間。如果超過此時間將接到異常。設(shè)為-1表示無限制 -->
        <property name="maxWait" value="${db.maxWait}"/>
        <!--#給出一條簡單的sql語句進行驗證 -->
         <!--<property name="validationQuery" value="select getdate()" />-->
        <property name="defaultAutoCommit" value="${db.defaultAutoCommit}"/>
        <!-- 回收被遺棄的(一般是忘了釋放的)數(shù)據(jù)庫連接到連接池中 -->
         <!--<property name="removeAbandoned" value="true" />-->
        <!-- 數(shù)據(jù)庫連接過多長時間不用將被視為被遺棄而收回連接池中 -->
         <!--<property name="removeAbandonedTimeout" value="120" />-->
        <!-- #連接的超時時間,默認為半小時。 -->
        <property name="minEvictableIdleTimeMillis" value="${db.minEvictableIdleTimeMillis}"/>

        <!--# 失效檢查線程運行時間間隔,要小于MySQL默認-->
        <property name="timeBetweenEvictionRunsMillis" value="40000"/>
        <!--# 檢查連接是否有效-->
        <property name="testWhileIdle" value="true"/>
        <!--# 檢查連接有效性的SQL語句-->
        <property name="validationQuery" value="SELECT 1 FROM dual"/>
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath*:mappers/*Mapper.xml"></property>

        <!-- 分頁插件 -->
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageHelper">
                    <property name="properties">
                        <value>
                            dialect=mysql
                        </value>
                    </property>
                </bean>
            </array>
        </property>

    </bean>

    <bean name="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.chenqingyun.dao"/>
    </bean>

    <!-- 使用@Transactional進行聲明式事務(wù)管理需要聲明下面這行 -->
    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
    <!-- 事務(wù)管理 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
        <!--提交失敗是否回滾-->
        <property name="rollbackOnCommitFailure" value="true"/>
    </bean>


</beans>

配置 Spring MVC

使用默認文件名和路徑,在./src/main/webapp/WEB-INF 目錄下新建 dispatcher-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:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="com.chenqingyun" annotation-config="true"/>

    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/plain;charset=UTF-8</value>
                        <value>text/html;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>



    <!-- 文件上傳 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10485760"/> <!-- 10m -->
        <property name="maxInMemorySize" value="4096" />
        <property name="defaultEncoding" value="UTF-8"></property>
    </bean>


</beans>

配置 web.xml

./src/main/webapp/WEB-INF 目錄下

<?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"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         id="WebApp_ID" version="2.5">

    <display-name>Archetype Created Web Application</display-name>

    <!--過濾器-->
    <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>


    <!--監(jiān)聽器-->

    <!--監(jiān)聽 web 容器的啟動和關(guān)閉-->
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

    <!-- 將 web 容器和 spring 容器進行整合的監(jiān)聽器-->
    <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>

    <!--使用默認文件名 dispatcher-servlet.xml-->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

</web-app>

配置 logback.xml 文件

resources 目錄下新建 logback.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoding>UTF-8</encoding>
        <encoder>
            <pattern>[%d{HH:mm:ss.SSS}][%p][%c{40}][%t] %m%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
    </appender>

    <appender name="myproject" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${CATALINA_HOME}/logs/myproject.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${CATALINA_HOME}/logs/myproject.log.%d{yyyy-MM-dd}.gz</fileNamePattern>
            <append>true</append>
            <maxHistory>10</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>[%d{HH:mm:ss.SSS}][%p][%c{40}][%t] %m%n</pattern>
        </encoder>
    </appender>


    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${CATALINA_HOME}/logs/error.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${CATALINA_HOME}/logs/error.log.%d{yyyy-MM-dd}.gz</fileNamePattern>
            <append>true</append>
            <maxHistory>10</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>[%d{HH:mm:ss.SSS}][%p][%c{40}][%t] %m%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <logger name="com.chenqingyun" additivity="false" level="INFO" >
        <appender-ref ref="myproject" />
        <appender-ref ref="console"/>
    </logger>



    <!-- geelynote mybatis log 日志 -->

    <logger name="com.chenqingyun.dao" level="DEBUG"/>

    <!--<logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG" >-->
        <!--<appender-ref ref="console"/>-->
    <!--</logger>-->

    <!--<logger name="java.sql.Connection" level="DEBUG">-->
        <!--<appender-ref ref="console"/>-->
    <!--</logger>-->
    <!--<logger name="java.sql.Statement" level="DEBUG">-->
        <!--<appender-ref ref="console"/>-->
    <!--</logger>-->

    <!--<logger name="java.sql.PreparedStatement" level="DEBUG">-->
        <!--<appender-ref ref="console"/>-->
    <!--</logger>-->


    <root level="DEBUG">
        <appender-ref ref="console"/>
        <appender-ref ref="error"/>
    </root>

</configuration>

Tomcat Server 配置

  • 點擊 Edit Configurations
image.png
  • 點擊 + 號,選擇 Tomcat Server -> Local
image.png
  • 點擊Configure添加 Tomact,Tomcat Home 選擇根文件夾
image.png
  • 切換到 Deployment 下,點擊 + 號,選擇 Artifact,添加 war
image.png

點擊 OK 就好了。

運行看看,Tomcat 啟動成功那 Tomcat Server 就配置沒問題了。

Git 初始化

  • Termianl 中輸入 git init 初始化 git 項目

  • 創(chuàng)建 .gitignore 文件
    Termianl 中輸入 touch .gitignore 創(chuàng)建文件,添加配置

*.calss

#package file
*.war
*.ear

#kdiff3 ignore
*.orig

#maven ignore
target/

#idea
.idea/
/idea/
*.ipr
*.iml
*.iws

#temp file
*.log
*.cache
*.diff
*.patch
*.tmp

#system ignore
.DS_Store
Thumbs.db

  • 提交項目
    git add .添加文件,git commit -m "first commit" 提交
[master (root-commit) 61cd96b] first commit
 4 files changed, 62 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 pom.xml
 create mode 100644 src/main/webapp/WEB-INF/web.xml
 create mode 100644 src/main/webapp/index.jsp

提交成功

  • 關(guān)聯(lián) GitHub 上的倉庫
    GitHub 上創(chuàng)建與項目同名的倉庫,復(fù)制遠程倉庫地址。輸入git remote add origin + 遠程倉庫地址。
    git brach 查看分支,顯示在 master分支上
$ git remote add origin git@github.com:chenqingyun/myproject.git
$ git branch
* master

  • 推送到遠程倉庫
    git push -u origin master
$ git push -u origin master
To github.com:chenqingyun/myproject.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:chenqingyun/myproject.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

告訴我們要先執(zhí)行git pull命令,將遠程倉庫上的先獲取到本地。
執(zhí)行 git pull

$ git pull
warning: no common commits
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From github.com:chenqingyun/myproject
 * [new branch]      master     -> origin/master
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> master


成功后再執(zhí)行 git push -u origin master 命令。

To github.com:chenqingyun/myproject.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:chenqingyun/myproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

還是失敗,說當前分支是落后的,目前遠程倉庫上還什么都沒有,我們可以強制 push ,覆蓋掉遠程倉庫上的內(nèi)容。

執(zhí)行 git push -u -f origin master

Counting objects: 10, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (10/10), 1.15 KiB | 1.15 MiB/s, done.
Total 10 (delta 0), reused 0 (delta 0)
To github.com:chenqingyun/myproject.git
 + 6138854...61cd96b master -> master (forced update)
Branch master set up to track remote branch master from origin.

提示成功,可以去 GitHub 上刷新下倉庫看看。

git 項目的初始化就完成了。

  • 創(chuàng)建分支

    • git branch -r 查看遠程分支,在 origin/master 上,即主干分支
    • master 基礎(chǔ)上創(chuàng)建一個 v1.0 的分支,輸入git checkout -b v1.0 origin/master
    Branch v1.0 set up to track remote branch master from origin.
    Switched to a new branch 'v1.0'
    

    分支切換成功,執(zhí)行git branch 查看本地分支,是v1.0

    • 推送分支,執(zhí)行git push origin HEAD -u
    Total 0 (delta 0), reused 0 (delta 0)
    To github.com:chenqingyun/myproject.git
    * [new branch]      HEAD -> v1.0
    Branch v1.0 set up to track remote branch v1.0 from origin.
    

    遠程倉庫上就會有這個分支了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容