为什么要用MyBatis?MyBatis解决了什么问题?

1)传统的JDBC程序有以下不足:
1.1)大量重复代码;
1.2)需要在程序中手动做资源管理;
1.3)对结果集的处理复杂,需要对每个字段做特殊处理;
1.4)SQL耦合在程序中;
2)针对以上不足,应运而生了一些工具包,以Apache DBUtils和Spring JDBC最为典型
2.1)Apache DBUtils解决的问题:
2.1.1)其核心工具类是QueryRunner,其内部封装了大量的增删改查的方法避免大量重复代码;
2.1.2)QueryRunner通过传入一个数据源统一做资源管理;
2.1.3)结果集通过指定一个带有泛型的BeanHandler<>或BeanListHandler<>来自动装配;
2.2)Spring JDBC解决的问题:
2.2.1)其核心类是JdbcTemplate,里面封装了各种各样的execute、query、update方法,避免了代码重复;
2.2.2)初始化时通过传入一个数据源做资源的统一管理;
2.2.3)对于结果集的处理,其提供了一个RowMapper接口,通过实现RowMapper接口的mapRow方法可以自定义结果集的转换,
一般会写一个BaseRowMapper作为一个通用的mapper;
2.3)Apache DBUtils和Spring JDBC存在的不足
2.3.1)SQL语句还是硬编码的,依旧存在耦合的问题;
2.3.2)参数只能按照固定的顺序传入,它是通过占位符替换的不能传入对象或map,不能自动映射;
2.3.3)在方法里面,可以把结果集映射成实体类但是不能把实体类映射成数据库中的一条记录,即没有自动生成SQL的功能;
2.3.4)查询没有缓存的功能,性能不够好;
3)针对工具包的一些不足,出现了真正的ORM框架–Hibernate
3.1)Hibernate的优点:
3.1.1)根据数据库方言自动生成SQL,移植性好;
3.1.2)支持数据源,可以自动管理连接资源;
3.1.3)实现了对象和关系型数据库的完全映射,操作对象就像操作数据库记录一样;
3.1.4)提供了缓存功能机制;
3.2)Hibernate的缺点:
3.2.1)使用get、update、save对象的这种方式,实际操作的是所有字段,没有办法指定部分字段,不够灵活;
3.2.2)自动生成SQL的方式,如果要针对SQL做优化会有困难;
3.2.3)不支持动态SQL,无法根据条件自动生成SQL;
4)针对Hibernate的不足,出现了一个更加灵活的ORM框架–MyBatis
4.1)使用数据源连接池对资源进行管理;
4.2)SQL和代码完全解耦,集中管理;
4.3)结果集的映射可以灵活配置;
4.4)支持动态参数映射,可以传入一个对象或map;
4.5)支持动态SQL,可以根据条件动态生成SQL;
4.6)重复SQL的提取;
4.7)缓存的管理;
4.8)支持插件机制,可以对Mybatis进行动态扩展;

你可能感兴趣的:(MyBatis)