三大框整合复习笔记(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> -->
然后在启动项目进行测试