三大框整合複習筆記(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>
<!–指定切點 指定包下所有類所有方法–>
<aop:pointcut id="transPointcut" expression="execution(* com.zhihao.service.impl.*.*(..))" />
<!–配置通知–>
<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> -->
然後在啓動項目進行測試