1. 程式人生 > >spring-springmvc-mybatis整合

spring-springmvc-mybatis整合

ESS patch package 建數據庫 set build actor 默認 表示

---恢復內容開始---

前言:

  整合這三個框架的目的:
    因為mybatis不支持事務處理,為了滿足這一需求因此需要整合spring-mybatis。

  整合中的註意事項:

    mybatis框架默認是不可以調用spring框架的數據源的,因此我們必須配置數據源用於創建會話工廠

    mybatis是通過映射接口創建對象的,但是spring不支持接口創建對象,mybati-spring中提供了解決方案

    整合的目的就是為了支持事務代理,因此必須指定事務代理的數據源

配置流程:

  1、配置springmvc框架

  2、配置mybatis框架

  3、兩個框架的整合

具體步驟

  配置springmvc:

  註意事項:springmvc是實現前端和後臺代碼分離的框架,構建的是一個web項目。因此配置流程應該從請求開始。為了能夠實現一個請求對應一個方法,必須在web.xml中配置一個核心控制器,攔截所有請求。攔截請求後如何實現請求和方法一一對應?通過映射路徑實現。

    配置流程:

      創建一個請求傳到web項目入口web.xml。

      在web.xml中配置核心控制器攔截所有請求

      創建業務控制器(controller層)

      配置請求與方法的映射路徑

      返回前端頁面

    實現代碼:

      請求創建:

<form action="${pageContext.request.contextPath }/add" method="get">
    姓名:<input type="text" name="name" placeholder="姓名"><br>
    學號:<input type="text" name="num" placeholder="學號"><br>
    <input type="submit" value="提交">
</form>

      配置核心控制器:

 <servlet>
      <servlet-name>dispatcherServlet</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:spring-*.xml</param-value>
      </init-param>
  </servlet>
  <servlet-mapping>
      <servlet-name>dispatcherServlet</servlet-name>
      <!-- 這樣會攔截靜態資源,到時要放開靜態資源 -->
      <url-pattern>/</url-pattern>
  </servlet-mapping>

      編程業務控制器(表示層代碼)以及設置映射路徑和返回頁面

@Controller
public class StudentController {
    @RequestMapping(value="/add")
    public String add(String name,String num,HttpServletRequest request) {
        System.out.println(name);
        request.setAttribute("name", name);
        return "/show.jsp";
    }
}

mybatis配置

  配置流程:

    創建配置總文件

    獲得數據庫操作對象

    創建映射接口

    在配置總文件中指定映射接口

  具體實現步驟

    創建總配置文件:

      聲明:配置總文件是用於配置全局設置和參數的一個文件,需要讀取配置總文件的參數來創建數據庫操作對象,

         因此配置總文件必須包含連接數據庫的一些必要屬性。

      實現代碼:

<!-- 配置連接信息 -->
    <environments default="sms">
        <environment id="sms">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="url" value="jdbc:mysql://localhost:3306/sms"/>
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>
    </environments>

      獲得數據庫操作對象

        實現流程說明:

          1、使用Resources類以流的方式讀取配置文件得到一個流對象

          2、創建會話工廠構建類對象

          3、使用會話工廠構建類對象創建會話工廠

          4、使用會話工廠獲得操作對象

        實現代碼:

public class Config {
    public SqlSession getsession() throws IOException {
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sessionFactory = builder.build(reader);
        SqlSession session = sessionFactory.openSession();
        return session;
    }
}

      創建映射接口:

public interface StudentMapper {
    @Select("select * from t_student where id = #{id}")
    public Student select(int id);
}

      在總配置文件中指定映射接口:

<!-- 指定映射接口 -->
    <mappers>
        <mapper class="my.mapper.StudentMapper"/>
    </mappers>

springmvc-mybatis整合

    註意事項:spring整合mybatis需要一個整合包(spring-mybatis),需要springJDBC、dbcp2、spring-tx四個包

         mybatis框架默認是不可以調用spring框架的數據源的,因此我們必須配置數據源用於創建會話工廠

         mybatis是通過映射接口創建對象的,但是spring不支持接口創建對象,mybati-spring中提供了解決方案

         整合的目的就是為了支持事務代理,因此必須指定事務代理的數據源

    配置流程:

        創建數據源(為了使數據源具有事務代理能力,需要重新指定數據源)

        創建支持spring數據源的會話工廠

        掃描映射接口的動態對象到spring容器中

        配置事務代理

    具體實現:

      說明:spring整合其他框架只需要在spring配置文件中增加<bean>即可,因此以上步驟均在在spring配置文件中配置

        創建數據源:

  <bean name="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
        <property name="url" value="jdbc:mysql://localhost:3306/sms"></property>
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="username" value="root"></property>
        <property name="password" value="1234"></property>
    </bean>

        創建支持spring數據源的會話工廠:

  <!-- 通過整合包的類,獲得會話工廠 -->
    <bean name="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 指定使用的數據源 -->
        <property name="dataSource" ref="dataSource"></property>
        <!-- 相當於mybatis總配置文件中的settings 標簽-->
        <property name="configuration">
            <bean  class="org.apache.ibatis.session.Configuration">
            <!-- 支持駝峰命名法 -->
                <property name="mapUnderscoreToCamelCase" value="true"></property>
            </bean>
        </property>
    </bean>

        掃描映射接口的動態對象到spring容器中:

    <!--獲得映射接口的對象,將其註入到spring容器中
        註意:mybatis是通過接口創建對象的,但是spring不支持痛過接口創建對象,因此
                mybatis提供了一個解決方案  -->
    <bean  class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 指定會話工廠,用於創建映射接口動態對象 -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
        <!-- 指定映射接口包的位置 -->
        <property name="basePackage" value="my.mapper"></property>
        <!-- 指定使用指定註解才創建對象並註入到spring容器中 -->
        <property name="annotationClass" value="org.mybatis.spring.annotation.MapperScan"></property>
    </bean>

        配置事務代理:

<!-- 配置事務代理 -->
    <bean name="tx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 指定數據源 -->
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <tx:annotation-driven transaction-manager="tx"/>

      最後刪除mybatis總配置文件和獲取操作對象的類即完成了ssm框架的配置。

          

      

---恢復內容結束---

spring-springmvc-mybatis整合