码迷,mamicode.com
首页 > 其他好文 > 详细

myBatis基础知识点

时间:2019-10-08 19:05:39      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:导致   工作   单例   标签   收藏   ann   bsp   cat   orm   

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 提供的写动态sql的xml标签功能简单(连struts都比不上),编写动态sql仍然受限,且可读性低。

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

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

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

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

2.SqlSessionFactoryBuilder和SqlSessionFactory以及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。

 
好文要顶 关注我 收藏该文 技术图片 技术图片

myBatis基础知识点

标签:导致   工作   单例   标签   收藏   ann   bsp   cat   orm   

原文地址:https://www.cnblogs.com/danxun/p/11636828.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!