三大框整合复习笔记(Spring+SpringMVC+Mybatis)

8 篇文章 0 订阅
7 篇文章 0 订阅

三大框整合复习笔记(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>  -->

然后在启动项目进行测试

配置文件方式项目代码(点击打开)
配置类方式项目代码(点击打开)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懵懵懂懂程序员

如果节省了你的时间, 请鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值