mybatis的优缺点

前言:

 最近面试遇到一个问题:mybatis的缺点?当时,感觉自己回答的不是很好,特地做一个总结.

前提知识:

  (暂未发布)mybatis的相关知识

  (暂未发布)JAVA的JDBC编程

 mybatis简介:

  mybatis是一种半自动化(XxxMapper.xml手动编写Sql语句与配置java与数据库表映射)的封装JDBC的持久层框架.

优点:

1.基于SQL语法,简单易学。

2.支持动态SQL(<SQL>/<if test="">/<foreach>)

通过Mapper.xml的<mapper>的namespace属性值+<select>/<update>/<insert>/<delete>的id值

3.Sql代码与java代码分离,解耦合,便于优化,管理

4.支持mybatis-generator配置数据库源表自动生成javaBean代码

 

缺点:

1. 字段多、关联表多时,SQL语句将会比较长,导致SQL编写量大

2. sql语句依赖于数据库,导致数据库移植性差(如mysql数据库移植到Oracle数据库 mysql与oracle某些)

3.当javaBean属性为int与数据库字段varchar在传递单个参数时,#{value,javaType=int,jdbcType=VARCHAR}否则报异常,

  传递对象参数需要构建<parameterMap>

属性类型与字段类型不匹配时,在返回对象参数时,需要构建<resultMap>

由于存在类型转化,会导致对于查询列索引失效

4.缓存操作鸡肋

不管有没有配置需要使用缓存(一级缓存,二级缓存)、是否更新缓存(<cache>配置),都要去计算CacheKey,不使用缓存、也不更新缓存的情况下,这种计算完全是浪费。

5.由于Mapper.xml中的<select>/<update>/<insert>/<delete>的id值必须唯一,也就是对应接口的方法名必须唯一,导致接口不能存在重载的方法

 

 

 


 

 
 

posted @ 2019-03-13 14:09  等价交换原则  阅读(354)  评论(0编辑  收藏  举报