MyBatis

MyBatis
    简介
        MyBaits简介
            MyBatis的前身是Apache的开源项目iBatis
                iBatis
                    internet
                        网络
                    abatis
                        钢丝网
            MyBatis的有事在于灵活,他几乎可以代替JDBC,同时提供了接口编程,目前MyBatisde 数据访问层DAO是不需要实现类的,他只是需要一个接口和XML(或者注解)
            在移动互联网时代,MyBatis成为了首选
            MyBatis提供 自动映射,动态SQL 级联 缓存 注解 ,代码和SQL分离等特性
            MyBatis和Hibernate都是依靠某种方法 将数据库的表和POJO映射起来
            MyBatis的本质就是java对数据库的操作
            Mybatis的特点
                不屏蔽SQL
                提供强灵活的映射机制 方便Java开发者使用
                在Mybatis中提供了使用Mapper的借口变成 只要一个借口和一个xml就能创建映射器
        Hibernate简介
            我们把POJO对象和数据库表相互映射的框架成为对象关系映射,ORM框架,MyBatis和Hibernate都是ORM框架
            只是Hibernate的设计理念是完全面向POJO的而MyBatis不是
            Hibernate基本不再需要编写SQL就可以通过映射关系来操作数据库 是一种全表映射的体现
            在管理系统时代,程序员不需要知道SQL语句  就可以编写代码实现增删改查的功能
        MyBatis和Hibernate的区别
            Hibernate
                优点
                    对于业务逻辑层来说是大同小异,对于映射层而言Hibernate的配置不需要接口和SQL,MyBatis需要
                    对于Hibernate而言,不要编写大量的SQL就可以完全映射,同时提供了日志 缓存  级联(级联比MyBatis强大) 等特性
                致命缺点
                    由于无须SQL 当多表关联超多3个时,通过Hibernate的级联会造成太多性能的丢失
            对于MyBatis而言
                优点
                    , Hibernate的缺点都可以解决,
                    MyBatis可以自由书写SQL 支持动态SQL,处理列表 动态生成表名,支持存储过程,灵活的的定义查询语句,满足各类的需求和性能优化的需要
                缺点
                    他要编写SQL和应声规则 ,其工作量大于Hibernate
                    它支持的工具也是有限的,不能像Hibernate那样有很多插件可以帮助生成映射代码和关联关系
    组件
        MyBatis的核心组件
            SqlSessionFactoryBuilder(构造器)
                采用的事Builder模式
            SqlSessionFactory(工厂接口)
                依靠他来生成SqlSession
                    采用工厂模式
                    子主题 2
            SqlSession(会话)
                一个既可以发送SQL执行返回结果 , 也可以获取Mapper的接口
                发送SQL
                    SqlSession发送SQL
                    用Mapper发送SQL
                    对比两种发送SqL的方式
                        使用Mapper接口变成可以消除SqlsESSION带俩的功能性代码  提高可读性。而SQlSession发送SQL 比较晦涩难懂
                        使用Mapper 提供的ide 还会提示错误和校验, 使用SQLSession   只有在运行的时候才会知道 是否产生错误
            Sql Mapper(映射器)
                他负责发送Sql去执行,并返回结果
                映射器的实现
                    用xml实现映射器
                        一个接口和一个xml
                    注解实现映射器
                映射器的主要作用
                    就是将SQL查询到的结果映射为一个POJO,或者将POJO的数据插入到数据库中
        生命周期
            生命周期是组件的重要问题,尤其是在多线程的环境 中
            SqlSessionFactoryBuilder(构造器)
                他的作用就是创建 SQLSessionFActory ,创建成功之后就会失去作用,不要让他长期存在
                子主题 2
            SqlSessionFactory(工厂接口)
                他就是一个对数据库的连接池,所以他长期占据着数据库的链接资源
                一般的应用中我们会希望SQLSessionFactory作为一个单例,让他在应用中被共享
            SqlSession(会话)
                他存活在一个业务事务中,处理完整个请求后 应该关闭这条连接
            Sql Mapper(映射器)
                Mapper是一个接口 它是由SQlSession 创建的,所以他的生命周期应该和SQlSession保持一致
        实例
            程序入口,拥有main方法
            映射器接口
            映射器XML文件  描述映射关系 SQL 等内容
            POJO对象,一个工具类,用于创建SQLSessionFactory 和获取SQLsession对象
            日志配置文件 让后台日志数据MyBatis 运行的过程日志
            配置文件
        在MyBatis中Xml 分为 两类
            基础配置文件
            映射文件
    配置
        配置
        属性
            properties
        设置
            settings
        类型命名
            typeAliases
        类型处理器
            typeHandlers
                作用
                    就是承担jdbcType和javaType之间的相互转换
        对象工厂
            objectFactory
        插件
            plugins
        配置环境
            environments
        环境变量
            environment
        事物管理器
            transactionManager
        数据源
            dataSource
    映射器
        概述
            映射器事mybatis中最复杂且最重要的组件,它由一个接口和一个xml文件(注解)组成
        增删改查
            select元素  查询语句
                自动映射
                    好处 在于能有效减少大量的映射代码,减少工作量
                驼峰映射
                传递多个参数
                    使用Map接口传递参数
                        不建议使用
                        可读性差
                        导致后续扩展和维护的困难
                        后期开发中果断的放弃
                    使用注解传递多个参数
                        可读性好
                        但是参数多了 也就麻烦了  
                        如果参数小于5个  适合注解传递参数 但是多于5个  时,javaBean比较好用
                    使用javaBean传递多个参数
                        可以接受多个参数
                    混合使用
                        子主题 1
                使用resultMap映射结果
                    自动映射和驼峰映射 规则比较简单,无法定义多的属性  比如级联和typehandler,为了支持复杂的映射,select元素提供了resultMap属性
                分页参数RowBounds
            insert元素 插入语句
                概述
                主键回填
                自定义主键
                    由于某些主键依赖某些规则,所以自定义主键
            update和delete元素
        Sql元素
        参数
            概述
            存储过程参数支持
            特殊字符串的替换和处理
        resultMap元素
            作用
                事定义映射故则 级联的更新  定制类型转化器 等,resultMap定义的主要是一个结果集的映射关系,也就是sql到javaBean的映射关系定义,也支持级联等特性
                不过Mybatis 现有的版本  只支持 resultmap的查询 不支持 增删改
            resultmap元素的构成
            使用map存储结果集
                原则上是可以匹配所有的结果集,但是使用map接口意味着 可读性的下降,因为使用map需要进一步了解map键值的构成和数据类型 ,所以不是一种推荐的方式
            使用POJO存储结果集
                POJO是最常用的方式,一方面可以自动映射
        级联
            级联是resultMap中的配置,他需要复杂
            级联也是数据库实体的概念
            比如  一个角色对用多个用户   ,这就是一对n 的级联   ,还有n对n 的级联
            级联的好处是获取关联数据十分便捷 ,但是级联过多 会增加系统的复杂度,同事降低系统的性能,此增彼减
            分类
                鉴别器
                    他是一个根据某些条件决定好采用具体实现类级联的方案
                一对一
                一对多
            建立POJO
            配置映射条件
            N+1问题
                因为有线信息并不常用杂他们会执行几条毫无用处,导致数据库资源的损耗和系统性能下降
                只要再加入一个关联关系,就会变成N+1个级联
                为了应对N+1问题   MyBatis提供了延迟加载功能
            延迟加载
            另一种级联
                会完全解决N+1问题,但是会引发其他问题,首先Sql比较复杂,其次所需要的配置比之前的复杂的多 再次 一次性将所有的数据取出来就造成资源浪费
            多对多级联
        缓存
            在MyBatis中允许使用缓存 ,缓存一旦都放置在可高速读写的存储器上,比如服务器的内存
            它能够提高系统的性能
            一级缓存
                在SQLSession上缓存
                默认会开启一级缓存
            二级缓存
                在SQLSessionFactory上缓存
            缓存配置项,自定义和引用
        存储过程
            in 和out参数的存储过程
            游标的使用
    动态SQL
        概述
        if元素
        choose元素 when  otherwise 元素
        trim where set 元素
        foreach元素
        bind元素
            元素模糊查询时的替换,比如 || 和%%
    MyBatis的解析和运行原理
    插件
        略

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值