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基础知识点的更多相关文章

  1. fastclick 源码注解及一些基础知识点

    在移动端,网页上的点击穿透问题导致了非常糟糕的用户体验.那么该如何解决这个问题呢? 问题产生的原因 移动端浏览器的点击事件存在300ms的延迟执行,这个延迟是由于移动端需要通过在这个时间段用户是否两次 ...

  2. .NET基础知识点

    .NET基础知识点   l  .Net平台  .Net FrameWork框架   l  .Net FrameWork框架提供了一个稳定的运行环境,:来保障我们.Net平台正常的运转   l  两种交 ...

  3. JavaScript 开发者经常忽略或误用的七个基础知识点(转)

    JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它.昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序.很多新 ...

  4. JavaScript 开发者经常忽略或误用的七个基础知识点

    JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它.昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序.很多新 ...

  5. JavaScript开发者常忽略或误用的七个基础知识点

    JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它.昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序.很多新 ...

  6. JavaScript语言基础知识点图示(转)

    一位牛人归纳的JavaScript 语言基础知识点图示. 1.JavaScript 数据类型 2.JavaScript 变量 3.Javascript 运算符 4.JavaScript 数组 5.Ja ...

  7. JavaScript 语言基础知识点总结

    网上找到的一份JavaScript 语言基础知识点总结,还不错,挺全面的. (来自:http://t.cn/zjbXMmi @刘巍峰 分享 )  

  8. c语言学习之基础知识点介绍(三):scanf函数

    本节继续介绍c语言的基础知识点. scanf函数:用来接收用户输入的数据. 语法:scanf("格式化控制符",地址列表); 取地址要用到取地址符:&(shift+7) 例 ...

  9. c语言学习之基础知识点介绍(二):格式化控制符和变量的补充

    上节简单介绍了c语言中的一些基础知识点,本节将对之前介绍的不够详细的知识点进行补充. 格式化控制符的消息介绍: %d的其他控制符: 1.%md:m代表这个整数位占用多少位,m是一个整数.实际数字不足的 ...

随机推荐

  1. javascript 基础知识汇总(一)

    1.<script> 标签 1) 可以通过<script> 标签将javaScript 代码添加到页面中 (type 和language 属性不是必须的) 2)外部的脚本可以通 ...

  2. centos7.2+jdk7.9搭建haddoop2.7.0伪分布式环境(亲测成功)

    最近想研究下hadoop,玩一玩大数据,废话不多说,就此开始! 所用环境:   xshell 5.0(ssh连接工具,支持ftp,可向虚拟机传文件) CentOS-7-x86_64-DVD-1511. ...

  3. 利用poi包装一个简单的Excel读取器.一(适配一个Reader并提供readLine方法)

    通常,读文本我们会使用BufferedReader,它装饰或者说管理了InputStreamReader,同时提供readLine()简化了我们对文本行的读取.就像从流水线上获取产品一样,每当取完一件 ...

  4. TK图形界面

    import tkinter 1.使用tkinter模块前 一般先要建立一个tkinter的对象     例: window = tkinter.TK()   2.建立完对象设置好窗口属性以及所有功能 ...

  5. CodeForces 103D Time to Raid Cowavans 询问分块

    Time to Raid Cowavans 题意: 询问 下标满足 a + b * k 的和是多少. 题解: 将询问分块. 将b >= blo直接算出答案. 否则存下来. 存下来之后,对于每个b ...

  6. Period UVALive - 3026

    For each prefix of a given string S with N characters (each character has an ASCII code between 97 a ...

  7. 洛谷 P4206 [NOI2005]聪聪与可可 题解

    题面 输入 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行,每 ...

  8. LeetCode探索初级算法 - 动态规划

    LeetCode探索初级算法 - 动态规划 今天在LeetCode上做了几个简单的动态规划的题目,也算是对动态规划有个基本的了解了.现在对动态规划这个算法做一个简单的总结. 什么是动态规划 动态规划英 ...

  9. mysql之explain详解

    mysql之explain详解 mysql之explain各个字段的详细意思: 字段 含义 select_type 分为简单(simple)和复杂 type all : 即全表扫描 index : 按 ...

  10. 关于Java网络编程

    一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...