MyBatis(1)Mybaits框架的由来和工作原理

前段时间发现自己的的MyBatis的掌握的不好,很多细节地方没有理解到位。
最近有时间重新学习了一下,并整理了几篇博客。

一Mybaits框架的由来

我们先来看下传统JDBC连接数据库的代码:

Public static void main(String[] args) {
            Connection connection = null;
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;

            try {
                //加载数据库驱动
                Class.forName("com.mysql.jdbc.Driver");

                //通过驱动管理类获取数据库链接
                connection =  DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");
                //定义sql语句 ?表示占位符
            String sql = "select * from test_user where username = ?";
                //获取预处理statement
                preparedStatement = connection.prepareStatement(sql);
                //向数据库发出sql执行 查询,查询出结果集
                resultSet =  preparedStatement.executeQuery();
                //遍历查询结果集
                while(resultSet.next()){
                    System.out.println(*********);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                //释放资源
                if(resultSet!=null){
                    try {
                        resultSet.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(preparedStatement!=null){
                    try {
                        preparedStatement.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(connection!=null){
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                 }
            }
        } 
   }

我们可以很容易看出,传统的JDBC代码有很多重复的内容,而且大部分是硬编码,效率低,系统不易维护。比如新增一个表时,所有的代码都要重写。(当然通过封装代码能够解决一部分问题,但仍不太好)

JDBC的设想:
1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。
设想:使用数据库连接池管理数据库连接。

2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。

3、向Statement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
设想:将sql语句及占位符号和参数全部配置在xml中。

4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。
设想:将查询的结果集,自动映射成java对象。

当当当,在以上这些设想的基础上,Mybatis这个伟大的框架就诞生了,Apache公司的顶级项目之一。

二Mybatis工作原理

mybatis是一个持久层的框架。
mybatis托一开始管到goolecode下,再后来托管到github下。
官网:https://github.com/mybatis/mybatis-3/releases。logo是非常可爱的小鸟@_@

mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。

mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)

最后来张图镇楼,讲的是Mybatis的原理(这些底层原理,懂不懂没关系,会用就行了。。)

这里写图片描述

猜你喜欢

转载自blog.csdn.net/m0_37293461/article/details/81144606
今日推荐