SSM整合詳解(個人理解)

SSM:Spring+SpringMVC+MyBatis

SpringMVC配置:

web.xml

1.配置前端控制器,讀取SpringMVC的配置文件

<servlet>

<servlet-name>Servlet的Name</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<!-- 讀取指定路徑下的xml信息(SpringMVC的配置文件)-->

<param-value>classpath:config/spring/mvc-servlet.xml</param-value>

</init-param>

<!--設置一啓動就加載SpringMVC的配置文件,創建前端控制器-->

<load-on-startup>1</load-on-startup>

</servlet>

 

<servlet-mapping>

<servlet-name>Servlet的Name</servlet-name>

<!--只有後綴名爲.do的請求才會被SpringMVC所攔截-->

<url-pattern>*.do</url-pattern>

</servlet-mapping>

mvc-servlet.xml(已省略頭文件信息)

<!--配置註解驅動掃描controller包下的文件,使用註解-->

<context:component-scanbase-package="controller"></context:component-scan>

<!-- 開啓註解驅動

SpringMVC框架,使用註解驅動後,默認映射器,適配器,視圖解析器變更

使用的是註解關注的映射器,適配器,視圖解析器.

AnnotationMethodHandleAdapter或其子類型.

如果不修改適配器,當開啓靜態資源映射的時候,無法掃描註解

 -->

<mvc:annotation-driven/>

 

<!-- 配置文件上傳解析器 ,配置後可以使用上傳功能,multipartResolver大小寫敏感-->

<bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>

<!-- 配置視圖解析器,實現前後綴的拼接

作用就是在返回視圖資源的時候會自動加上/WEB-INF/jsp/  返回視圖的名稱   .jsp

 -->      

<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="viewClass"value="org.springframework.web.servlet.view.JstlView"></property>

<property name="prefix"value="/WEB-INF/jsp/"></property>

<property name="suffix"value=".jsp"></property>

</bean>

SpringMVC工作原理

首先用戶發出請求,請求經過web.xml,之後進行判斷是否爲springmvc攔截的路徑.如上面所配置的.do,如果是的話則會通過註解所掃描的包去一一匹配相應的請求@RequestMapping("/url"),如果url與用戶請求的url一致,則進行業務操作,之後返回一個視圖資源,如果配置了視圖解析器則還會調用視圖解析器,最後返回給用戶一個相應的頁面

因爲SpringMVC和Spring天然整合,所以說不需要配置額外的信息.

MyBatis自身配置

1.配置核心配置文件【配置會話工廠】

配置文件沒有固定的命名格式建議使用mybatis.cfg.xml來命名

配置文件內容如下(省略頭信息):

<configuration>

<!--如果導入外部的properties配置文件的話,需要配置properties標籤 可選-->

<propertiesresource="db.properties">這裏導入了db.properties的配置文件

 

<!--之後配置會話工廠

值 - devlopment,可配置的環境.

-->

<environmentdefault="development">

<!--配置當前會話工廠的運行環境 -->

<environmentid="development">

<!--

          配置事務管理

當前環境的事務管理方式,不是事務管理器

數據庫的事務管理方式:

JDBC- 依賴JDBC技術實現事務管理方式,最底層,ORM框架本身沒有事務管理能力

MANAGER-容器管理.如:使用Spring容器管理MyBatis框架的會話工廠.

可以使用Spring容器提供的事務管理機制,實現事務管理.

JTA - java transaction api . java事務開發工具接口.

-->

<transactionManagertype="JDBC"></transactionManager>

 

<!--數據源:並不是直接配置一個連接池

 訪問數據庫時,創建連接對象創建方式.連接對象的管理方式.

 創建方式有:每次創建一個新的,提前創建若干連接.

type=UNPOOLED

管理方式:單一對象創建管理,池化管理

type=POOLED

 -->

 

<dataSourcetype="POOLED">

<!-- 配置如何連接數據庫

 配置數據庫連接參數的時候, 可以通過XML腳本語法 - ${}配置.

XML腳本. 解析方式由解析器決定.

MyBatis提供的解析器,是解析Properties配置文件或Properties對   象實現數據的配置.

${key} - 對應value

 -->

<propertyname="driver" value="${mysql.driver}"/>

<property name="url"value="${mysql.url}" />

<propertyname="username" value="${mysql.username}" />

                            <propertyname="password" value="${mysql.password}" />

               

<!-- <propertyname="driver" value="com.mysql.jdbc.Driver"/>

<property name="url"value="jdbc:mysql://localhost:3306/mybatis" />

<propertyname="username" value="root" />

<propertyname="password" value="root" />  -->

</dataSource>

</environment>

</environments>

<!--配置SQL映射文件mapper-->

<mappers>

<mapperresource="User.mapper.xml"/>

</mappers>

 

</configuration>

 

MyBatis的運行原理:

配置完MyBatis的會話工廠【mybatis.cfg.xml】後就可以通過代碼來創建會話工廠

 

//創建會話工廠

SqlSessionFactorysqlSessionFactory=null;

//創建會話工廠的構建器

SqlSessionFactoryBuilderbuilder=new SqlSessionFactoryBuilder();

//創建配置文件的讀取的輸入流

InputStreamis=Resources.getResourceAsStream("mybatis.cfg.xml");

//創建會話工廠

sqlSessionFactory=bulider.build(is);

//獲得會話

SqlSessionsession=sqlSessionFactory.openSession();

SqlSessionFactory  sqlSessionFactory=newSqlSesssionFactoryBuider.builde(Resources.getResourceAsStream("mybatis.cfg.xml"));

SqlSessionsession=new SqlSesssionFactoryBuider.builde(Resources.getResourceAsStream("mybatis.cfg.xml")).openSession();

 

之後編寫mapper的xml的配置文件.

<mappernamespace="user">

<select id="statement的名稱" resultType="返回值類型">

SQL語句

<select>

</mapper>

 

然後通過sqlSession來進行查詢

 

MyBatis與Spring整合

首先要導入Jar包,mybatis-spring-1.2.1.jar

 

之後讓Spring來管理MyBatis的會話工廠.也就是讓Spring自動創建SqlSession

 

配置文件如下,省略頭信息

 

 <!-- Properties配置文件讀取

      location-讀取本地Properties配置文件,定義方式爲路徑/文件名

      可以相對路徑讀取:classpath:path/file

      可以通配符讀取多個配置文件. path/*.properties

相當於原來配置的<properties resource="db.properties">,不過這裏可以指定了該配置文件所在的路徑

  -->

   <context:property-placeholderlocation="classpath:config/commons/*.properties"/>

  <!--配置數據源 -->

<bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<property name="url"value="${mysql.url}"></property>

<property name="driverClassName"value="${mysql.driver}"></property>

<property name="username"value="${mysql.username}"></property>

<property name="password"value="${mysql.password}"></property>

</bean>

 

<!-- 配置會話工廠

SqlSessionFactory - 接口

MyBatis提供了整合插件

-->

<bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource"ref="dataSource"></property>

<property name="mapperLocations">

<array>

這裏是讀取mapper配置文件,但是本次項目使用的是註解開發,所以說這裏配置每太大用

<value>classpath:mapper/*.xml</value>

</array>

</property>

typeAliasesPackage,它一般對應我們的實體類所在的包,這個時候會自動取對應包中不包括包名的簡單類名作爲包括包名的別名。多個package之間可以用逗號或者分號等來進行分隔。

簡單來說就是這樣原來需要寫entity.User現在配置了這裏只要寫User就好了

對應這之前的配置文件

<typeAliases>

<typeAlias type="entity.User"alias="user"></typeAlias>

<!-- package-自動掃描包中的類型,使用類名作爲別名.代替類的全命名 -->

<package name="entity"/>

</typeAliases>

 

<property name="typeAliasesPackage"value="entity"></property>

</bean>

 

       <!-- 配置MAPPER接口動態代理工廠

SSM框架整合的時候,MyBatis使用接口動態代理實現.

sqlSession.getMapper(Class);

-->

 

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<property name="sqlSessionFactoryBeanName"value="sqlSessionFactory"></property>

              <!-- 當前工廠在什麼包中掃描Mapper接口 -->

<property name="basePackage"value="mapper"></property>

 </bean>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章