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. 單元測試執行結果: