三大框整合複習筆記(Spring+SpringMVC+Mybatis)

三大框整合複習筆記(Spring+SpringMVC+Mybatis)

一: 先進行搭建spring-mybatis框架

搭建mybatis需要配置 1- 數據源, 2-編寫核心配置文件(或者使用默認就不需要配置), 3-創建SqlSessionFactoryBean, 4-創建MapperScannerConfigurer

使用配置文件方式配置或者使用配置類方式進行配置都可以!

依賴:

<packaging>jar</packaging>
<dependencies>
        <!--  mybatis依賴-start    -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>${mybatis-spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
        </dependency>
        <!--  mybatis依賴-end -->

        <!-- mybatis分頁插件依賴-start -->
        <dependency>
            <groupId>com.github.jsqlparser</groupId>
            <artifactId>jsqlparser</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
        </dependency>
        <!-- mybatis分頁插件依賴-end -->

        <!-- 數據庫依賴-start-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!-- druid連接池依賴 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <!-- 數據庫依賴-end-->
    	<!--  依賴自己的entity -->
        <dependency>
            <groupId>com.entity</groupId>
            <artifactId>entity</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
</dependencies>

編寫配置文件mybatis.xml

1,準備配置數據源

2.創建SqlSessionFactoryBean

​ 取代SqlSession創建過程,需要注入數據源

​ 配置別名包與核心配置文件

3.創建MapperScannerConfigurer

​ 取代Dao接口的包掃描

<?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:context="http://www.springframework.org/schema/c"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

   <!--  加載配置文件在spring框架中,這裏的配置文件會導入到spring  -->
    <!-- 1.配置數據源,使用alibaba的druid 配置參數 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          init-method="init" destroy-method="close">
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <!-- 初始化連接大小 -->
        <property name="initialSize" value="0" />
        <!-- 連接池最大使用連接數量 -->
        <property name="maxActive" value="20" />
        <!-- 連接池最大空閒 -->
        <!-- <property name="maxIdle" value="40" /> -->
        <!-- 連接池最小空閒 -->
        <property name="minIdle" value="0" />
        <!-- 獲取連接最大等待時間 -->
        <property name="maxWait" value="60000" />
        <property name="validationQuery" value="${validationQuery}" />
        <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒 默認是60000L -->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <!-- 配置一個連接在池中最小生存的時間,單位是毫秒 默認是1800000L -->
        <property name="minEvictableIdleTimeMillis" value="25200000" />
        <!-- 打開removeAbandoned功能 -->
        <property name="removeAbandoned" value="true" />
        <!-- 1800秒,也就是30分鐘 -->
        <property name="removeAbandonedTimeout" value="1800" />
        <!-- 關閉abanded連接時輸出錯誤日誌 -->
        <property name="logAbandoned" value="true" />
        <!-- 監控數據庫 -->
    <!-- <property name="filters" value="mergeStat,log4j" />-->
    </bean>

    <!-- 2.創建spring管理的SqlSessionFactoryBean 使用mybatis和spring整合包中的 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 數據庫連接池 -->
        <property name="dataSource" ref="dataSource" />
        <!--  配置實體類包掃描  -->
        <property name="typeAliasesPackage" value="com.zhihao.entity"/>
        <!-- 自動掃描xml目錄, 省略SqlMapConfig.xml裏的mappers手工配置 -->
        <property name="mapperLocations" value="classpath:mappers/*.xml" />
        <!-- 加載mybatis的全局配置文件或者使用默認的就不用加載 -->
        <property name="configLocation" value="classpath:SqlMapConfig.xml" />
    </bean>

    <!-- 3.創建MapperScannerConfigurer 使用mybatis和spring整合包中的-->
    <bean id="scannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--  取代Dao接口的包掃描  -->
        <property name="basePackage" value="com.zhihao.dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
</beans>

編寫核心配置文件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>
    <!-- 全局參數 -->
    <settings>
        <!-- 使全局的映射器啓用或禁用緩存。 -->
        <setting name="cacheEnabled" value="true" />

        <!-- 全局啓用或禁用延遲加載。當禁用時,所有關聯對象都會即時加載。 -->
        <setting name="lazyLoadingEnabled" value="true" />

        <!-- 當啓用時,有延遲加載屬性的對象在被調用時將會完全加載任意屬性。否則,每種屬性將會按需要加載。 -->
        <setting name="aggressiveLazyLoading" value="true" />

        <!-- 是否允許單條sql 返回多個數據集 (取決於驅動的兼容性) default:true -->
        <setting name="multipleResultSetsEnabled" value="true" />

        <!-- 是否可以使用列的別名 (取決於驅動的兼容性) default:true -->
        <setting name="useColumnLabel" value="true" />

        <!-- 允許JDBC 生成主鍵。需要驅動器支持。如果設爲了true,這個設置將強制使用被生成的主鍵,有一些驅動器不兼容不過仍然可以執行。 default:false -->
        <setting name="useGeneratedKeys" value="false" />

        <!-- 指定 MyBatis 如何自動映射 數據基表的列 NONE:不隱射 PARTIAL:部分 FULL:全部 -->
        <setting name="autoMappingBehavior" value="PARTIAL" />

        <!-- 這是默認的執行類型 (SIMPLE: 簡單; REUSE: 執行器可能重複使用prepared statements語句;BATCH:
            執行器可以重複執行語句和批量更新) -->
        <setting name="defaultExecutorType" value="SIMPLE" />

        <!-- 使用駝峯命名法轉換字段。 -->
        <setting name="mapUnderscoreToCamelCase" value="true" />

        <!-- 設置本地緩存範圍 session:就會有數據的共享 statement:語句範圍 (這樣就不會有數據的共享 ) defalut:session -->
        <setting name="localCacheScope" value="SESSION" />

        <!-- 設置但JDBC類型爲空時,某些驅動程序 要指定值,default:OTHER,插入空值時不需要指定類型 -->
        <setting name="jdbcTypeForNull" value="NULL" />
    </settings>

    <!-- 分頁插件   -->
    <plugins>
        <!-- com.github.pagehelper爲PageHelper類所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <property name="dialect" value="mysql"/>
            <!-- 設置爲true時,如果pageSize=0或者RowBounds.limit = 0就會查詢出全部的結果 -->
            <!-- (相當於沒有執行分頁查詢,但是返回結果仍然是Page類型)-->
            <property name="pageSizeZero" value="true"/>
            <!-- 3.3.0版本可用 - 分頁參數合理化,默認false禁用 -->
            <!-- 啓用合理化時,如果pageNum<1會查詢第一頁,如果pageNum>pages會查詢最後一頁 -->
            <!-- 禁用合理化時,如果pageNum<1或pageNum>pages會返回空數據 -->
            <property name="reasonable" value="true"/>
        </plugin>
    </plugins>
</configuration>

db-config.properties數據源配置信息

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
validationQuery=SELECT 1

com.zhihao.dao包下的User接口

public interface UserMapper {

    /** 
     *  分頁查詢全部
     *
     * @return java.util.List<com.zhihao.entity.User> 
     * @author: zhihao
     * @date: 7/3/2020 
     */
    List<User> findAll();
}

resources目錄下的mappers包的映射配置文件UserMapper.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhihao.dao.UserMapper">
    <select id="findAll" resultType="User">
        select * from ums_admin
    </select>
</mapper>

到此spring-mybatis框架配置完成

二: 進行搭建Spring框架

搭建Spring 需要配置 1-包掃描, 2-數據源, 3-事務管理器, 4-事務管理規則(聲明式事務傳播特性,使用默認可以不寫), 5.開啓事務註解驅動(或者使用xml事務配置方式)

使用配置文件方式配置或者使用配置類方式進行配置都可以!

依賴:

<packaging>jar</packaging>
<dependencies>
    <!-- Spring依賴-start-->
    <!-- spring-context包含了core,beans,aop  -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
    </dependency>
    <!--  spring依賴-end          -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
    <!-- 依賴自己的mybatis框架   -->
    <dependency>
      <artifactId>mybatis</artifactId>
      <groupId>com.mybatis</groupId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

配置文件spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="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/context
        http://www.springframework.org/schema/context/spring-context.xsd">
    
<!-- 加載配置屬性文件 -->
    <context:property-placeholder ignore-unresolvable="true" location="classpath:db-config.properties" />
    
    <!--  1.配置包掃描,掃描到service註解自動註冊bean到框架,並排除Controller註解  -->
    <context:component-scan base-package="com.zhihao" >
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!--2. 配置數據源  導入mybatis配置好數據源的配置文件使用-->
    <import resource="classpath*:mybatis.xml" />

    <!-- 3. 配置事務管理器  jdbc.datasource包下的 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- 4. 事務規則管理(事務傳播特性,使用的都是默認的可以省略不寫)-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <!--管理規則屬性配置-->
        <tx:attributes>
            <tx:method name="*" propagation="REQUIRED" isolation="DEFAULT" rollback-for="java.lang.Exception"/>
        </tx:attributes>
    </tx:advice>

    <!-- 5. 配置 Annotation 驅動,掃描@Transactional註解的類定義事務   -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <!-- xml配置方式   -->
<!--    <aop:config>
      &lt;!&ndash;指定切點  指定包下所有類所有方法&ndash;&gt;
       <aop:pointcut id="transPointcut" expression="execution(* com.zhihao.service.impl.*.*(..))" />
       &lt;!&ndash;配置通知&ndash;&gt;
      <aop:advisor advice-ref="txAdvice" pointcut-ref="transPointcut"/>
   </aop:config>            -->
</beans>

com.zhihao.service.UserService的接口與impl包下的實現類

public interface UserService {
    PageInfo<User> findAll();
}

--------------------------------------------
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    
    @Transactional
    @Override
    public PageInfo<User> findAll() {
        //使用分頁
        PageHelper.startPage(1, 10);
        List<User> all = userMapper.findAll();
        return new PageInfo<>(all);
    }
}    

到此spring框架配置完成

三: 進行搭建Spring-mvc框架

搭建Spring-mvc 1-需要配置web.xml的核心前端控制器與加載容器和過濾器解決字符編碼, 2-需要配置Spring-mvc.xml配置文件,裏面需要配置, 1-包掃描, 2-啓用註解驅動, 3-靜態資源過濾, 4-視圖解析器,

依賴:

<packaging>war</packaging>
    <dependencies>
        <!--  springMVC依賴-start -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
        </dependency>
        <!--  springMVC依賴-end -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>

        <!--  集中式集成所以需要依賴service,沒有使用到dubbo分佈式  -->
        <dependency>
            <groupId>com.zhihao</groupId>
            <artifactId>spring-service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

配置webapp/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <!--  1. 配置字符編碼過濾器  -->
    <filter>
        <description>字符編碼過濾器</description>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <description>指定編碼格式</description>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <!-- 配置攔截路徑所有-->
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- 2.配置核心前端控制器與加載容器   -->
    <servlet>
        <description>核心前端控制器</description>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <description>配置Servlet的初始化參數,讀取spring-mvc的配置文件,創建spring容器</description>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:spring-mvc.xml</param-value>
        </init-param>
        <!-- 優先級 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--  如果沒有合併容器則需要監聽器來加載spring容器  -->
    <listener>
        <description>監聽SpringMvc容器加載</description>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:spring.xml</param-value>
    </context-param>
</web-app>

編寫spring-mvc.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: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.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">
    <!-- 1. 包掃描  只掃描Controller -->
    <context:component-scan base-package="com.zhihao">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <!-- 2.靜態資源文件的訪問    -->
    <mvc:default-servlet-handler/>
    <!-- 3. 視圖解析器  -->
    <bean
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/" />
        <property name="suffix" value=".jsp" />
    </bean>
    <!--4.註解驅動 對SpringMVC註解的支持-->
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <!--啓用fastjson -->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8" />
            </bean>
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
</beans>

com.zhihao.controller.UserController:

/**
 * @Author: zhihao
 * @Date: 7/3/2020 下午 9:02
 * @Description: user控制層
 * @Versions 1.0
 **/
@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/findAll",method = RequestMethod.GET)
    public String findAll(){
        List<User> all = userService.findAll();
        System.out.println(all);
        return "index";
    }
}

webapp/WEB-INF/view/index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>測試</title>
</head>
<body>
    <h1>成功訪問</h1>
</body>
</html>

到此spring-mvc配置完成, 啓動項目進行測試

擴展資料:

依賴的版本:
<!-- 集中定義依賴版本號 -->
    <properties>
        <junit.version>4.12</junit.version>
        <spring.version>5.2.3.RELEASE</spring.version>
        <mybatis.version>5.2.3.RELEASE</mybatis.version>
        <mybatis-spring.version>2.0.3</mybatis-spring.version>
        <mybatis.version>3.4.6</mybatis.version>
        <mysql.version>5.1.48</mysql.version>
        <jsqlparser.version>1.4</jsqlparser.version>
        <pagehelper.version>4.1.6</pagehelper.version>
        <druid.version>1.1.21</druid.version>
        <slf4j.version>1.7.30</slf4j.version>
        <servlet-api.version>2.5</servlet-api.version>
        <jsp-api.version>2.2</jsp-api.version>
        <!-- environment setting -->
        <jdk.version>1.8</jdk.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <downloadSources>true</downloadSources>
    </properties>
容器合併操作:

1-在spring-mvc.xml中導入spring.xml配置文件

<import resource="classpath*:spring.xml"/>

2-去掉spring-mvc中web.xml的監聽器

<!--<listener>
        <description>監聽SpringMvc容器加載</description>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:spring.xml</param-value>
    </context-param>  -->

然後在啓動項目進行測試

配置文件方式項目代碼(點擊打開)
配置類方式項目代碼(點擊打開)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章