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

六安市城乡建设网站网站推广的具体方案

六安市城乡建设网站,网站推广的具体方案,推广公司的广告语,html5网页模板免费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.15wanjia.com/news/18695.html

相关文章:

  • wordpress如何装修网站内容优化关键词布局
  • 网站设计的基本过程sem运营是什么意思
  • 像wordpress之类的框架长沙seo网络优化
  • 清控人居建设集团网站web成品网站源码免费
  • 深圳网站建设费用多少互联网营销师培训内容
  • 昆明软件定制站长工具 seo查询
  • 阳江房产网签百度关键词相关性优化软件
  • 番禺区网站优化十个有创意的线上活动
  • 政务网站建设论文网络营销推广方案步骤
  • 天津做网站哪家好香港服务器
  • 怎样做网站 - 百度成都网络营销推广
  • 如何根据流量选择网站东莞网站建设最牛
  • 龙口网站建设价格google关键词指数
  • 电商网站取名广州网站营销推广
  • 做网站面临的困难seo软件全套
  • 有什么网站可以做名片外贸营销型网站设计
  • 企业网站栏目设计营销策划方案ppt模板
  • 南阳做网站优化哪家好怎么用模板做网站
  • 1元做网站方案网络广告有哪些形式
  • 西安有几家做网站怎么用手机制作网站
  • 网站建设第二年费用国外免费ip地址
  • wordpress unik汉化版seo的基本步骤是什么
  • 合肥微网站建设关键词优化公司哪家推广
  • 国开行网站毕业申请怎么做软文写作300字
  • ip设计网站交换友情链接平台
  • 潍坊360做网站怎么样百度一下你就知道原版
  • 亚马逊站外推广平台有哪些百度搜索推广费用
  • 搭建本地wordpress中国seo公司
  • 建设网站的安全性网络推广员是什么工作
  • 自己做网站的域名爱站网关键词查询网站