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

六安市城乡建设网站网络销售每天做什么

六安市城乡建设网站,网络销售每天做什么,谈谈网站的开发流程,深圳南山网站建设spring是怎样和mybatis继承的? 在idea里点mapper.queryOne()直接跳到了接口或xml,它究竟是怎样利用jdbc执行的? 我直接调用mapper.queryOne是怎么使用的sqlsession?怎么去connect的? mybatis是怎样根据mapper找到对应的…

spring是怎样和mybatis继承的?
在idea里点mapper.queryOne()直接跳到了接口或xml,它究竟是怎样利用jdbc执行的?
我直接调用mapper.queryOne是怎么使用的sqlsession?怎么去connect的?
mybatis是怎样根据mapper找到对应的sql语句的?
看完本文,你将茅塞顿开!

前置知识:需要了解spring和mybatis的本身的原理

对beanDefinition进行扩展(spring部分)

首先是有一个类MapperScannerConfigurer,实现了BeanDefinitionRegistryPostProcessor,并重写了postProcessBeanDefinitionRegistry方法。
spring在加载beanDefinition的时候会调用这个方法,这个方法把所有配置中mybatis的mapper包扫描一遍,修改包里每个接口的beanClass为MapperFactoryBean.class
在这里插入图片描述
一路点scan->doscan->processBeanDefinitions
在这里插入图片描述

生成bean(spring部分)

由于上一步对beanDefinition已经做了修改,而MapperFactoryBean.class又实现了FactoryBean,因此这个spring容器生成的对象时,本质上是调用MapperFactoryBean的getObject方法。getOject就是getSqlSession().getMapper(this.Interface),这里和mybatis里使用的session.getMapper(UserMapper.class)就一致了。
在这里插入图片描述

调用方法(spring部分)

我们在使用userDao.selectOne这样的方法的时候。userDao本质上已经是getSqlSession().getMapper(this.Interface)生成的对象,即mybatis中session.getMapper(UserMapper.class)生成的对象。剩下的就是mybatis的事情了。
在这里插入图片描述

连接部分

SqlSessionTemplate线程安全的sqlsession

sqlsessionTemplate里有个sqlsession的代理类。利用代理类调用sqlsession的,在代理类的invoke里面每次都getSqlSession,即获得DefaultSqlSession对象,这样每一次执行都生成一个新的session,就不会有线程安全问题了。当然,session有一定的缓存,用来避免浪费资源
在这里插入图片描述

image.png

SqlSessionDaoSupport拿到sqlsessionTemplate

SqlSessionDaoSupport的getSqlSession代码,会直接返回sqlsessionTemplate对象。在构造的时候会注入sqlsessionTemplate。而上面的MapperFactoryBean实现了SqlSessionDaoSupport所以可以直接利用getSqlSession拿到sqlsession
在这里插入图片描述

mapper的生成(mybatis)

mapper和mapper工程的对应关系

在解析写sql的xml文件时,会将mapper接口和工厂绑定起来。在这里插入图片描述

用mapper调用方法就是用sqlsession调用方法

我们在使用sqlSession.getMapper(Inteface.class)的时候会走下面的调用流程:configuration.getMapper()->mapperRegistry.getMapper()在这里,会把根据Inteface.class拿到对应的mapper代理对象生成的工厂方法。接着利用工厂执行mapperProxyFactory.newInstance(),创建mapper的代理对象
在这里插入图片描述
代理对象的invoke里面执行本质上是执行了sqlSession.selectOne()。

sqlsession是怎么找到sql的?(mybatis)

sqlSession.selectOne(command.getName(), param),其中command就是mapper的方法名也对应到了sql的id了。而id和sql的对应关系,在解析sql的xml时放到mappedStatements里了。
在这里插入图片描述
在这里插入图片描述

总结

  1. mybatis-spring有一个beanDefinition的增强类,增强类的增强方法在spring加载beanDefinition的时候把beanClass换成了MapperFactoryBean implements FactoryBean,spring在生成bean的时候执行的是MapperFactoryBean.getObject即getSqlSession().getMapper。这一步拿到了mybatis原生里面的mapper对象。
  2. mybatis加载sql的xml文件时会将sql语句和sql对应的id保存到configuration里,把mapper和对应的工程保存下来。我们执行session.getMapper()方法获取mapper对象的时候,获取的是一个mapper的代理类,代理类把mapper.queryUser(params)的形式转化为session.selectOne(“queryUser”,params)。
  3. session.selectOne函数会根据传进来的参数从configuration里面拿到相应的sql语句,并做执行!
http://www.hrbkazy.com/news/29379.html

相关文章:

  • 网站空间速度测试推广方案万能模板
  • 郑州网站网络推广公司网络seo优化公司
  • 中英文切换的网站怎么做广告平台网
  • 免费做拍卖网站中国国家培训网
  • 文件上传到沧州建设局网站关键词优化方法有什么步骤
  • 南通建公司网站济南百度seo
  • 企业网站制作公司盈利青岛网站建设优化
  • 陵水网站建设chinaz站长素材
  • 网站框架图怎么做seo外包多少钱
  • 怎么用电脑做网站主机舆情服务网站
  • 明年做哪个网站致富友情链接可以随便找链接加吗
  • 北京专业建设网站公司哪家好seo排名点击
  • 前端和做网站南京seo建站
  • 湛江专业建站上海抖音seo
  • 哪里找高清图片素材百度seo关键词排名 s
  • 常州专业做网站公司百度域名
  • 网站和微信公众号建设360安全浏览器
  • 网站建设报价兴田德润在哪里什么软件可以推广
  • 蚌埠网站制作公司哪家好国外seo网站
  • 信用湘潭网站自助建站系统平台
  • 做网站程序的步骤网络seo外包
  • 淘宝开店注册流程河北网站优化公司
  • 魔域网页游戏官网上海专业优化排名工具
  • 自己怎么做外贸英文网站宣传广告怎么做吸引人
  • 网站备案接入商是什么百度云盘登录电脑版
  • 网站建设的重要宁波网站建设方案推广
  • 用网站做平台有哪些链接购买平台
  • 东阿网站建设老客外链
  • 信金在线制作网站百度搜索引擎广告投放
  • 北京市建设投标网站如何让百度快速收录网站文章