zoukankan      html  css  js  c++  java
  • Mybatis头脑风暴(随笔,捋思路)

    只是回想时的头脑风暴,具体配置需要查看官方文档,以下仅随意整理自己的思路,如有缺错请谅解

    1.Mybatis是半自动化的ORM对象关系映射框架,省去了传统JDBC工作中繁琐的输入参数,输出结果与JavaPOJO类的手动映射,仅需在配置文件中进行配置,底层框架会通过读取xml文件,反射自动进行映射,实现功能

    2.Mybatis配置流程(结合原理捋思路)回顾

      配置文件中标签的使用导入约束文件,根据提示与标签语义进行配置,注意顺序

      1>主配置文件中的配置:

        <configuration>配置文件中的配置信息

          <type aliases> 映射文件中输入输出映射不适用全限定类名,而对包中类起别名,默认不包含路径的类名为别名

          <properties> 需要用到配置文件的配置(数据源jdbc四大信息的配置,使用${键名})

          <settings><setting> 具体设置,诸如(延迟加载/缓存设置等)

          <envirenment>工作环境

            而mybatis中的工作环境包括 : 进行数据库交互-->数据源的配置-->数据库连接四要素(可通过配置properties配置文件实现灵活的存取)

                                  事务的管理

            除去主要的底层支持,就需要具体的sql语句,mapper的加载(将mapper.xml们加载到主配置文件,相关API只加载主配置文件即可)

            <mappers><mappers>其中可以单个进行<mapper>配置, 也可以使用属性package一次性配置(但需要配置文件与接口在同一个包中)

      2>mapper映射文件

        使用动态代理生成DAO接口的实现类时,mapper的namespace与接口的全限定类名一致,而具体statement的id与接口中的方法名一致

        OGNL  对象图导航语言

        输入映射-->sql语句中#{a}中参数a对应于Java传入的参数,会将传入的Java对象转换为只有一个整体而内部封装多个信息的对象或Map  

              对于实际POJO对象 #{}中a是属性名

              对于单个基本数据类型,#{}可任意取名字

              对于多个参数,默认将这多个参数封装成一个Map对象,默认key为它的排列顺序-->在接口方法参数中使用注解,map的key为参数名,#{}中是参数名

              遇到多参数-->多参数对应一个实体类-->使用该实体类封装

                    多参数对应多个实体类-->参数少,简单-->多参数+注解实现

                              -->封装一个Map  -->创建VO类,将多参数设置为属性

            *类似于Map中key对应的value为对象,要取出对象对应的属性--->键.属性名-->#{}可进一步点.

        

        动态SQL mapper的sql语句中动态拼接sql

          <if test="...>0"> ...使用传入参数的属性名,具体属性的属性使用点

          where+if

          choose+when+otherwise

          for for适用于一个属性对于多个值in(,,,)的批量操作,for遍历数组 时用arrays,集合时使用list(直接的数组或集合以arrays,list为键值封装)

        输出映射

          反射生成输出对象,根据查询出的结果集字段,为其属性赋值

          简单实体类映射直接resultType="类名"

          实体类属性名与数据库字段不一致-->起别名

                         -->resultMap做输出结果集映射

        resultMap中关联查询

          --->关联查询,inner join合成一张表后映射

          --->独立查询,分开两次查询(可延迟加载)  --->第二个查询中输入参数由第一个查询查出来的某一字段提供

          一对多collection , 多对一(一对一) assocation

    3.配合API的执行流程

      API操作配置文件以执行sql数据交互

      配置文件需要被API读取来进行一系列操作

      sql执行的核心为SqlSession,SqlSession的创建依赖于SqlSession工厂,而工厂的创建要读取到配置文件,解析xml,构造复杂所以采用建造者模式

      利用Resource将主配置文件读取成流传递给SqlSessionFactoryBuilder,建造者就拥有了配置文件中的信息Configuration,接着将这些信息传递给SqlSessionFactory

      openSession时创建Executor执行器(用于执行Sql语句的核心),Configuare,还有是否自动提交,默认为否

      

      动态代理的Mapper-->sqlSession.getMapper(Dao接口)

          根据接口名搜索到对应的namespace,根据对应的方法名搜索到对应的statement的id来实现拦截器,代理类等代理类的构建

           

  • 相关阅读:
    httpd添加新模块
    编译httpd细节
    apache配置文件说明及一些指令
    xen原理
    EXSI的使用
    VMWare ESX server安装
    虚拟化技术
    Kvm命令集管理虚拟机
    RAID几种方式
    BZOJ1011 [HNOI2008]遥远的行星 【奇技淫巧】
  • 原文地址:https://www.cnblogs.com/ying-dong/p/12158848.html
Copyright © 2011-2022 走看看