mybatis的优缺点
前言:
最近面试遇到一个问题:mybatis的缺点?当时,感觉自己回答的不是很好,特地做一个总结.
前提知识:
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值必须唯一,也就是对应接口的方法名必须唯一,导致接口不能存在重载的方法