从 JDBC 到 Mybatis

JDBC 操作数据库流程

1、加载驱动
2、获取数据库连接
3、获取执行者对象
4、执行sql语句并返回结果
5、处理结果


  • 代码
public class JDBCTest {


    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");//MySQL5以后可直接省略
        //获取数据库连接
        Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/project","root","zcq200427");
        //获取执行者对象
        Statement stat=con.createStatement();
        //执行sql语句并返回结果
        String sql="select * from user";
        ResultSet re=stat.executeQuery(sql);
        //处理结果
        while (re.next()){
            System.out.println(re.getLong("id")+"\t"+re.getString("name")+"\t" );
        }
        //释放资源
        con.close();
    }
}
  • 数据库驱动
    数据库驱动是应用程序和数据库存储之间的一种接口,数据库厂商为了某一种开发语言环境(比如Java,C)能够实现数据库调用而开发的类似翻译员功能的程序,将复杂的数据库操作与通信抽象成为了当前开发语言的访问接口。
  • Connection 用于与数据库简历连接,Mysql 内部有对应的连接池以达到连接资源的复用
  • 通过 Statement 来简化数据库操作的流程
  • 通过 ResultSet 来获取 SQL 执行的结果集
  • 关闭连接

JDBC 的弊端

        //注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");//MySQL5以后可直接省略
        //获取数据库连接
        Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/project","root","zcq200427");
        //获取执行者对象
        Statement stat=con.createStatement();
  • 注意

1、前面三个步骤可以统一封装成 DBUtils (getConnection() , closeConnection() , getStatement() 等)
2、数据库连接在使用时就创建,不使用时就关闭,造成了极大的数据库资源浪费
3、SQL 语句在 JAVA 代码中不方便我们进行统一的管理
4、手动设置 PreparedStatement 造成硬编码
5、从 ResultSet 获取结果集存在硬编码

Mybatis

Mybatis 介绍

1、它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低
什么是ORM?
2、Object Relation Mapping,对象关系映射。对象指的是Java对象,关系指的是数据库中的关系模型,对象关系映射,指的就是在Java对象和数据库的关系模型之间建立一种对应关系,比如用一个Java的Student类,去对应数据库中的一张student表,类中的属性和表中的列一一对应。Student类就对应student表,一个Student对象就对应student表中的一行数据
3、为什么mybatis是半自动的ORM框架?
用mybatis进行开发,需要手动编写SQL语句。而全自动的ORM框架,如hibernate,则不需要编写SQL语句。用hibernate开发,只需要定义好ORM映射关系,就可以直接进行CRUD操作了。由于mybatis需要手写SQL语句,所以它有较高的灵活性,可以根据需要,自由地对SQL进行定制,也因为要手写SQL,当要切换数据库时,SQL语句可能就要重写,因为不同的数据库有不同的方言(Dialect),所以mybatis的数据库无关性低。虽然mybatis需要手写SQL,但相比JDBC,它提供了输入映射和输出映射,可以很方便地进行SQL参数设置,以及结果集封装。并且还提供了关联查询和动态SQL等功能,极大地提升了开发的效率。并且它的学习成本也比hibernate低很多


Mybatis 架构设计

posted @ 2023-07-04 11:03  ayiZzzz  阅读(13)  评论(0编辑  收藏  举报