JDBC、mybatis和hibernate区别

Jdbc

**是Java提供的一个操作数据库的API。定义了一系列的接口规范,具体的实现是由各数据库厂商实现的,属于典型的桥接模式。JDBC工作量大,需要先注册驱动和数据库信息、操作Connection、通过statement对象执行sql,将结果返回给resultset,然后从resultset中读取数据并转换为pojo对象,最后还要关闭数据库连接等资源,并且需要捕获可能出现的各种异常信息,较为繁琐。
JDBC操作数据库的流程:
1.注册驱动。
Class.forName(“com.mysql.jdbc.Driver”);或者
DriverManager.registerDriver(new com.mysql.jdbc.Driver)
2.获得连接Connection
Connection conn = (Connection) DriverManager.getConnection(url,user,pwd)
url为数据库地址,包含端口号。user为用户名,pwd为密码。
3.获取statement
Statement sta = conn.createStatement();
或者prepareStatement ps = conn.prepareStatement(sql);
prepareStatement 继承自Statement,比Statement效率更高,并且有效防止sql注入。
4.执行sql并返回结果。
5.关闭相应连接。

MyBatis

是一个支持普通SQL查询、存储过程和高级映射的优秀的持久层框架,MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的xml或注解用于配置和原始映射,将接口和Java中的POJO映射为数据库中的记录。
MyBatis是对JDBC的封装,相对于JDBC,MyBatis有以下优点:
1、优化获取和释放
一般在访问数据库时,都是通过数据库连接池来操作数据库,数据库连接池有多种,通过不同的配置来管理使用哪个数据库连接池。
2、SQL统一管理,对数据库进行存取操作
使用jdbc对数据库进行操作时,SQL语句分布在各个Java类中,可读性差,不利于维护,修改Java类中的SQL语句时,要进行重新编译。
MyBatis可以把SQL语句放在配置文件中进行统一配置管理,以后可以通过修改配置文件修改sql,不需要重新编译既可以运行。
3、生成动态SQL语句
查询中可能会用到一些属性的组合查询,当有某个条件时使用此条件查询。如果使用JDBC则需要写多条SQL。使用MyBatis则可以通过在配置文件中使用标签来对SQL语句进行拼接,生成动态SQL。
4、能够对结果集进行映射
使用JDBC进行查询时,返回结果集ResultSet,需要从结果集中取出结果封装为所需要的类型。
在MyBatis中可以通过配置直接将结果映射为需要的类型,<resultType=”**”>,例如可以配置为JavaBean对象,一个Map一个List等。

Hibernate

是建立在若干pojo通过xml映射文件(或注解)提供的规则映射到数据库表上的。可以通过pojo直接操作数据库的数据,提供的是一种全表映射的模型,使用hibernate已经可以不用写sql,直接时候用hql即可。
优点:1、消除了代码映射规则,全部分离到xml文件或者注解中去配置。
2、无需管理数据库连接,也配置到xml文件中
3、一个会话不需要操作多个对象,只需要操作session对象,关闭资源也只需要关闭一个session即可。
缺点:1、全表映射带来的不便,比如更新时需要发送所有的字段
2、无法根据不同的条件组装不同的sql
3、对多表关联和复杂的sql查询主持较差,需要自己写sql,然后将返回内容封装为pojo.
4、不能有效支持存储过程。
5、虽然有hql,但是性能较差,大型互联网系统往往需要优化sql,hibernate做不到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wmf_helloWorld

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值