SSM三大框架整合詳細教程(SPRING+SPRINGMVC+MYBATIS)
使用 SSM ( Spring 、 SpringMVC 和 Mybatis )已經有三個多月了,專案在技術上已經沒有什么難點了,基于現有的技術就可以實作想要的功能,當然肯定有很多可以改進的地方。之前沒有記錄 SSM 整合的程序, 這次剛剛好基于自己的一個小專案重新搭建了一次,而且比專案搭建的要更好一些。以前解決問題的程序和方法并沒有及時記錄,以后在自己的小專案中遇到我再整理分享一下。 這次 , 先說說 三大框架整合程序 。個人認為使用框架并不是很難,關鍵要理解其思想,這對于我們提高編程水平很有幫助。不過,如果用都不會,談思想就變成紙上談兵了!!! 先技術,再思想。實踐出真知。 (可通過圖片水印查看博客地址)
1、基本概念
1.1、Spring
Spring 是一個開源框架, Spring 是于 2003 年興起的一個輕量級的 Java 開發框架,由 Rod Johnson 在其著作 Expert One-On-One J2EE Development and Design 中闡述的部分理念和原型衍生而來。它是為了解決企業應用開發的復雜性而創建的。 Spring 使用基本的 JavaBean 來完成以前只可能由 EJB 完成的事情。然而, Spring 的用途不僅限于服務器端的開發。從簡單性、可測驗性和松耦合的角度而言,任何 Java 應用都可以從 Spring 中受益。 簡單來說, Spring 是一個輕量級的控制反轉( IoC )和面向切面( AOP )的容器框架。
1.2、SpringMVC
Spring MVC 屬于 SpringFrameWork 的后續產品,已經融合在 Spring Web Flow 里面。 Spring MVC 分離了 控制器 、模型 物件 、分派器以及處理程式物件的角色,這種分離讓它們更容易進行定制。
1.3、MyBatis
MyBatis 本是 apache 的一個開源專案 iBatis , 2010 年這個專案由 apache software foundation 遷移到了 google code ,并且改名為 MyBatis 。 MyBatis 是一個基于 Java 的 持久層 框架。 iBATIS 提供的 持久層 框架包括 SQL Maps 和 Data Access Objects ( DAO ) MyBatis 消除了幾乎所有的 JDBC 代碼和引數的手工設定以及結果集的檢索。 MyBatis 使用簡單的 XML 或注解用于配置和原始映射,將介面和 Java 的 POJOs ( Plain Old Java Objects ,普通的 Java物件)映射成資料庫中的記錄。
2、開發環境搭建
如果需要,參看之前的博文: http://blog.csdn.net/zhshulin/article/details/30779873
3、Maven Web專案創建
如果需要,參看之前的博文: http://blog.csdn.net/zhshulin/article/details/37921705
4、SSM整合
下面主要介紹三大框架的整合,至于環境的搭建以及專案的創建,參看上面的博文。這次整合我分了 2 個組態檔 ,分別是 spring-mybatis.xml ,包含 spring 和 mybatis 的組態檔,還有個是 spring-mvc 的組態檔,此外有 2 個資源檔案 : jdbc.propertis 和 log4j.properties 。完整目錄結構如下:
使用框架都是較新的版本 :
Spring 4.0.2 RELEASE
Spring MVC 4.0.2 RELEASE
MyBatis 3.2.6
4.1、Maven引入需要的JAR包
為了方便后面說的時候不需要引入JAR包,我這里 直接給出所有需要的JAR包,這都是基本的JAR包 ,每個包的是干什么的都有注釋,就不再多說了。
pom.xml
<properties>
<!-- spring版本號 -->
<spring.version>4.0.2.RELEASE</spring.version>
<!-- mybatis版本號 -->
<mybatis.version>3.2.6</mybatis.version>
<!-- log4j日志檔案管理包版本 -->
<slf4j.version>1.7.7</slf4j.version>
<log4j.version>1.2.17</log4j.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<!-- 表示開發的時候引入,發布的時候不會加載此包 -->
<scope>test</scope>
</dependency>
<!-- spring核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis/spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- 匯入java ee jar 包 -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<!-- 匯入Mysql資料庫鏈接jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<!-- 匯入dbcp的jar包,用來在applicationContext.xml中配置資料庫 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
<!-- JSTL標簽類 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 日志檔案管理包 -->
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- 格式化物件,方便輸出日志 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.41</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log end -->
<!-- 映入JSON -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<!-- 上傳組件包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
</dependencies>
4.2、Spring與MyBatis的整合
所有需要的 JAR 包都引入以后,首先進行 Spring 與 MyBatis 的整合,然后再進行 JUnit 測驗,先看一個專案結構圖:
4.2.1、建立JDBC屬性檔案
jdbc.properties (檔案編碼修改為 utf-8 )
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://10.221.10.111:8080/db_zsl
username=demao
password=demao
#定義初始連接數
initialSize=0
#定義最大連接數
maxActive=20
#定義最大空閑
maxIdle=20
#定義最小空閑
minIdle=1
#定義最長等待時間
maxWait=60000
4.2.2、建立spring-mybatis.xml組態檔
這個檔案就是用來完成spring和mybatis的整合的。這里面也沒多少行配置,主要的就是 自動掃描,自動注入,配置資料庫 。注釋也很詳細,大家看看就明白了。
spring-mybatis.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 自動掃描 -->
<context:component-scan base-package="com.cn.hnust" />
<!-- 引入組態檔 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="https://bbs.csdn.net/topics/classpath:jdbc.properties" />
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="https://bbs.csdn.net/topics/${driver}" />
<property name="url" value="https://bbs.csdn.net/topics/${url}" />
<property name="username" value="https://bbs.csdn.net/topics/${username}" />
<property name="password" value="https://bbs.csdn.net/topics/${password}" />
<!-- 初始化連接大小 -->
<property name="initialSize" value="https://bbs.csdn.net/topics/${initialSize}"></property>
<!-- 連接池最大數量 -->
<property name="maxActive" value="https://bbs.csdn.net/topics/${maxActive}"></property>
<!-- 連接池最大空閑 -->
<property name="maxIdle" value="https://bbs.csdn.net/topics/${maxIdle}"></property>
<!-- 連接池最小空閑 -->
<property name="minIdle" value="https://bbs.csdn.net/topics/${minIdle}"></property>
<!-- 獲取連接最大等待時間 -->
<property name="maxWait" value="https://bbs.csdn.net/topics/${maxWait}"></property>
</bean>
<!-- spring和MyBatis完美整合,不需要mybatis的配置映射檔案 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自動掃描mapping.xml檔案 -->
<property name="mapperLocations" value="https://bbs.csdn.net/topics/classpath:com/cn/hnust/mapping/*.xml"></property>
</bean>
<!-- DAO介面所在包名,Spring會自動查找其下的類 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="https://bbs.csdn.net/topics/com.cn.hnust.dao" />
<property name="sqlSessionFactoryBeanName" value="https://bbs.csdn.net/topics/sqlSessionFactory"></property>
</bean>
<!-- (事務管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>
4.2.3、Log4j的配置
為了方便除錯,一般都會使用日志來輸出資訊, Log4j是 Apache 的一個開放源代碼專案,通過使用Log4j,我們可以控制 日志 資訊輸送的目的地是 控制臺 、檔案、 GUI 組件,甚至是套介面服務器、 NT 的事件記錄器、 UNIX Syslog 守護行程 等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志資訊的級別,我們能夠更加細致地控制日志的生成程序。
Log4j 的配置很簡單,而且也是 通用的 ,下面 給出一個基本的配置 ,換到其他專案中也無需做多大的調整, 如果想做調整 或者想了解 Log4j 的各種配置,參看我 轉載的一篇博文 ,很詳細:
http://blog.csdn.net/zhshulin/article/details/37937365
下面給出組態檔目錄:
log4j.properties
#定義LOG輸出級別
log4j.rootLogger=INFO,Console,File
#定義日志輸出目的地為控制臺
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
#可以靈活地指定日志輸出格式,下面一行是指定具體的格式
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n
#檔案大小到達指定尺寸的時候產生一個新的檔案
log4j.appender.File = org.apache.log4j.RollingFileAppender
#指定輸出目錄
log4j.appender.File.File = logs/ssm.log
#定義檔案最大大小
log4j.appender.File.MaxFileSize = 10MB
# 輸出所以日志,如果換成DEBUG表示輸出DEBUG以上級別日志
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
uj5u.com熱心網友回復:
轉載注明出處: https://www.cnblogs.com/jay36/p/7762448.htmluj5u.com熱心網友回復:
謝謝分享
uj5u.com熱心網友回復:
jdbc.properties里面url等屬性改為jdbc.url會更好一些,更有辨識度轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17749.html
標籤:Java相關
