SSM(Spring+SpringMVC+MyBatis)整合

目录

1、提出问题

2、解决问题

3、相关文件


1、提出问题

SSM(Spring+SpringMVC+MyBatis)的开发,MyBatis在没有与Spring和SpringMVC整合的时候,是单独使用,单独配置。

Spring和SpringMVC的整合是无缝衔接的,因为是同生态,非常顺滑甚至“无所察觉”。

MyBatis整合前存在的问题是,部分代码过于"冗余":

两个问题:

每次都要编写session工厂的代码

事务控制

解决方式:

将Session工厂交给Spring容器管理,从容器中获得执行操作的Mapper实例。

将事务的控制交给Spring容器进行声明式事务控制

2、解决问题

配置applicationContext.xml:

这里的Mapper扫描,扫的是mapper的接口,由Spring自动创建接口的实现类。

编写测试代码:

只需要传入接口,spring容器会自动注入实现类。

这一步注入,就等价于之前的:

new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")).openSession().getMapper(UserProxyDao.class);

3、相关文件

applicationContext.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
"><context:component-scan base-package="com.xzl.controller"/><!--2、加载jdbc.properties--><context:property-placeholder location="classpath:jdbc.properties"/><!--3、配置数据源对象--><bean id="dataSource_C3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="${jdbc.driver}"/><property name="jdbcUrl" value="${jdbc.url}"/><property name="user" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean><!--配置MyBatis的SqlSessionFactory--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource_C3p0"/><property name="configLocation" value="classpath:mybatis-config.xml"/></bean><!--配置Mapper扫描--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.xzl.dao"/></bean>
</beans>

mybatis-config.xml:

<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--注册类型自定义转换器--><typeHandlers><typeHandler handler="com.xzl.handle.DateTypeHandle"/></typeHandlers><!-- 注意:分页助手的插件 配置在通用mapper之前 --><plugins><plugin interceptor="com.github.pagehelper.PageHelper"><!-- 指定方言 --><property name="dialect" value="mysql"/></plugin></plugins><mappers>
<!--        <mapper resource="com/xzl/domain/mapper/UserMapper.xml"/><mapper resource="com/xzl/domain/mapper/UserDaoMapper.xml"/>--><mapper resource="com/xzl/dao/UserProxyDaoMapper.xml"/>
<!--        <mapper class="com.xzl.dao.UserProxyDao"/>-->
<!--        <package name="com.xzl.dao"/>--></mappers>
</configuration>

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>mybatis</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target></properties><dependencies><!--spring相关--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.5.RELEASE</version></dependency><!--mybatis相关--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version></dependency><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>3.7.5</version></dependency><dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifactId><version>0.9.1</version></dependency></dependencies>
</project>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/87365.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无涯教程-机器学习 - 矩阵图函数

相关性是有关两个变量之间变化的指示&#xff0c;在前面的章节中&#xff0c;无涯教程讨论了Pearson的相关系数以及相关的重要性&#xff0c;可以绘制相关矩阵以显示哪个变量相对于另一个变量具有较高或较低的相关性。 在以下示例中&#xff0c;Python脚本将为Pima印度糖尿病数…

多线程基础篇

我们平常说的一个程序&#xff0c;一个程序中有声音&#xff0c;图片&#xff0c;字幕 实际上是一个进程中有多个线程 main线程是主线程。 多核&#xff0c;多个cpu&#xff0c;多个线程&#xff0c;切换的很快 单核的话是一个cpu,某一时间只能是一个线程&#xff0c;但是因为…

法律小程序开发:让法律咨询更便捷

在现代社会&#xff0c;法律咨询服务越来越受到人们的重视和需求。为了方便用户预约法律咨询&#xff0c;很多律所都开始使用小程序来提供在线预约服务。那么&#xff0c;如何制作一款律所预约小程序呢&#xff1f; 首先&#xff0c;我们可以选择乔拓云网作为制作小程序的平台。…

Linux枚举文件目录、获取文件属性

目录 1.枚举指定路径下的文件目录2.获取文件属性stat其他方式&#xff1a;Linux获取文件属性stat()、fstat()、lstat()函数实现stat属性代码 1.枚举指定路径下的文件目录 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.…

【算法专题突破】双指针 - 盛最多水的容器(4)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 1. 题目解析 题目链接&#xff1a;11. 盛最多水的容器 - 力扣&#xff08;Leetcode&#xff09; 这道题目也不难理解&#xff0c; 两边的柱子的盛水量是根据短的那边的柱子决定的&#xff0c; 而盛水量…

ubuntu22安装和部署Kettle8.2

前提 kettle是纯java编写的etl开源工具&#xff0c;目前kettle7和kettle8都需要java8或者以上才能正常运行。所以运行kettle前先检查java环境是否正确配置&#xff0c;java版本是否是8或者以上。 kettle安装 1、创建kettle目录&#xff0c;并将kettle的zip包解压到kettle目…

MySQL - 表空间碎片整理方法

MySQL数据库中的表在进行了多次delete、update和insert后&#xff0c;表空间会出现碎片。定期进行表空间整理&#xff0c;消除碎片可以提高访问表空间的性能。 检查表空间碎片 下面这个实验用于验证进行表空间整理后对性能的影响&#xff0c;首先检查这个有100万记录表的大小&…

【业务功能篇86】微服务-springcloud-系统性能压力测试-jmeter-性能优化-JVM参数调优

系统性能压力测试 一、压力测试 压力测试是给软件不断加压&#xff0c;强制其在极限的情况下运行&#xff0c;观察它可以运行到何种程度&#xff0c;从而发现性能缺陷&#xff0c;是通过搭建与实际环境相似的测试环境&#xff0c;通过测试程序在同一时间内或某一段时间内&…

【最强最全】视频号下载助手(支持视频号视频, 直播,回放下载)

视频号下载助手支持视频号视频, 直播,回放的下载&#xff0c;本工具基于秦天sunny中间件编写&#xff0c;无需再使用其它抓包软件&#xff0c;无需再使用其它下载软件。 当然&#xff0c;你也可以右键复制抓取后的视频源再用其它下载软件下载。 使用说明 解压文件&#xff0c;…

Matlab(结构化程式和自定义函数)

目录 1.脚本编辑器 2.脚本流 2.1 控制流 2.2 关系&#xff08;逻辑&#xff09;操作符 3.脚本与函数 1.脚本编辑器 Matlab的命名规则&#xff1a; 常用功能&#xff1a; 智能缩进&#xff1a; 在写代码的时候&#xff0c;有的时候代码看起来并不是那么美观&#xff08;可读性…

华为云Stack的学习(二)

三、华为云Stack产品组件 FunsionSphere CPS 提供云平台的基础管理和业务资源&#xff08;包括计算资源和存储资源&#xff09;。采用物理服务器方式部署在管理节点。可以做集群的配置&#xff0c;扩容和运维管理。 Service OM 提供云服务的运维能力&#xff0c;采用虚拟化方…

【数据结构大全】你想要的都有,数组、链表、堆栈、二叉树、红黑树、B树、图......

目录 1.概述 2.线性结构 3.时间复杂度 4.查找算法 5.树 6.图 1.概述 博主之前写过一个完整的关于数据结构的系列文章&#xff0c;一共十三篇&#xff0c;内容包含&#xff0c;数组、链表、堆栈、队列、时间复杂度、顺序查找、二分查找、二叉树、二叉搜索树、平衡二叉树、…