美文网首页
JDBC到持久层框架mybatis简单封装思路

JDBC到持久层框架mybatis简单封装思路

作者: 哈哈海 | 来源:发表于2021-01-27 23:56 被阅读0次
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 user where username = ?";
        // 创建preparedStatement
        preparedStatement = connection.getPreparedStatement(sql);
        // 设置查询参数
        preparedStatement.setString(0,"tom");
        // 向数据库发出执行sql,获得结果集
        resultSet = preparedStatement.executeQuery();
        // 遍历查询结果集
        while(resultSet.next()) {
            int id = resultSet.get("id");
            String username = resultSet.get("username"); 
            //封装User
        }
    } catch(Exception e) {

    } finally {
        //关闭资源
    }
}

观察上述JDBC代码,会发现如下几个问题:
1.数据库连接创建,释放资源频繁,造成资源浪费,影响系统性能。
2.存在硬编码,sql语句会和java代码编写到一起,并且sql语句的查询条件使用占位符传参数,一旦参数变化,sql变化,都是极其不易维护的。
3.结果集的解析也存在硬编码,比如解析列名,假如一个表有大量字段,光一个结果集的解析就是很大的工作量。再加上sql变化导致解析代码变化,系统不易维护,试想,如果将数据库数据封装成pojo对象,解析就比较容易了。

针对JDBC的以上缺点给出解决思路:
1.数据库的频繁连接释放,可以使用数据库的连接池初始化连接资源。
2.可以将sql语句写到xml文件中,这样java代码与sql语句分离。
3.使用反射,内省等底层技术,将数据库字段与java实体属性映射,做到操作实体就相当于操作数据库的目的。

简单框架设计。
请求端:主要是核心配置xml文件sqlMapConfig.xml配置比如环境数据源等信息,还有配置sql的mapper.xml文件。
框架端:
1.采用流的方式读取配置文件,存放到以下两个类中
Configuration:此类主要存放一些数据库配置信息,以及一个Map<唯一标记,Mapper> 唯一标识:namespace + id;
MappedStatement:对应mapper.xml配置文件,sql语句,statement类型,输出类型,输入参数类型等。
2.SqlSessionFactoryBuilder类:调用build方法,创建出sqlSessionFactory类,build()方法,主要干的事情就是利用dom4j解析配置文件,将解析出来的配置文件封装到Configuration类中,以及MappedStatement中。
3.sqlSession接口及实现类:sqlSessionFactory.openSession();会封装一些操作数据库的方法,主要封装crud方法,比如selectList(), selectOne()。
具体实现:封装JDBC完成对数据库表的查询操作

sqlSession中的getMapper方法就是用到了代理模式。被代理的类只有接口没有具体实现类,为什么要把被代理的类设计成接口,主要是因为java是单继承的,而生成的代理类是要继承Proxy的,所以设计成接口就可以避免掉这一问题。低层就是jdk的动态代理,反射技术。CGlib实现动态代理 好像是生成了被代理类的子类,从而实现功能增强的。
涉及到的设计模式:
Builder构建者设计模式、工厂模式、代理模式

简单记录用到的关键内容:
sqlMapConfig.xml,Mapper.xml , 流,InputStream,javaBean来存储配置信息,Configuration,Map<唯一标识,MappedStatement> 唯一标识:namespace + "."+id, MappedStatement,
一、.qlSessionFactoryBuilder,build()方法,dom4j 1.解析配置文件,封装Configuration 使用XMLConfigerBuilder,2.创建 sqlSessionFactory
二、XMLConfigerBuilder 与 XMLMapperBuilder
SqlSessionFactory,DefaultSqlSession
sqlSession,DefaultSqlSession,openSession()

Executor query SimpleExecutor query方法里:封装低层 JDBC BoundSql对sql进行处理,反射技术给占位符赋值。返回结果集的时候

未完待续。。。

相关文章

  • JDBC到持久层框架mybatis简单封装思路

    观察上述JDBC代码,会发现如下几个问题:1.数据库连接创建,释放资源频繁,造成资源浪费,影响系统性能。2.存在硬...

  • 浅谈JDBC与MyBatis

    浅谈JDBC与MyBatis MyBatis是一个基于Java的、封装了JDBC的持久层框架。 1 JDBC JD...

  • MyBatis 框架

    1 :MyBatis 框架概述 mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,...

  • 1. Mybatis环境搭建及其入门案例

    1、 MyBatis 框架概述 mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使...

  • Mybatis

    Mybatis是什么? mybatis是一个封装jdbc的持久层框架,属于ORM框架。它让我们只关注sql本身,而...

  • mybatis特性

    1,mybatis相关概念 1)mybatis持久层ORM框架,是对JDBC的封装。image.png2)对比db...

  • SSM框架-MyBatis

    MyBatis 1. 概述: MyBatis是一个基于Java持久层的框架,内部封装了JDBC,简化了开发时对数据...

  • Mybatis

    ​ Mybatis是一个优秀的持久层框架(Dao层框架),它是对JDBC的封装,使得开发者只需要关注Sql语句(业...

  • MyBatis【使用篇】

    1.MyBatis简述 mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只...

  • 阿里技术官十年经验,写出的Mybatis笔记,完整版免费下载

    前言: Mybatis是一款优秀的持久层框架。其封装了JDBC操作, 免去了开发人员编写JDBC 代码以及设置参数...

网友评论

      本文标题:JDBC到持久层框架mybatis简单封装思路

      本文链接:https://www.haomeiwen.com/subject/afvzzktx.html