Spring如何整合MyBatis框架?使用XML及java类的配置方式

news2024/9/28 9:23:03

前言

 Spring文章链接:  从头到尾Spring概念,家族,核心技术使用,事务这一篇就够了!!!_千小半的博客-CSDN博客_spring最新技术

mybatis文章链接: MyBatis框架入门(含实例)_mybatis sqlsession创建和关闭_千小半的博客-CSDN博客

一、Spring整合Mybatis框架思路

 用过Mybatis的伙伴们因该知道当我们去使用Mybatis去进行数据访问时,不仅有三个重要步骤,还有三个核心对象,这里简单重温一下Spring和Mybatis:

MyBatis使用步骤:

1.创建MybatisConfig 配置文件

2.创建SQL映射文件

3.读取配置文件,获取映射器调用方法测试

MyBatis的三个核心对象:

1.SqlSessionFactoryBuider :创建SqlSessionFactory

2.SqlSessionFactory : 创建SqlSession

3. SqlSession :获取mapper映射器并调用方法

Spring IOC容器和AOP:

spring 将所有的对象都交由spring/IOC容器管理,被管理的对象都称为bean。这些bean都在spring配置文件中进行配置。

好了,小半列出上面的温习及步骤,友友们是不是想起来了Mybatis呢?那么我们最终要让spring和mybatis进行一个整合,这两个框架都有配置文件,我们该怎么把他们合二为一呢,请看下图:

IOC容器也就是spring配置文件需要配置的属性和扫描的信息:

1.SqlSessionFactoryBean : 在mybtais-spring的整合包中,可以生成一个SqlSessionFactory,而前者可以创建出SqlSession,也就自然通过mapper映射器可以调用指定方法,通过该类还可以对Mybtais进行配置别名等。

2.数据源: 通过dbcp包提供的BasicDataSource类进行数据源的一个配置.

3.数据映射器类:使用XML配置文件时,需要扫描mapper映射器,反之,使用注解扫描。

4. 事务管理器 : 在spring容器中,开启事务控制需要先通过springFramework.jdbc包下的DataSourceTransactionManager类​​​​​​​配置事务管理器,它控制着事务的开关。

以上的4个类就是需要我们在spring整合mybatis配置的bean,关于整合的配置,以下有XML和java类配置的方式

二、XML整合Mybatis

1.数据源的外部引入

数据源我们都要配置url,username等连接信息,要想达到数据源的复用性,不想每回都重新配置一遍,就可以通过properties属性文件外部引入数据源。

db.properties文件

   注意:使用spring引入外部属性文件时,前缀必须用jdbc标记。

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.username=root
jdbc.password=root
jdbc.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai

- spring配置XML文件

   注意: 要想识别数据源,需要先使用以下标签扫描该数据源文件的路径

<context:property-placeholder location="db.properties"/>

开始配置!!!!

  MapperFactoryBean类:能够以配置的方式生成映射器的实现类,并注入给业务组件(类型只能是接口类型)

    <!--创建bean-->
    <bean id="studentService" class="service.StudentServiceImpl"/>
     
    <!--利用MapperFactoryBean类扫描mapper接口-->
     <bean id="factoryBean" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="mapperInterface" value="dao.StudentMapper"/>
    </bean>
    

    <!--扫描properties外部属性文件-->
    <context:property-placeholder location="db.properties"/>

 
    <!--1.配置数据源-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
          p:driverClassName="${jdbc.driver}"
          p:username="${jdbc.username}"
          p:password="${jdbc.username}"
          p:url="${jdbc.url}"></bean>


     <!--2.创建SqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--引用数据源-->
       <property name="dataSource" ref="dataSource"/>
        <!--设置实体类别名-->
        <property name="typeAliasesPackage" value="entity"/>
        <!--设置映射-->
        <property name="mapperLocations" value="dao/*.xml"/>
        <!--设置映射文件路径-->
        <property name="configLocation" value="mybatis-config.xml"/>
    </bean>

      <!--3.设置事务管理器-->
    <bean id="transactionManager" 
     class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--引入数据源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>

- 启动Spring容器
​​​

//测试类

public class Test{

    public static void main(String[] args) {
        //读取spring配置文件

       ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");
      
       StudentService service=context.getBean("bean名称",StudentService.class);
    
       service.方法();

    }

}

​​​​​​三、java类整合Mybatis

使用XML不仅可以配置整合文件,java类也同理。

@Configuration  //描述该类是一个配置类
@Component      //注册bean
@ComponentScan(basePackages = {"dao", "service"})   //扫描bean
@MapperScan(value = "dao")    //扫描mapper接口注入映射器
public class ApplicationConfig {


    /**
     * 配置数据源
     */
    @Bean
    public BasicDataSource getDataSource() {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC");
        return dataSource;
    }


    /**
     * 创建SqlSessioinFactory
     */

    @Bean
   public SqlSessionFactory sqlSessionFactory()
    {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(getDataSource());
        PathMatchingResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver();
        try {
            Resource[] resources = patternResolver.getResources("dao/*.xml");
            factoryBean.setMapperLocations(resources);
            ClassPathResource classPathResource = new ClassPathResource("mybatisConfig.xml");
            factoryBean.setConfigLocation(classPathResource);
            //设置别名
            factoryBean.setTypeAliasesPackage("entity");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        try {
            return  factoryBean.getObject();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }


    /**
     * 配置事务管理器
     */
    @Bean
    public DataSourceTransactionManager transactionManager(){
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(getDataSource());
        return  transactionManager;
    }

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文华财经期货日内多空金叉波段彩带幅图指标公式,震荡区间决策预警信号指标公式

​期货指标公式不是交易的圣杯&#xff0c;也不是期货亏损后的救命稻草。请理性运用指标公式&#xff0c;独立决策&#xff0c;盈亏自负。 1.在期货交易中&#xff0c;大部分品种&#xff0c;大部分时间都是在走一个趋势行情。即使是形态内的震荡行情&#xff0c;也是在走一个…

redis 实现延迟队列及其他实现延迟队列

1、 前言 1.1、什么是延迟队列&#xff1f; 延时队列相比于普通队列最大的区别就体现在其延时的属性上&#xff0c;普通队列的元素是先进先出&#xff0c;按入队顺序进行处理&#xff0c;而延时队列中的元素在入队时会指定一个延迟时间&#xff0c;表示其希望能够在经过该指定…

虹科新品|HK-Edgility敏捷边缘计算套件

敏捷、经济高效且易于管理大规模IT服务基础设施 业务动态和数字化转型将业务资源和业务用户都推到了传统 IT 边界之外。业务资源和服务被虚拟化并迁移到云端。随着数字工作空间的发展和业务用户需要随时随地访问业务资源&#xff0c;越来越多的业务资源被推向网络边缘。 由于…

研报精选230216

目录 【行业230216东吴证券】环保行业月报&#xff1a;2023M1环卫新能源渗透率大增至11.91%&#xff0c;上海地区渗透率高达77%【行业230216国元证券】国元新食饮&#xff1a;一图君&#xff1a;22年白酒产量&#xff1a;同降6.2%【行业230216浙商证券】农林牧渔点评报告&#…

认识数据库

今天为大家带来数据库的知识 &#x1f680;1.什么是数据库 &#x1f680;2.数据库的分类 &#x1f680;3.数据库的存储 1.首先来聊一聊MySQL数据库的定义 已经学习了数据结构 数据结构是一门研究数据如何存储的学科&#xff0c;当数据是少量的时候&#xff0c;用数据结构…

在vue2使用百度脑图的kityminder-core进行二次开发思维导图,给节点绑定数据后添加新的图标

需求说明&#xff1a;在给某个节点绑定文件数据后&#xff0c;用户并不能一眼看出哪个节点上绑定了数据&#xff0c;因此需要在绑定文件数据后给节点上加一个图标用于标识。 添加图标 1、在kityminder-core/src/module/file.js文件中添加代码 &#xff08;file.js文件如何添加…

ChatGPT国内镜像站初体验:聊天、Python代码生成等

ChatGPT国内镜像站试用&#xff0c;聊天、Python代码生成。 (本文获得CSDN质量评分【92】)【学习的细节是欢悦的历程】Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简单…… …

基于离散时间频率增益传感器的P级至M级PMU模型的实现(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…

[足式机器人]Part3机构运动微分几何学分析与综合Ch01-4 平面运动微分几何学——【读书笔记】

本文仅供学习使用 本文参考&#xff1a; 《机构运动微分几何学分析与综合》-王德伦、汪伟 《微分几何》吴大任 Ch01-4 平面运动微分几何学1.2.3-2 点轨迹的Euler-Savary公式1.2.4 高阶曲率理论1.2.3-2 点轨迹的Euler-Savary公式 例1-7&#xff1a; 平面曲柄摇杆机构的 Euler-Sa…

VS中scanf为什么会报错

简单来讲&#xff0c;scanf会强行输入内容&#xff0c;所以是不安全的。 我们来看这样的例子&#xff1a; #include <iostream> using namespace std;int main() {char demo[3];scanf("%s", demo);return 0; }对于以上代码&#xff0c;当我们输入字符不超过3时…

联合身份验证与Cognito

Hello大家好&#xff0c;我们接下来讨论AWS联合身份验证的内容。 AWS联合身份验证 对于考试&#xff0c;联合身份验证部分是一块非常重要的内容。那什么是联合身份验证&#xff0c;它是做什么用的呢&#xff1f; 联合身份验证&#xff0c;是用来允许AWS外部用户&#xff0c;如…

vue2中使用 Tinymce 5.1.0使用过程举例

一、背景 vue-cli 版本 &#xff1a;vue/cli 4.5.15 查看脚手架版本的方法&#xff1a;Win R 打开运行输入&#xff1a; cmd &#xff0c;打开控制台输入 vue -V vue 版本&#xff1a;"vue": "^2.6.11", 二、安装 Tinymce 1、 --no-fund 是因为提示你…

C语言(表达式,语句和副作用和序列号)

目录 一.表达式 二.语句 三.副作用和序列点 一.表达式 由运算符和运算对象组合。最简单得表达式是一个单独的运算对象&#xff0c;以次为基础可以建立复杂的表达式 4 421 a*&#xff08;b c/d)/20 运算对象可以是常量&#xff0c;变量或二者得组合。一些表达式由子表达…

python--石头剪刀布游戏(列表)

本使用了下面几篇文章的知识&#xff1a; python(8)--列表初阶使用_码银的博客-CSDN博客 python(7)--if语句_码银的博客-CSDN博客 一、学习目标 利用列表实现石头剪刀布游戏 二、实验环境 Pycharm社区版、win11 三、代码 先贴代码&#xff0c;有需要的直接拿&#xff0c;想要进…

Hive提升篇-Hive修改事务

简介 Hive 默认是不允许数据更新操作的&#xff0c;毕竟它不擅长&#xff0c;即使在0.14版本后&#xff0c;做一些额外的配置便可开启Hive数据更新操作。而在海量数据场景下做update、delete之类的行级数据操作时&#xff0c;效率并不如意。 简单使用 修改HIVE_HOME/conf/hi…

JS逆向寻找生成bid变量的加密算法,一顿操作猛如虎,结果发现原来是混淆代码

分享一下最近我JS逆向的心得。 我最近使用Python爬取某个网站某个链接&#xff0c;cookie必须加入qgqp_b_id参数才能获取数据。 这个参数是一个32位字符串&#xff0c;通过浏览器的开发者工具分析网页源代码&#xff0c;了解到这个qgqp_b_id变量不是服务器返回给客户端的&…

Whids:一款针对Windows操作系统的开源EDR

关于Whids Whids是一款针对Windows操作系统的开源EDR&#xff0c;该工具所实现的检测引擎基于先前的 Gene项目构建&#xff0c;并专门设计可以根据用户定义的规则匹配Windows事件。 功能特性 1、为社区提供一款功能强大且开源的Windows EDR&#xff1b; 2、支持检测规则透明化…

有了java基础,迅速学完Python并做了一份笔记

面向过程Python简介Python和Java的解释方式对比Java&#xff1a;源代码 -> 编译成class -> Jvm解释运行Python&#xff1a;源代码 -> Python解释器解释运行我经常和身边的Java开发者开玩笑说&#xff1a;“Java真变态&#xff0c;别的语言都是要么直接编译要么直接解释…

无线蓝牙耳机哪个好用?好用的无线蓝牙耳机推荐

随着苹果取消3.5mm耳机孔&#xff0c;近几年蓝牙耳机便逐渐取代有线耳机以强势的姿态闯入人们的日常生活。听歌、游戏、运动等&#xff0c;使用蓝牙耳机的人越来越多。经常看到有人问&#xff0c;无线蓝牙耳机哪个好用&#xff1f;针对这个问题&#xff0c;我来给大家推荐几款好…

消息称索尼计划为PS5推出两款蓝牙耳机,Find My蓝牙耳机用途广

根据国外科技媒体 Insider Gaming 报道&#xff0c;索尼计划进一步丰富 PlayStation 5 的配件生态&#xff0c;将会推出两款耳机&#xff0c;一款采用类似于 AirPods 的 TWS 设计&#xff0c;另一款则是无线头戴式耳机。 消息称 TWS 耳机的内部代号为“Project Nomad”&#…