初识Mybatis

118 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

JDBC编程

在聊Mybatis之前,先来了解下比较传统的JDBC

所谓JDBC,就是SUN公司定义的一套接口规范。具体的实现都是交给各个数据库厂商去实现。一般Java程序连接数据库,底层都是通过JDBC连接的。

我们来看看用JDBC操作数据库的代码

/**
     * jdbc原生sql执行方式
     * @throws ClassNotFoundException
     */
    private void jdbcConnDb() throws ClassNotFoundException {

        // 加载驱动到JVM内存
        Class.forName("com.mysql.cj.jdbc.Driver");

        String url = "jdbc:mysql://127.0.0.1:3306/mybatis_study?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
        String sql = "select * from t_user where id = ?";

        // JDK1.8新特性,try块中自动关闭资源
        try (   // 建立数据库连接
                Connection connection = DriverManager.getConnection(url);
                // 获取预编译sql执行会话
                PreparedStatement preparedStatement = connection.prepareStatement(sql)){

            // 设置参数
            preparedStatement.setLong(1,2L);

            // 执行预编译sql,获得结果对象
            ResultSet rs = preparedStatement.executeQuery();
            // 需要先判断结果集是否有值,在进行赋值操作
            while (rs.next()){
                long id = rs.getLong("id");
                String name = rs.getString("name");

                User user = User.builder().id(id).name(name).build();
                System.out.println(user);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

从代码也可以看到,用JDBC操作数据库大致分为以下几步

  • 注册驱动,获取数据库连接
  • 操作数据库连接对象,打开Statement对象
  • 对Statement设置参数后执行sql,返回resultSet结果对象
  • 从resultSet读取数据,根据需要转换为对应的对象
  • 关闭打开的数据库资源

由此,就会发现,传统的JDBC操作数据库每次执行事务都需要经过上述步骤,很是繁琐,随后ORM模型就随之出现了。

ORM模型

简单来说,就是对象映射模型。程序中的实体类对应着数据库中的表。

全自动映射ORM框架

Hibernate

这个框架了解不深,也不是今天的主角,就简单的介绍下。

优点

  • 大大简化了开发,甚至连sql都不用写,提高开发效率
  • 对象化,开发者只需要面向对象的方式进行数据库的操作

缺点

  • 全表映射带来很多不便,比如更新的时候会发送所有的字段信息去更新
  • 无法根据不同的条件组装不同的sql
  • 对多表关联或者复杂sql的查询支持较差;需要自己编写sql,并且最后还需要自己将数据组装成对象返回
  • 不能有效的支持存储过程
  • 对于一些需要进行sql优化的场景,不能很好的支持,缺乏灵活性

Mybatis Plus

Mybatis Plus是一个Mybatis的增强工具,号称只对Mybatis进行增加,并不对核心功能进行修改,为简化开发,提升效率而生。

具体使用和特性请参考:baomidou.com/

半自动映射ORM框架

Mybatis

那么,今天的正主来了--Mybatis,一个半自动映射ORM框架。

他的出现解决Hibernate缺少灵活性的缺点

半自动映射的体现

因为需要手动匹配对象,sql及数据库表信息的映射关系

映射文件包含:

  • 实体对象
  • sql
  • 映射规则

mybatis的使用场景

由于互联网发展的迅速,项目的业务和技术难度愈发的大,我觉得mybatis适用市场的大部分场景。

虽然他对比Hibernate而言,相对开发难度较大。

但是Mybatis解决了Hibernate致命的缺点:难以动态变化sql,对于sql的灵活性较差。这也就造成了Hibernate不太适应业务比较复杂且对性能有一定要求的场景中,最好使用Mybatis。

所以我觉得学习Mybatis框架是一件比较有性价比的事情,从今天开始准备写一个关于mybatis的专栏,和xdm一起学习。

结语

觉得写的不错的xdm,可以点波小赞。

文章难免有疏漏,也欢迎xdm指正。

一起学习,一起成长!