一 mybatis相较与jdbc的优点?

        把SQL语句从Java代码中抽取出来,方便维护。并且修改SQL时不需要修改Java代码,不用手动设置参数和对结果集的处理 。       

二 Mybatis解决jdbc编程的问题

1、  数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。

解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

2、  将sql语句硬编码到java代码中(并且分散在各个Java类中),如果sql语句修改(比如where条件改变),需要重新编译java代码,不利于系统维护。

解决:对比MyBatis:将sql语句统一集中配置在xml配置文件(将Sql语句配置在XXXXmapper.xml文件中与java代码分离)中,即使sql变化,不需要对java代码进行重新编译。

3、  向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。

注:这种方式本身就有一定发 局限性,它是按照一定顺序传入参数的,要与占位符一一匹配。但是,如果我们传入的参数是不确定的(比如列表查询,根据用户填写的查询条件不同,传入查询的参数也是不同的,有时是一个参数、有时可能是三个参数),那么我们就得在后台代码中自己根据请求的传入参数去拼凑相应的SQL语句.

解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。更方便的是,Mybatis将sql语句及占位符号和参数全部配置在xml中。

4、  从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护。如果能将数据库记录封装成pojo对象解析比较方便。

解决:Mybatis自动将sql执行结果集自动映射成java对象,通过statement中的resultType定义输出结果的类型。

5、  重复SQL语句问题,几个功能的SQL语句其实都差不多,有些可能是SELECT后面那段不同、有些可能是WHERE语句不同。

解决:对比MyBatis:将SQL片段模块化,将重复的SQL片段独立成一个SQL块,然后在各个SQL语句引用重复的SQL块。

二 参考

1、(35条消息) mybatis总结和与hibernate比较_哎幽的成长-CSDN博客  https://abelyang.blog.csdn.net/article/details/46983879

2、Hibernate和mybatis的区别(面试题)_雷大大的程序猿的博客-CSDN博客_hibernate与mybatis的区别 https://blog.csdn.net/weixin_45708620/article/details/103199929

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐