当前位置: 首页 > news >正文

Spring 学习(九)整合 Mybatis

1. 整合 Mybatis

  • 步骤

    • 导入相关 jar 包

      <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.9.RELEASE</version></dependency><!-- spring 操作数据库,需要一个 Spring-jdbc --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.9.RELEASE</version></dependency><!-- 织入包 --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.13</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.2</version></dependency>
      </dependencies>
      
    • 编写配置文件

    • 测试

1.1 回顾 Mybatis

  • 导入依赖

  • 编写实体类

    @Data
    public class User {private int id;private String name;private String pw;
    }
    
  • 编写核心配置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration><typeAliases><package name="com.why.pojo"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="981030"/></dataSource></environment></environments><mappers><mapper class="com.why.mapper.UserMapper"/></mappers></configuration>
    
  • 编写接口

    public interface UserMapper {public List<User> selectUser();
    }
    
  • 编写 Mapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.why.mapper.UserMapper"><select id="selectUser" resultType="user">select * from user ;</select></mapper>
    
  • 开启资源过滤

    <build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources>
    </build>
    
  • 测试

    public class MyTest {@Testpublic void test() throws IOException {String resources = "mybatis-config.xml";InputStream in = Resources.getResourceAsStream(resources);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);SqlSession sqlSession = sqlSessionFactory.openSession(true);UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.selectUser();for (User user : users) {System.out.println(user);}}
    }
    

1.2 什么是 MyBatis-Spring

MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。 最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。

1.3 知识基础

在开始使用 MyBatis-Spring 之前,你需要先熟悉 Spring 和 MyBatis 这两个框架和有关它们的术语。这很重要——因为本手册中不会提供二者的基本内容,安装和配置教程。

MyBatis-Spring 需要以下版本:

MyBatis-SpringMyBatisSpring FrameworkSpring BatchJava
2.03.5+5.0+4.0+Java 8+
1.33.4+3.2.2+2.1+Java 6+

12.4 整合方式一

  • 添加数据源

    在这里插入图片描述

  • 配置数据源(spring-dao.xml)

    <!--dataSource: 使用 Spring 的数据源替换 Mybatis 的配置此处使用 Spring 提供的 JDBC (spring-jdbc)还可以使用 C3p0 / Dbcp / Druid
    -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="981030"/>
    </bean>
    
  • 创建 SqlSessionFactor (spring-dao.xml)

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!-- 绑定 Mybatis 配置文件 --><property name="configLocation" value="classpath:mybatis-config.xml"/><property name="mapperLocations" value="classpath:com/why/mapper/*.xml"/>
    </bean>
    
  • 获取 SqlSessionTemplate / SqlSession (spring-dao.xml)

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><!-- 因为没有 set 方法,只能使用构造器注入 --><constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>
    
  • 创建接口的实现类【用于执行Mybatis的操作】

    public class UserMapperImpl implements UserMapper {// 使用 sqlSessionTemplate 替换 sqlSession 操作Mybatisprivate SqlSessionTemplate sqlSession;public void setSqlSession(SqlSessionTemplate sqlSession) {this.sqlSession = sqlSession;}public List<User> selectUser() {UserMapper mapper = sqlSession.getMapper(UserMapper.class);return mapper.selectUser();}
    }
    
  • 将实现类注入到 Spring (applicationContext.xml)

    <bean id="userMapper" class="com.why.mapper.UserMapperImpl"><property name="sqlSession" ref="sqlSession"/>
    </bean>
    
  • 测试

    public class MyTest {@Testpublic void test() throws IOException {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");UserMapper userMapper = context.getBean("userMapper", UserMapper.class);List<User> users = userMapper.selectUser();for (User user : users) {System.out.println(user);}}
    }
    
  • 目录结构

    在这里插入图片描述

12.5 整合方式二

  • 让实现类继承 SqlSessionDaoSupport ,此时实现类的方法中可以直接使用 getSqlSession() 方法来获取 SqlSession ,本质还是第一种方法。

    public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper {public List<User> selectUser() {return getSqlSession().getMapper(UserMapper.class).selectUser();}
    }
    
  • XML 文件中不需要配置和注入 SqlSession 了,但是需要配置 SqlSessionFactorySqlSessionDaoSupport 需要用 SqlSessionFactory 来获取 SqlSession。

    <bean id="userMapper" class="com.why.mapper.UserMapperImpl"><property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>
    

相关文章:

Spring 学习(九)整合 Mybatis

1. 整合 Mybatis 步骤 导入相关 jar 包 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency>…...

Android AMS——概述(一)

一、AMS简介 Android AMS(Activity Manager Service)是 Android 操作系统中的一个核心组件,它是 Android 应用程序的管理器,负责管理应用的生命周期、任务栈、进程和活动之间的切换等。AMS在 Android 系统中起着至关重要的作用,确保应用程序能够正确运行并与用户进行交互。…...

DDoS攻击和CC攻击

DDoS是&#xff08;Distributed Denial of Service&#xff0c;分布式拒绝服务&#xff09;攻击和CC&#xff08;Challenge Collapsar&#xff0c;挑战黑洞) 攻击是两种常见且具有破坏性的攻击类型&#xff0c;它们可以对网络基础设施和在线业务造成重大损害。为了抵御这些攻击…...

Lnmp架构之mysql数据库实战2

4、mysql组复制集群 一主多从的请求通常是读的请求高于写 &#xff0c;但是如果写的请求很高&#xff0c;要求每个节点都可以进行读写&#xff0c;这时分布式必须通过&#xff08;多组模式&#xff09;集群的方式进行横向扩容。 组复制对节点的数据一致性要求非常高&#xff…...

【软件工程_设计模式Designer Method】三类?23种常用设计模式?-简介-作业一

设计模式&#xff1f;what&#xff1f; what is Design pattern&#xff1f;&#xff1f;&#xff1f; 是一套反复被使用的、经过分类编目的、家喻户晓的、代码设计经验的总结。 它是 软件工程的一块基石。 “ 设计模式是软件工程中一种通用的&#xff0c;可复用的一种解决方案…...

信号相关的函数

#include <sys/types.h> #include <signal.h> int kill(pid_t pid, int sig); -功能&#xff1a;给任何进程pid&#xff0c;发送任何信号sig 参数&#xff1a; pid: >0:将信号发送给指定的进程 0&#xff1a;将信号发送给当前的进程组 -1&#xff1a;将信号发送…...

matlab实现杨氏双缝干涉实验可视化界面

关于杨氏双缝干涉实验的条纹光强理论推导和matlab绘图可以参考下面的链接&#xff1a;杨氏双缝干涉实验matlab实现 接下来利用GUI实现可视化界面。 一、GUI GUIDE简介 1、在命令行窗口输入小写的guide可以自动弹出fig窗口。 2、界面的左侧是常用的工具&#xff0c;鼠标悬停…...

【SQL】统一训练平台数据库实践--20230927

储存过程vlookup_peopledata_csodtraining 默认导出用今天批次的数据进行join on&#xff0c;先删除过渡表的资料&#xff0c;再将查询结果放在过渡表中。 BEGINDECLARE startdate varchar(50);SET startdate date_format(NOW(),%Y%m%d);DELETE FROM season.csod_data2;INSE…...

全国职业技能大赛云计算赛项---Linux系统调优案例

全国职业技能大赛云计算赛项---Linux系统调优案例 Linux系统调优案例&#xff1a;OpenStack平台调度策略优化:OpenStack平台镜像优化&#xff1a;OpenStack平台I/O优化&#xff1a;OpenStack 平台内存优化&#xff1a;Linux 系统调优-防止SYN 攻击&#xff1a; Linux系统调优案…...

Docker部署ZooKeeper分布式协调服务

1、准备工作 docker pull zookeeper:3.6.3 Pwd"/data/software/zookeeper" mkdir -p ${Pwd}/{logs,data,conf}2、创建TEST容器&#xff0c;将conf目录COPY出来&#xff0c;在映射进去&#xff0c;方便后续维护管理&#xff01; docker run -itd --name zookeeper z…...

算法 出现次数超过一半的数字-(哈希+摩尔投票)

牛客网: BM51 题目: 数组中只有1个数字出现次数超过一半&#xff0c;找出这个数字 思路: 投票计数vote0, 遍历数组&#xff0c;vote为0时&#xff0c;num赋值为当前值, num与当前值相等时&#xff0c;vote增加, 否则vote减小&#xff0c;只有1个数字出现次数超过一半&#xf…...

如何搭建游戏平台?

搭建游戏平台是一个复杂的任务&#xff0c;涉及多个方面的工作。下面是一些关键步骤和注意事项&#xff0c;以帮助您搭建游戏平台&#xff1a; 平台开发&#xff1a;开发游戏平台的关键部分&#xff0c;包括网站或应用程序的开发、数据库设计、用户界面设计、游戏上传和管理工具…...

【华为OD机试python】数字反转打印【2023 B卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述: 小华是个很有对数字很敏感的小朋友,他觉得数字的不同排列方式有特殊美感。 某天,小华突发奇想,如果数字多行排列,第一行1个数,第二行2个,第三行3个, 即第n行有n个数字,并且奇数行…...

MATLAB配置编译器(包括vs和mingw)

版本&#xff1a;matlab2022b&#xff0c;VS2022&#xff0c;mingw&#xff1a;8.1.0 之前安装好了matlab和vs后&#xff0c;在matlab的命令行输入 mex -setup时&#xff0c;自动找到并且配置好了vs编译器&#xff0c;可能是应为二者安装在了同一个根目录下&#xff0c;比如都在…...

基本网络协议

TCP 协议 TCP 协议是一种传输控制协议&#xff0c;是一种面向连接的传输层协议,它提供高可靠性的通信高可靠性:数据无错误,数据无丢失,数据无失序,数据无重复到达。 TCP 协议头部结构 下图是 TCP 协议的头部结构&#xff0c;如图&#xff1a; 16 位端口号&#xff1a; 告知主机…...

Tungsten Fabric Rabbitmq故障处理

开源SDN软件Tungsten Fabric&#xff08;以下简称TF&#xff09;有时莫名其妙出现服务宕机情况。 使用TF自带工具contrail-status排查&#xff0c;多数时候是rabbitmq出现宕机&#xff0c;或者某个组件连接rabbitmq出错。 本次仅排查、处理rabbitmq问题。 1. 查rabbitmq日志发…...

sqlServer 检测慢 sql

部署监控: 部署慢SQL与死锁跟踪 Skip to end of metadata 仅SQL Server 2012及以上版本可用. 执行前请确保路径正确! 慢SQL定义:执行时间超过0.5秒即定义为慢SQL,会被捕获。 SSMS中新建查询窗口,将下面代码贴上后执行。 该代码会新建一个[YX_Monitor]库,库中包含[Deadloc…...

Mac电脑音视频播放器: Infuse for Mac中文

Infuse是一款流行的多媒体播放器应用程序&#xff0c;适用于iOS、tvOS和macOS平台。它由Firecore开发&#xff0c;旨在提供出色的媒体播放体验&#xff0c;并支持广泛的视频和音频格式。 以下是Infuse的一些主要功能和特点&#xff1a; 多媒体格式支持&#xff1a;Infuse支持…...

优化积分商城页面的8个实用技巧

积分商城是私域营销的强大工具&#xff0c;能够帮助企业吸引并留住客户&#xff0c;提高销售和客户忠诚度。然而&#xff0c;为了确保积分商城发挥最大效益&#xff0c;需要对其页面进行优化&#xff0c;以提供用户友好的体验。本文将介绍8个实用的技巧&#xff0c;帮助您优化积…...

Python机器学习实战-特征重要性分析方法(2):内置特征重要性(附源码和实现效果)

实现功能 一些模型&#xff0c;如线性回归和随机森林&#xff0c;可以直接输出特征重要性分数。这些显示了每个特征对最终预测的贡献。 实现代码 from sklearn.datasets import load_breast_cancer from sklearn.ensemble import RandomForestClassifier import matplotlib.…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】&#xff0c;这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...