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

网站设计中 查询怎么做南坪网站建设

网站设计中 查询怎么做,南坪网站建设,珠海高端网站制作公司,网站建设七大步骤1. Spring Boot 自动配置 Mybatis 自动配置过程中做了3个主要bean的创建及很重要的一些事情。 sqlSessionFactory、sqlSessionTemplate、MapperScannerConfigurer 等配置bean的创建。sqlSessionFactory#xff1a;解析 xml配置文件#xff0c;并将MappedStatement放入到Has…1. Spring Boot 自动配置 Mybatis 自动配置过程中做了3个主要bean的创建及很重要的一些事情。 sqlSessionFactory、sqlSessionTemplate、MapperScannerConfigurer 等配置bean的创建。sqlSessionFactory解析 xml配置文件并将MappedStatement放入到HashMap中。sqlSessionTemplate代理了 DefaultSqlSession增强了Session的创建获取、关闭、事务等能力。MapperScannerConfigurer扫描Mapper注解并生成这些类的BeanDefinition放入到注册表中。 自动配置 约定大于配置缺省的配置看这个注解 EnableConfigurationProperties({MybatisProperties.class})。这个注解中引入了MybatisProperties类包含了一些默认的配置。 Configuration ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class}) ConditionalOnSingleCandidate(DataSource.class) EnableConfigurationProperties({MybatisProperties.class}) AutoConfigureAfter({DataSourceAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class}) public class MybatisAutoConfiguration implements InitializingBean {}MybatisAutoConfiguration的主要属性有 MybatisPropertiesyaml文件中的属性配置Interceptor[] 拦截器数组TypeHandler[] 类型解析器等 构造方法 从 yaml 文件中获取 mybatis 前缀的属性封装成对象​MybatisProperties​赋值给 properties 。获取拦截器获取typeHandlers其他。。。 创建 sqlSessionFactory 前提 依赖DataSource 数据源 ConditionalOnSingleCandidate(DataSource.class)。要求 BeanFactory 中存在指定类并且可以确定单个候选项才会匹配成功在数据源完成自动配置之后配置 sqlSessionFactory new SqlSessionFactoryBean().getObject(); 正文 创建一个工厂bean​MybatisSqlSessionFactoryBean​​ 工厂 bean 设置数据源dataSource。依赖注入此时容器中已经有了dataSource直接拿来用。 初始化配置属性 如果有配置 mybatis-config.xml 则设置configLocation 属性。应用yaml 文件中嵌套配置 configuration到 factoryBean。TypeHandler拦截器 通过工厂Bean的getObject方法获取sqlSessionFactory。 对关键配置做断言处理dataSource​、sqlSessionFactoryBuilder​、configuration​、​configLocation​ ​buildSqlSessionFactory​开始构建sqlSessionFactory。 如果配置项 mapperLocation不为空循环解析每一个 mapper.xml文件 XMLMapperBuilder.parse() 解析xml 文件 如果没有解析过该 xml 文件则进行解析如果解析过直接跳过。 ​configurationElement​​​​​解析mapper 节点 mapper namespacecom.pansnow.changcheng.mapper.UserMapperselect idqueryUserList resultTypecom.pansnow.changcheng.pojo.Userselect *from user/selectinsert idaddUser parameterTypecom.pansnow.changcheng.pojo.Userinsert into user(id, name, pwd)values (#{id}, #{name}, #{pwd});/insertupdate idupdateUser parameterTypecom.pansnow.changcheng.pojo.Userupdate userset name#{name},pwd#{pwd}where id #{id};/updatedelete iddeleteUser parameterTypeintdeletefrom userwhere id #{id};/delete /mappernamespace判空。namespace 为 mapper 接口类的 String 字符串 解析 parameterMap 和 resultMap节点 解析 sql节点 解析 select|insert|update|delete 将该文件添加到已解析集合中。 protected final SetString loadedResources; if (!this.configuration.isResourceLoaded(this.resource)) {...this.configuration.addLoadedResource(this.resource);... }将 mapper 类添加到 mapper注册表中。 private final MapClass?, MapperProxyFactory? knownMappers new HashMap();this.knownMappers.put(type, new MapperProxyFactory(type));knownMapper是一个mapper接口类和他的代理工厂的一个映射。 解析 mapper 类上的注解Select、SelectProvider、ResultMap 等注解用于解析 mapper 类中方法上的 SQL 语句。 解析方法上的xml文件中的 SQL语句 parseStatement。 具体的解析过程就不谈了太复杂先不看了。​MybatisSqlSessionFactoryBean​​中有一个属性mappedStatements​​。这是一个 HashMap将解析过后的MappedStatement​​添加到 map 中 创建sqlSessionTemplate 使用 jdk 动态代理创建SqlSessionProxy增强逻辑为SqlSessionInterceptor​。代理了SqlSession的创建和获取、事务、关闭。即在调用SqlSession接口中的每一个方法时都会调用SqlSessionInteceptor的invoke逻辑。 ​SqlSessionInterceptor​的逻辑为 创建SqlSession。使用 selSessionFactory 代理对象是如何获取defaultSqlSession 在代理方法中通过SqlSessionUtils 的方法获取SqlSession 它会首先获取SqlSessionHolderSqlSessionHolder用于在TransactionSynchronizationManager中保持当前的SqlSession。如果holder不为空并且holder被事务锁定则可以通过holder.getSqlSession()方法从当前事务中获取sqlSession即 Fetched SqlSession from current transaction。如果不存在holder或没有被事务锁定则会创建新的sqlSession即 Creating a new SqlSession通过sessionFactory.openSession()方法。如果当前线程的事务是活跃的将会为SqlSession注册事务同步即 Registering transaction synchronization for SqlSession。 SqlSession sqlSession SqlSessionUtils.getSqlSession(SqlSessionTemplate.this.sqlSessionFactory, SqlSessionTemplate.this.executorType, SqlSessionTemplate.this.exceptionTranslator);如果 session 为 null 利用事务工厂创建一个事务新建一个 Executor这个是干嘛的不太清楚哇。新建一个 DefaultSqlSession。创建sqlSessionHolder 将 sqlSession 包起来。将sqlSessionHolder存放到TransactionSynchronizationManager​的synchronizations​中。synchronizations​是一个 set 集合。 调用业务方法 如果有事务提交事务 关闭 session。关闭前会释放 holder。​holder.released();​ SqlSessionUtils.closeSqlSession(sqlSession, SqlSessionTemplate.this.sqlSessionFactory);创建MapperScannerRegistrarNotFoundConfiguration 主要在于根据配置创建MapperScannerConfigurer​ Import({AutoConfiguredMapperScannerRegistrar.class}) 这个AutoConfiguredMapperScannerRegistrar类非常关键因为他在扫描Mapper 注解 ​BeanDefinitionBuilder​创建MapperScannerConfigurer​的 BeanDefinitionBuilder设置扫描注解类Mapper.class设置扫描包路径设置sqlSessionFactoryBeaName设置 sqlSessionTemplateBeanName注册MapperScannerConfigurer​到注册表中 MapperScannerConfigurer 实现了 BeanDefinitionRegistryPostProcessor 工作在bean 定义的注册阶段。 扫描Mapper 注解为什么需要单独处理呢因为 Mapper 注解是 mybatis 自定义注解和 Component 注解没有关系。这个类会将Mapper 注解下的类也实例化后放入到 Spring 容器中。 负责扫描Mapper接口的扫描器为ClassPathMapperScanner​他是ClassPathBeanDefinitionScanner​的子类。ClassPathMapperScanner​扫描到注解类后会为其生成BeanDefinition。这里生成的是一个MapperFactoryBean的bean定义。 生成bean定义的时候将bean定义的name设置为userMapper。但是其类型设置为了MapperFactoryBean。​mapperInterface​ 设置为了 com.pansnow.changcheng.mapper.UserMapper​factoryBeanObjectType​设置为了 com.pansnow.changcheng.mapper.UserMapper加了个sqlSessionTemplate​的属性引用指向容器中的beansqlSessionTemplate 然后在后期创建bean的时候MapperFactoryBean会执行getObject方法 knownMapper是一个mapper接口类和他的代理工厂的一个映射。 MapperProxyFactory代理工厂创建mapperProxy 代理mapper接口。 this.getSqlSession().getMapper(this.mapperInterface);||\||/ this.mapperRegistry.getMapper(type, sqlSession);||\||/ MapperProxyFactoryT mapperProxyFactory (MapperProxyFactory)this.knownMappers.get(type); return mapperProxyFactory.newInstance(sqlSession);mapperProxy在执行方法的时候会从DefaultSqlSession的Configuration中获取方法对应的MappedStatement。接下来就很明白了。 ‍
http://www.zqtcl.cn/news/855093/

相关文章:

  • 小说网站搭建教程wordpress后台图片
  • 付网站开发费计入什么科目网站开发的历史
  • 站长素材ppt模板免费下载网站开发视频教程迅雷下载
  • 建设一个网站怎么赚钱南京江北新区房价走势最新消息
  • 一个网站怎么做软件下载互联网投放渠道有哪些
  • 手机网站建设进度环境设计排版素材网站
  • 网站开发众筹地推网推平台
  • 长沙互联网网站建设wordpress标签id在哪里修改
  • 企业网站的建设 摘要大连网站设计策划
  • 做房地产一级市场的看什么网站网络营销外包推广方式
  • 网站建设基本流程包括哪几个步骤网站建设策划书网站发布与推广
  • 徐州整站优化手机网页端
  • 深圳中瑞建设集团官方网站宁波seo快速优化教程
  • 福田网站制作哪家好昆山企业网站建设公司
  • wordpress快六安网站自然排名优化价格
  • 网站的线下推广怎么做的系统官网网站模板下载安装
  • 北京网站优化推广公司企业网站建设费怎么核算
  • 网站建设vps个人如何做网站推广
  • 小语种网站怎么设计网页制作公司 大连
  • 贵港市城乡住房建设厅网站菜鸟教程网站
  • 广州网站建设找哪家免费搭建网站的软件
  • 培训班管理系统 免费太原优化网站排名
  • 上海怎么做网站网站让图片充满屏幕怎么做
  • 哈尔滨营销网站建设wordpress 加载图片不显示
  • 电商网站功能结构图网站做中秋专题怎么弄
  • 深圳专业建站平台陕西省建设工程质量安全监督总站网站
  • 制作网页的网站的软件是用户反馈数据分析软件园
  • 南京 做网站seo查询网站
  • 卖高仿名牌手表网站共享wifi小程序搭建
  • c#网站开发模板想在意大利做购物网站