Spring整合Mybatis思路梳理总结
作者:一切随缘~~~ 发布时间:2022-04-26 03:56:12
Spring整合Myabtis思路的分析
引入相关依赖
Spring
Myabtis
mysql
Mybatsi-spring
…
如何整合?
Spring:
项目管理框架,主要是用来负责项目中组件对象的创建,使用,销毁。
Mybatis:
持久层框架,主要是用来简化原始jdbc技术对数据库访问操作。
== >整合思路:通过Spring框架接管Mybatis框架中核心对象的创建。
Mybatis框架中核心对象是谁?
sqlSession?
SqlSessionFactory?
SqlSessionFactoryBuilder?
dao?
最核心的对象必然是:SqlSessionFactory。
SqlSessionFactoryBuilder的作用就是读取解析配置文件==【数据源配置,mapper文件配置】==,来创建SqlSessionFactory。
SqlSession的创建又依靠于SqlSessionFactory。
== > SqlSessionFactory是最核心的对象。
SM整合
整合思路:通过Spring框架接管Mybatis中核心的SqlSessionFactory对象的创建。
SqlSessionFactory是简单对象还是复杂对象呢?
如果是简单对象
<bean id="" class=""/>
如果是复杂对象
通过查看源码得知,SqlSessionFactory是一个接口类型的复杂对象。
如何创建?
is = Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder(),build(is);
1).SqlSessionFactory(Factory)Bean implements FactoryBean<SqlSessionFactory> {
SqlSessionFactory getObject() {
is = Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder(),build(is);
}
Class getClass() {
return SqlSessionFactory.class;
}
boolean isSingleton() {
return true;
}
}
2).工厂管理SqlSessionFactory
<bean id="sqlSessionFactory" class="xxx.SqlSessionFactoryBean">
3).工厂获取
SqlSessionFactory sf = context.getBean("sqlSessionFactory");
写完之后,我们可以发现,这段代码是固定不变的,这个项目要写,别的项目也要写。
于是Mybatis官方替我们写好了,对这段代码进行了封装:Mybatis-spring.jar。
jar包里提供了一个类:SqlSessionFactoryBean。
我们以后只要引Mybatsi-spring依赖就可以了,不用在自己去写了。
值得注意的是:mybatis官方提供SqlSessionFactoryBean,不在使用mybaits主配置文件。
主配置文件的核心就是【数据源】【mapper文件的注册】
所以我们要注入数据源对象,引入druid依赖,注入mapper文件的位置。【DI思想,依赖注入】
<!-- 配置Spring.xml文件 -->
<!-- 创建数据源对象 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" >
<property name="driverName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/xxx"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<bean/>
<!-- 创建SqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据源对象 -->
<property name="dataSource" ref="dataSource" />
<!-- 注入mapper文件的位置 -->
<property name="mapperLocations">
<array>
<value>.....</value>
</array>
</property>
<bean/>
来源:https://blog.csdn.net/Sherlook_Holmes/article/details/122674370


猜你喜欢
- 对于使用avalonia的时候某些功能需要到一些提示,比如异常或者成功都需要对用户进行提示,所以需要单独实现弹窗功能,并且可以自定义内部组件
- 微信登录的实现与qq登录类似。不过微信登录比较麻烦,需要拿到开发者资质认证,花300块钱,然后应用的话还得有官网之类的,就是比较繁琐的前期准
- 一、ListView类1、常用的基本属性:(1)FullRowSelect:设置是否行选择模式。(默认为false) 提示:只有在Detai
- spring Session 提供了一套用于管理用户 session 信息的API和实现。Spring Session为企业级Java应用的
- 一. 递归1. 简介所谓的递归,其实是一种解决问题的方式。就是在解决具有既定规律的问题时,在方法内部调用方法自身的一种编程方式。 即方法在运
- 本文实例讲述了Android编程之防止反编译的实现方法。分享给大家供大家参考,具体如下:1. 判断程序是否运行在模拟器上boolean is
- 一、背景今天心血来潮,准备测试一下项目中 logback 的自动刷新功能,但是测试时发现并不生效。logback 的配置如下:<con
- #include <stdio.h>#include <stdlib.h>int main(){ &nbs
- 本文实例讲述了android编程之ip2id程序。分享给大家供大家参考。具体分析如下:一、说明:公司一个项目中需要给一系列网络设备分配id号
- 本文实例为大家分享了Android检测手机多点触摸点数的具体代码,供大家参考,具体内容如下多点触摸点数效果图Circle.javapacka
- 一、Lambda 表达式的基础语 * ambda 表达式的基础语法:Java8中引入了一个新的操作符 "->" 该操
- 前言HTML5 WebSocket实现了服务器与浏览器的双向通讯,双向通讯使服务器消息推送开发更加简单,最常见的就是即时通讯和对信息实时性要
- 概要集合概念:像数组一样是java的一个容器;和数组不同的是数组只能存同类型的数据,且长度定义之后就不可变,集合不仅,可以存多种类型的数据,
- 前言今天小编给大家带来的是用代码一键实现银行卡识别与绑定功能。银行卡识别的应用场景 介绍开发步骤前,我们先来谈谈银行卡识别的具体应用场景,
- 通过内部存储方式实现了在两个Activity之间传递Bitmap对象以及其它支持串行化的Java对象,关键点有如下:1. HTT
- 文件格式分别如下 package txtobject ReadTxt {def readFromTxtBy
- 老大让我check out 一个分支,可我在idea 右下角找了半天也没找到最后才发现:因为是刚创建的分支,我得先更新一下项目,连这个都不懂
- 获取本机所有IP地址:这些地址是包含所有网卡(虚拟网卡)的ipv4和ipv6地址。 string name = Dns.GetHostNam
- Struts2 * Struts2 * 的概念和Spring Mvc * 一样。1.Struts2 * 是在访问某个Action或Actio
- Java程序设计 图形用户界面【四】按钮组件 JButtonJButton组件表示一个普通的按钮JButton类常用方法方法作用public