zoukankan      html  css  js  c++  java
  • Mybatis基础知识点

    1. Mybatis框架优缺点

      优点:

        1. 易于上手和掌握。

        2. sql写在xml里,便于统一管理和优化。

        3. 解除sql与程序代码的耦合。

        4. 提供映射标签,支持对象与数据库的orm字段关系映射

        5. 提供对象关系映射标签,支持对象关系组建维护

        6. 提供xml标签,支持编写动态sql

      缺点:

        1. sql工作量很大,尤其是字段多、关联表多时,更是如此。

        2. sql依赖于数据库,导致数据库移植性差。

        3. 由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。

        4. 字段映射标签和对象关系映射标签仅仅是对映射关系的描述,具体实现仍然依赖于sql。(比如配置了一对多Collection标签,如果sql里没有join子表或查询子表的话,查询后返回的对象是不具备对象关系的,即Collection的对象为null

        5. DAO层过于简单,对象组装的工作量较大。

        6.  不支持级联更新、级联删除。

        7. 编写动态sql,不方便调试,尤其逻辑复杂时。

        8 提供的写动态sqlxml标签功能简单(连struts都比不上),编写动态sql仍然受限,且可读性低。

        9. 若不查询主键字段,容易造成查询出的对象有覆盖现象。

        10. 参数的数据类型支持不完善。(如参数为Date类型时,容易报没有getset方法,需在参数上加@param

        11. 多参数时,使用不方便,功能不够强大。(目前支持的方法有map、对象、注解@param以及默认采用012索引位的方式)

        12. 缓存使用不当,容易产生脏数据。

    2.SqlSessionFactoryBuilderSqlSessionFactory以及SqlSession生命周期以及作用域

      SqlSessionFactoryBuilder的最大特点是:用过即丢.一旦被创建了SqlSessionFactory对象之后这个类就不需要存在了,因此SqlSessionFactoryBuilder的最佳范围就是存在于方法体内,也就是局部变量而已.

      SqlSessionFactory对象一旦创建,就会在整个应用运行的过程中始终存在.没有理由去销毁或再创建它,并且在应用运行中也不建议多次创建SqlSessionFactory.因此SqlSessionFactory的最佳作用域是Application,即随着应用的生命周期一同存在.那么这种”存在于整个应用运行期间,并且同时只存在一个对象实例”的模式就是所谓的单例模式(指在应用运行期间有且仅有一个实例).

      SqlSession对应着一次数据库会话。由于数据库会话不是永久的,因此SqlSession的前期也不应该是永久的。 相反,在每次访问数据库时 都需要创建它(注意:并不是说在SqlSession家只能执行-次Sql. 是完全可以执行多次的,但是若关闭了SqlSession, 那么就需要重新创建它、有建SqlSession的地方只有一个,那就是SqlSessionfactory对象的opesioin()方法。
      需要注意的是每个线程都有自己的SqISession实例,SqlSession 实例不能被共享,也不是线程安全的。因此最佳的作用城范围是request 作用域或者方法体作用域内。
    关闭SqlSession是非常重要的。必须要确保SqlSessison在finally语句块中正常关闭。

    3. #{}${}的区别

      #{}表示一个占位符号

      通过#{}可以实现 preparedStatement 向占位符中设置值,自动进行 java 类型和 jdbc 类型转换,#{}可以有效防止 sql 注入。 #{}可以接收简单类型值或 pojo 属性值。 如果 parameterType 传输单个简单类型值,#{}括号中可以是 value 或其它名称。

      ${}表示拼接 sql

      通过${}可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转换, 可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值, {}可以接收简单类型值或 pojo 属性值,如果 parameterType 传输单个简单类型值,可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,{}括号中只能是 value

  • 相关阅读:
    【Java】RuleSource约束常用方法整理
    【Oracle】多次提交造成性能慢及处理方法
    【Oracle】ORA-28000: the account is locked-的解决办法
    【Eclipse】几个最重要的快捷键
    JavaScript 垃圾回收总结
    JavaScript 执行环境(作用域)总结
    JavaScript基本数据类型
    全局 Ajax 事件处理器
    require.js 模块化
    配置apache反向代理进行跨域
  • 原文地址:https://www.cnblogs.com/Zzzzn/p/11631526.html
Copyright © 2011-2022 走看看