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来实现拦截器,代理类等代理类的构建

       

猜你喜欢

转载自www.cnblogs.com/autism-dong/p/12158848.html