• mybatis非常随的随笔


    mybatis

    mybatis是一个持久层框架,底层封装了JDBC,程序员只需要做简单的配置,和完成接口开发,就能实现CRUD操作,简化了开发。同时减少了硬编码,将sql在配置文件中配置,修改sql也不用重编译,便于系统的维护。

     

    mybaitis也有自己的缓存,但是很少用,它的一级缓存是session级别的,二级缓存是mapper级别的,session级别是默认开启的,而二级缓存是默认关闭的,如果使用的话,需要在配置文件中进行开启;

     

    mybatis中#{}和${}的区别,#{}这个是mybatis底层在加载配置文件的时候通过反射机制解析成?号,而${}这个是在执行过程中通过OGNL表达式解析成具体的值student.name这样的,#{}这个是相对安全一下,${}有可能引起sql注入的问题,在使用like的时候一般使用${}例如:like '%${student.name}%'

     

    mybatis中有两个配置文件,全局配置文件sqlMapConfig.xml和映射配置文件mapper.xml,全局配置文件中配置数据源,事务等,配置文件中配置sql语句信息。

    mybatis的执行流程
    加载配置文件信息(全局配置文件和映射配置文件),全局配置文件加载成Configration对象,映射配置文件加载成MapperedStatement对象,
    sqlsession的执行过程
    1、获取连接,找到Configration对象,获取对象中的DataSource,通过DataSource获取连接
    2、获取sql信息,找到Configration对象,通过传入的statementid找到对应的MapperedStatement对象
    3、通过MapperedStatement对象找到,获取SqlSource对象,进而找到BoundSql对象,BoundSql封装的是JDBC可以执行的sql
    4、解析参数信息,根据MapperedStatment找到配置的参数类型和参数数据,将参数信息通过反射,或者OGNL手段放入到Sql语句中的指定位置
    5、向数据库发出执行查询,查询出结果集映射到MapperedStatement中配置的结果集对象中
    6、解析结果集可以进行其他逻辑操作

    mybatis中有逆向工程的功能,可以通过执行逆向工程,会生成指定表的单表的CRUD操作映射文件及接口,程序员只需要关注多表的关联查询即可,单表的都可以生成

     

    mybatis有延迟加载功能,延迟加载就是为了提升性能,延迟加载分为:侵入式延迟加载和深度延迟加载

    侵入式延迟加载:访问主对象的时候,不仅要加载主对象,同时也会加载到辅助对象

    深度延迟加载:访问主对象的时候,只会加载主对象,只有当访问关联对象属性的时候,才会真正的加载辅助对象

    延迟加载会产生N+1的问题,只有关联查询才会有这种问题,是因为主表的信息比较少,但是附表的信息很多,查询一次主表,会查询多次附表,这样就会产生N+1的问题

     

    mybatis使用了动态代理,动态代理分为JDK动态代理,CGLIB动态代理

    JDK动态代理:用接口实现

    CGLIB动态代理:底层是通过继承来实现的

     

  • 相关阅读:
    栈溢出笔记1.3 准备Shellcode
    聊聊手游的那些惊喜与惊吓
    GIS+=地理信息+容器技术(4)——Docker执行
    与AQS有关的并发类
    HDU 2102 A计划
    生产系统ELK日志采集系统
    datagrip离线安装驱动jar
    oracle无效索引重建
    18年总结及19年展望
    shell符号解释
  • 原文地址:https://www.cnblogs.com/zhuanhangdelaoyuan/p/13199416.html
Copyright © 2020-2023  润新知