字节跳动飞书内推!
北京、杭州、武汉、广州、深圳、上海,六大城市等你来投。
感兴趣的朋友可以私我咨询&内推,也可以通过链接直接投递!
海量HC,极速响应,快来和我成为同事吧。
今日头条、抖音、Tik Tok也可以内推~
点击进入我的博客
MyBatis详解1.概述
MyBatis详解2.MyBatis使用入门
MyBatis详解3.MyBatis配置详解
MyBatis详解4.映射器Mapper
MyBatis详解5.动态SQL
MyBatis详解6.MyBatis技术内幕
MyBatis详解7.插件
MyBatis详解8.集成Spring
1 JDBC编程
什么是JDBC
- Java程序都是通过JDBC(Java Data Base Connectivity)连接数据库的,这样我们就可以通过SQL对数据库编程。
- JDBC是由SUN公司提出的一系列规范,但是它只定义了接口规范,而具体的实现是交由各个数据库厂商去实现的,因为每个数据库都有其特殊性,所以JBC就是一种典型的桥接模式。
JDBC编程过程
public void func() throws Exception {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
Connection connection = DriverManager.getConnection(url, username, null);
PreparedStatement ps = connection.prepareStatement("SELECT * FROM tb_name LIMIT 1");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
System.out.println("Id = " + rs.getString("id") + " Name = " + rs.getString("name"));
}
rs.close();
ps.close();
connection.close();
}
- 使用JDBC编程需要连接数据库,注册驱动和数据库信息。
- 操作Connection,打开Statement对象。
- 通过Statement执行SQL,返回结果到ResultSet对象。
- 使用ResultSet读取数据。
- 关闭数据库相关资源。
传统JDBC的弊端
- 工作量相对较大,我们需要先连接、处理JDBC底层事务、处理数据类型;还要操作Connection对象、Statement对象、Resultset对象去拿到数据,并准确关闭它们。
- 我们要对JDBC编程可能产生的异常进行捕捉处理并正确关闭资源。
2 什么是ORM
ORM(Object Relational Mapping,对象关系映射)模型就是数据库的表和简单Java对象(POJO)的映射关系模型,它主要解决数据库数据和POJO对象的相互映射。通过这层映射关系就可以简单迅速地把数据库表的数据转化为POJO,以便程序员更加容易理解和应用Java程序
3 Hibernate
Hibernate是建立在若干POJO通过XML映射文件(或注解)提供的规则映射到数据库表上的。换句话说,我们可以通过POJO直接操作数据库的数据。它提供的是一种全表映射的模型,使用者不需要编写SQL语言,只要使用HQL语言(Hibernate Query Langurage)就可以了。
Hibernate的优势
- 消除了代码的映射规则,它全部被分离到了XML或者注解里面去配置。
- 无需再管理数据库连接,它也配置在XML里面。
- 一个会话中,不要操作多个对象,只要操作 Session对象即可。
- 关闭资源只需要关闭一个Session便可。
Hibernate的不足
- 全表映射带来的不便,比如更新时需要发送所有的字段。
- 无法根据不同的条件组装不同的SQL。
- 对多表关联和复杂SQL査询支持较差,需要自己写SQL,返回后自己将数据组装为POJO。
- 不能有效支持存储过程。
- 虽然有HQL,但是性能较差,大型互联网系统往往需要优化SQL,而Hibernate做不到。
4 MyBatis
为了解决 Hibernate的不足,一个半自动映射的框架MyBatis应运而生。
什么是半自动
- MyBatis之所以是半自动的,是因为它需要手工匹配提供POJO、SQL和映射关系,而全表映射的Hibernate只需要提供POJO和映射关系便可。
- MyBatis所需要提供的映射文件包含以下三个部分:SQL、映射规则、POJO。
什么时候用MyBatis
- JDBC的方式在目前而言极少用到
- Hibernate作为较为流行的Java ORM框架,它确实编程简易,需要我们提供映射的规则,完全可以通过IDE生成,同时无需编写SQL确实开发效率优于MyBatis。但他的上述介绍过的一些缺点,注定了 Hibernate只适用于在场景不太复杂,要求性能不太苛刻的时候使用。
- 如果你需要一个灵活的、可以动态生成映射关系的框架,那么MyBatis确实是一个最好的选择。它的缺陷是需要你提供映射规则和SQL,所以它的开发工作量比Hibernate略大一些。