前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >MyBatis 的由来(1)

MyBatis 的由来(1)

作者头像
兜兜毛毛
发布于 2021-04-13 08:36:40
发布于 2021-04-13 08:36:40
57300
代码可运行
举报
文章被收录于专栏:兜兜毛毛兜兜毛毛
运行总次数:0
代码可运行

JDBC原生操作

在早期开发还没有ORM框架时我们要操作数据库都是通过JDBC来操作。

JDBC测试代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 原生操作JDBC方式
 * @Author: maomao
 * @Date: 2021-04-07 10:59
 */
public class JdbcTest {

    public static final String URL = "jdbc:mysql://127.0.0.1:3306/data_test?useUnicode=true&characterEncoding=utf-8&rewriteBatchedStatements=true";
    public static final String USER_NAME = "root";
    public static final String PASSWORD = "123456";

    @Test
    public void testJdbc(){
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {
            //打开连接
            connection = DriverManager.getConnection(URL,USER_NAME,PASSWORD);

            //执行SQL
            statement = connection.createStatement();
            String sql = "select * from user_department where id = 1";
            resultSet = statement.executeQuery(sql);

            //获取结果集,并封装到java对象中
            while (resultSet.next()){
                User user = new User();
                user.setId(resultSet.getLong("id"));
                user.setName(resultSet.getString("name"));
                user.setAge(resultSet.getInt("age"));
                System.out.println(user);
            }
            //后续使用逻辑。。。。

        }catch (SQLException e){
            e.printStackTrace();
        }finally {
            //关闭资源
            try {
                if (resultSet != null) resultSet.close();
            } catch (SQLException se2) {
            }
            try {
                if (statement != null) statement.close();
            } catch (SQLException se2) {
            }
            try {
                if (connection != null) connection.close();
            } catch (SQLException se) {
                se.printStackTrace();
            }
        }
    }
}

主要分为以下几步:

  1. 注册数据库驱动
  2. 获取一个Connection连接
  3. 创建一个Statement对象
  4. 执行execute()方法执行sql,获得ResultSet结果集
  5. 通过ResultSet获取数据,给POJO赋值,转为java对象
  6. 最后关闭数据库相关资源,包括ResultSet、Statement、Connection

如果你 有幸 接触过一些早期的老项目,可能会在项目Dao层看到很多这样的操作。

好一点的会将数据库这些操作做一个工具封装,不好的你会看到每个查询方法中就会有类似以上测试代码一样的内容。

你可以想象一下现在每个常规的数据库操作,比如byId()、save()、update()等等这些方法在以前都包装在类似上边测试代码中的样子(瑟瑟发抖)。

ORM框架

ORM(Object Relational Mapping)也就是对象与关系映射

在早期诞生的比较主流的一个ORM框架是Hibernate,在2001年时诞生了第一个版本。

它帮我们解决了JDBC时期复杂的对象关系映射问题,简化了数据库开发操作。让开发人员无需再关注数据库连接、对象与数据库表的映射关系转换问题。所以早期主流开发J2EE是从SSH(struts + spring + hibernate)开始的。

hibernate本身功能非常强大,有自己的查询语法HQL可以通过操作对象关系来生成对应的SQL语句,也可以根据数据库方言生成兼容各数据库场景的SQL,所以移植性好。自动管理连接资源,还提供了缓存机制。

所以hibernate毫无疑问成为了当时J2EE开发时的主流ORM框架。

但Hibernate在业务复杂的项目中也存在一些问题:

  1. 需要学习新的HQL语法
  2. 自动生成SQL的方式,如果需要基于SQL去做一些优化的话,非常困难,导致性能优化是一个问题。
  3. 不支持动态SQL,无法根据条件自动生成SQL

基于以上问题,我们需要一个更加灵活的框架。此时就诞生了MyBatis(早期叫iBatis)。

MyBatis

MyBatis官网地址

”半自动化“的ORM框架MyBatis就解决了上边几个问题。”半自动化“是相当于Hibernate全自动化来说的。它的封装程度没有Hibernate那么高,不会自动生成全部的SQL语句,主要解决的是SQL和对象的映射问题。

在MyBatis里,sql和代码是分离的,所以会写SQL基本上就会用MyBatis,没有额外的学习成本。

所以J2EE又迎来了几次架构变更

  • SSI (Struts2 + Spring + iBatis)
  • SSM(Spring MVC + Spring + MyBatis)

MyBatis凭借小巧、简单易学、灵活、sql与代码解耦等特点慢慢取代了Hibernate成为主流ORM框架直到现在。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
持久层变化历史和Mybatis的到来
想一想,我最原始的最初的持久层是jdbc,我大二不会框架用了很久原生的.... 大致呢如下代码块所示MAVEN pom引入mysql
名字是乱打的
2021/12/22
3070
持久层变化历史和Mybatis的到来
MyBatis 源码学习笔记(一)- MyBatis概述
上述代码中使用Statement对象执行的查询,如果SQL语句中有参数占位符建议使用PreparedStatement对象来执行查询,PreparedStatement对象可以对SQL语句进行预编译,可以放置SQL注入;而且性能相对Statement会更好些。Jdbc针对数据库写操作需要对事务进行提交。
RiemannHypothesis
2022/08/19
2330
MyBatis 源码学习笔记(一)- MyBatis概述
为什么使用mybatis
在Mybatis出现以前,乃至于与mybatis相似的框架出现以前,我们是怎么连接数据库的? 依靠JDBC 而传统的JDBC连接数据库,大致是以下代码:
向着百万年薪努力的小赵
2022/12/02
4710
为什么使用mybatis
Mybatis源码解析1—— JDBC
  言归正传,只懂基础可不行,接下来将给大家带来高阶的源码解析教程,从浅入深,通过源码解析,图例结合,抽丝剥茧,让大家看的不吃力,并且能够深刻理解 Mybatis 这个框架的底层实现原理,让大家学到的不仅仅是这个框架用法,而是通过这个框架理解其设计思想。
IT可乐
2021/08/13
5690
Mybatis源码解析1—— JDBC
Java小技能:Java Data Base Connectivity
JDBC是一种用来在Java程序中执行SQL的API,它为java连接数据库提供了一组接口和类,可以为多种关系数据库提供统一访问。
公众号iOS逆向
2022/12/28
4460
Java小技能:Java Data Base Connectivity
学习JDBC需要掌握些什么?
不知道大家在工作中还有没有写过JDBC,我在大三去过一家小公司实习,里边用的就是JDBC,只不过它封装了几个工具类。写代码的时候还是能感受到「这是真真实实的JDBC代码」
Java3y
2020/03/31
8650
Mybatis学习笔记1
本章目录 Mybatis学习笔记1 1、mybatis的介绍 2、使用jdbc操作数据库存在的问题 3、 Mybatis的架构 4、Mybatis的入门程序 4.1根据用户id查询一个用户信息 4.2根据用户名称模糊查询用户信息列表 4.3添加用户 4.4更新用户 4.5删除用户 提示:点击文章底部的“阅读原文”查看以前所有的笔记 1、MyBatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software fou
Java学习
2018/04/13
9650
Mybatis学习笔记1
「源码」MyBatis源码环境搭建及分析
之前阅读了JDK常用容器的源码本章就开始阅读Mybatis源码。不过在阅读之前我们首先搭建一下源码阅读环境,这样有利于我们后面的阅读,更加可以一边写注释一边的Debug。
程序员小明
2020/05/13
1.1K0
「源码」MyBatis源码环境搭建及分析
JDBC存在什么问题?MyBatis是如何解决的?
在Java开发领域,与数据库的交互是不可或缺的一环。JDBC(Java Database Connectivity)作为Java连接和操作数据库的标准API,虽然提供了基础的数据库访问功能,但在实际开发中却面临着诸多挑战。而MyBatis这一持久层框架的出现,为解决JDBC的问题提供了全新的思路和方法。本文将深入剖析JDBC存在的问题,并探讨MyBatis是如何巧妙地化解这些问题的。
用户11397231
2025/01/24
1300
JDBC存在什么问题?MyBatis是如何解决的?
mybatis框架复习必看-全网最强的MyBatis学习教程
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
晴天娃娃只会笑不会哭
2022/03/23
5800
Mybatis(一)走进Mybatis与FisrtExample
一直在使用,从未系统的总结起来。所以这里给大家带来的是mybatis的总结,系统大家能够对这个框架有一定的系统的学习与认识。 mybatis和Hibernate应该是现在主流的ORM框架了。 mybatis学习的步骤: mybatis入门 --> 全局配置文件和映射文件详解 --> 高级映射(一对一,一对多,多对多) -->延迟加载机制 -->一级缓存, 二级缓存(整合ehcache) --> spring整合mybatis --> 逆向工程
用户1195962
2018/08/02
6700
Mybatis(一)走进Mybatis与FisrtExample
SpringBoot整合Mybatis,你真的了解原理吗?
在前面的博文中,我们已经对SpringBoot的相关基础知识有了深入的了解,不仅知道了什么是SpringBoot,以及如何快速开发一个SpringBoot应用,例如(Spring Boot简介与快速搭建),而且深入的学习了它的自动配置原理,知道了SpringBoot中包含很多的Starter,但是这些Starter我们如何在项目中使用呢?这篇博文,我们重点介绍SpringBoot数据访问相关的内容,不仅仅是简单的整合,而是要明白其中的原理,开始吧。
程序猿小亮
2021/12/07
6990
SpringBoot整合Mybatis,你真的了解原理吗?
快速学习-Mybatis框架概述
框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。
cwl_java
2020/04/01
2720
MyBatis学习笔记(一) --- MyBatis入门
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 
挽风
2021/04/13
1.3K0
MyBatis学习笔记(一) --- MyBatis入门
深入浅出MyBatis:JDBC和MyBatis介绍
最近在休陪产假,时间比较零碎,准备看2本书充实下,一本是「深入浅出MyBatis:技术原理与实践」,一本是「RabbitMQ实战:高效部署分布式消息队列」,为了加深记忆和理解,会进行整理、扩展和记录。
情情说
2018/04/27
1K0
深入浅出MyBatis:JDBC和MyBatis介绍
了解MyBatis——让开发更简捷与规范
开发Web应用,数据的存储和处理往往离不开数据库和SQL语句。在使用Java开发的Web应用中,自然也少不了连接数据库的步骤。在底层连接数据库的时候,一般使用JDBC技术,也就是Java的一种提供数据库连接和操作SQL的底层API。但是互联网技术正在飞速发展,使用原始JDBC已经满足不了项目的开发需求了,这就使得Hibernate、MyBatis(iBatis)、JPA、JDO等一些优秀的ORM(Object Relational Mapping,对象关系映射)框架诞生,它们不仅结合了原生JDBC的功能,还使开发简捷化、规范化。
博文视点Broadview
2020/06/11
4330
了解MyBatis——让开发更简捷与规范
快速学习MyBatis-MyBatis框架概述
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/12/11
3560
Mybatis入门 Mybatis存在的意义 解决的问题 基本操作
原始jdbc开发存在的问题如下: 1.数据库创建及频繁释放造成系统资源浪费 2.sql语句在代码中硬编码,实际运用中sql的变化较大,sql变动需要改变java代码 3.查询操作,需要手动将结果集里的数据封装到实体中,插入操作时,需要手动将实体的数据设置到sql语句的占位符
一只胡说八道的猴子
2020/11/04
4650
Mybatis入门 Mybatis存在的意义 解决的问题 基本操作
Mybatis_day01
Mybatis_day01 前言 Jdbc演变到mybatis jdbc jdbc编程 publicstaticvoid main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { //加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); //通过驱动管理类获取数据
Java帮帮
2018/03/19
1.1K0
Mybatis_day01
MyBatis 从认识到环境搭建
在这个类中包括:数据库驱动的加载、数据库连接的配置、连接对象的获取、以及释放关闭,以及具体的SQL以及其执行语句,下面是一个
BWH_Steven
2020/02/20
4020
相关推荐
持久层变化历史和Mybatis的到来
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文