zoukankan      html  css  js  c++  java
  • 手写自定义mybatis框架

    前言

    原始jdbc开发存在的问题如下:
    1、 数据库连接创建、释放频繁造成系统资源浪费,从⽽影响系统性能。
    2、 Sql语句在代码中硬编码,造成代码不易维护,实际应⽤中sql变化的可能较⼤,sql变动需要改变java代码。
    3、 使⽤preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不⼀定,可能多也可能少,修改sql还要修改代码,系统不易维护。
    4、 对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据 库记录封装成pojo对象解析⽐较⽅便。

    问题解决思路

    ①使⽤数据库连接池初始化连接资源。
    ②将sql语句抽取到xml配置⽂件中。
    ③使⽤反射、内省等底层技术,⾃动将实体与表进⾏属性与字段的⾃动映射。

    ⾃定义框架设计

    使⽤端:

    提供核⼼配置⽂件:
    sqlMapConfig.xml : 存放数据源信息,引⼊mapper.xml。
    Mapper.xml : sql语句的配置⽂件信息。

    框架端:

    1.读取配置⽂件
    读取完成以后以流的形式存在,我们不能将读取到的配置信息以流的形式存放在内存中,不好操作,可以创建javaBean来存储
    (1)Configuration : 存放数据库基本信息、Map<唯⼀标识,Mapper> 唯⼀标识:namespace + "." + id
    (2)MappedStatement:sql语句、statement类型、输⼊参数java类型、输出参数java类型
    2.解析配置⽂件
    创建sqlSessionFactoryBuilder类:
    ⽅法:sqlSessionFactory build():
    第⼀:使⽤dom4j解析配置⽂件,将解析出来的内容封装到Configuration和MappedStatement中
    第⼆:创建SqlSessionFactory的实现类DefaultSqlSession
    3.创建SqlSessionFactory:
    ⽅法:openSession() : 获取sqlSession接⼝的实现类实例对象
    4.创建sqlSession接⼝及实现类:主要封装crud⽅法
    ⽅法:selectList(String statementId,Object param):查询所有
    selectOne(String statementId,Object param):查询单个
    具体实现:封装JDBC完成对数据库表的查询操作
    涉及到的设计模式:
    Builder构建者设计模式、⼯⼚模式、代理模式

    ⾃定义框架实现

    代码详见:https://gitee.com/mgyboom/my-persistence

  • 相关阅读:
    CSRF攻击与防御
    nmap报错: Failed to open device ethxxx
    谷歌黑客语法(google hacking)让你的搜索更精准有效
    查看CPU相关信息
    使用fiddler抓取jmeter发送的请求
    20191129字符串对齐方法
    20191126拼接字符串
    robotframework 模拟滚动鼠标到底部
    SQL中的左连接与右连接,内连接有什么区别
    robotframework 获取坐标
  • 原文地址:https://www.cnblogs.com/mgyboom/p/14286995.html
Copyright © 2011-2022 走看看