【Spring】总结Spring整合Mybatis的底层原理实现步骤[通俗易懂]

【Spring】总结Spring整合Mybatis的底层原理实现步骤[通俗易懂]SpringMyBatisDao:数据访问层,提供让Service层调用的接口,更大的时候,Dao层可以是一个项目。sqlSession.getMapper();使用的是JDK的动态代理使用时自定注入的条件:要被Spring管理。被Spring管理的对象叫做Bean对象和Bean的区别:@Component注解表示将生成一个BeanBean就是一个Java对象,是Spring…

大家好,又见面了,我是你们的朋友全栈君。

(鲁班学院公开课笔记)

Dao:数据访问层,提供让Service层调用的接口,更大的时候,Dao层可以是一个项目。

在这里插入图片描述
sqlSession.getMapper();使用的是JDK的动态代理

在这里插入图片描述
使用时
在这里插入图片描述
自定注入的条件:要被Spring管理。被Spring管理的对象叫做Bean

@Component注解:表示将生成一个Bean
对象和Bean的区别
1、Bean就是一个Java对象,是Spring帮我们New出来的对象。
2、从Spring容器中拿到的对象,会给对象里面的包含@AutoWired注解的属性进行自动注入赋值。而手动new出来的对象不会自动注入赋值。
在这里插入图片描述

Spring容器中的Bean是怎么产生的?
在这里插入图片描述
BeanFactory:是一个Bean工厂

手动将Bean添加进Spring中:

bd=new bd();
bd.setbeanClass();
spring.add(bd);

—->BeanDefinition—->Bean

MyBatis是如何注入Spring的?
MyBatis代理对象的类型是?接口,例如UserMapper。我们可以提供一个类,让Spring自动去实例化
但是接口不能实例化,怎么办?如果可以把一个Java对象手动放进Spring容器中,就好了。

将Java对象手动放进Spring容器中三种方式:

1. beanFactory.registerSingleton("userXX",new User())
2. @Bean注解
3. 实现FactoryBean接口:FactoryBean是一个特殊的Bean
FactoryBean和BeanFactory的理解
BeanFactory是Spring里的一个大工厂
FactoryBean是一个小工厂,可以自定义生成的对象

在这里插入图片描述
在这里插入图片描述
MyBatis是使用FactoryBean整合进Spring的。

打印对象的时候,调用的是toString方法,会调用到invoke()
在这里插入图片描述
在这里插入图片描述

改进:将类改成活的 Class,使用构造器传入希望生成的Class
在这里插入图片描述
如果不使用@Component注解呢?
根据不同的Mapper生成不同的bd,从而生成不同的bean
在这里插入图片描述
手动实现
在这里插入图片描述

@import注解
可以用于导入一个本来不是Bean的类,将它生成一个Bean

在这里插入图片描述
@Bean明确地指示了一种方法,什么方法呢——产生一个bean的方法,并且交给Spring容器管理

测试示例:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145081.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • ubuntu安装完毕后拔掉u盘_4个CPU最大能开多少进程

    ubuntu安装完毕后拔掉u盘_4个CPU最大能开多少进程该方法同样适用于:1.强制卸载无法卸载的USB设备,比如:解决因为在传输数据未完成时直接拔下存储设备导致的后台D进程驻留(无法被kill);2.系统更新固件可能导致(只遇到过一次)的USB存储设备无法被识别(重启系统同样可以解决);3.不重启系统,只重启xhci控制器。

  • caffeine缓存应用场景_caffeinecacheload

    caffeine缓存应用场景_caffeinecacheload在本文中,我们来看看Caffeine—一个高性能的Java缓存库。缓存和Map之间的一个根本区别在于缓存可以回收存储的item。回收策略为在指定时间删除哪些对象。此策略直接影响缓存的命中率—缓存库的一个重要特征。Caffeine因使用WindowTinyLfu回收策略,提供了一个近乎最佳的命中率。填充策略(Population)Caffeine为我们提供了三种填充策略:手动、同步和异步手动加载(Manual)Cache<String,Object>

    2022年10月26日
  • OnContextMenu事件

    OnContextMenu事件用oncontextmenu事件单禁用右键菜单 一个页面中,BODY中用oncontextmenu='returnfalse'来取消鼠标右键;在JS中设置oncontext

  • csdn操作文档[通俗易懂]

    csdn操作文档[通俗易懂]csdn操作文档

  • SqlSession和SqlSessionFactory「建议收藏」

    SqlSession和SqlSessionFactory「建议收藏」SqlSessionFactoryBuilder  这个类可以被实例化、使用和丢弃,一旦创建了SqlSessionFactory,就不再需要它了。因此SqlSessionFactoryBuilder实例的最佳范围是方法范围(也就是局部方法变量)。你可以重用SqlSessionFactoryBuilder来创建多个SqlSessionFactory实例,但是最好还是不要让其一…

  • sql怎么调用存储过程_oracle sql分页查询

    sql怎么调用存储过程_oracle sql分页查询数据库用的是Oracle,Mybatis自动封装的分页,sql语句在PLSQL中执行没有问题,放在代码里面运行的时候就报错:未明确定义列。通过log打印的sql语句拷出来执行,发现嵌套上分页就会报错。问题原因:sql语句中有个列的别名重复,导致嵌套了分页后,数据库不能确定我们要的到底是哪个列,就会报未明确定义列。网上还有网友说的其他原因大家可以参考,比如

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号