简介

环境要求

细则

  • ORM-1-Traditional
  • ORM-2-Persistence
  • ORM-Question
ORM-1-Traditional
Traditional Way
  • 数据库驱动加载
  • 通过驱动建立数据库链接
  • 建立预处理sql语句
  • 获取结果集
  • 释放资源
question
  • 导致硬编码过多,不易维护
  • 导致频繁的调用数据库链接,资源消耗大
resolve way
  • 使用数据库连接池,作为数据库连接
  • 使用xml文件管理sql硬编码,以及结果集处理
  • 依赖反射与内省等底层技术,自动将实体与表进行属性与字段的自动映射
ORM-2-Persistence
Persistence Way

思路

  • 数据库配置参数、sql语句进行xml配置文件化
  • 通过解析配置文件,加载数据库源配置与sql语句对象化
  • 通过工厂模式实现sqlSession的生成
  • 通过反射与动态代理实现数据库的查询操作

初始化

  • 编辑xml文件
  • 数据库源相关配置编辑到sqlMapConfig.xml
  • sql语句配置xxxMapper.xml
  • 通过dom4j对资源文件xml进行解析,并存储到数据库pojo对象

Sql执行前

  • 对其方法进行JDK动态代理增强,实现面向接口开发

sql执行

  • 使用BoundSql方法使其sql参数类型和语句进行调整,返回正常的sql与preparedStatement
  • 调用原生JDBC流程

Sql执行后

  • 通过内省对resultSet进行封装
ORM-Question
Java-数据库连接池

常用数据库连接池

  • HikariCP
  • C3P0
  • BoneCP
  • Druid

原因

  • 创建线程是一个昂贵的操作,如果有大量的小任务需要执行,并且频繁地创建与销毁线程。实际上会消耗大量的系统资源,往往创建与销毁时消耗线程所耗费的时间比执行时的线程时间更长。所以,为了提高效率,会选择线程池

好处

  • 数据库连接可以复用线程链接,减少频繁的数据库链接与关闭。

原理

  • 连接池就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。
  • 通过连接池,我们只要在系统启动时预先加载好一些连接对象,当需要的时候再也不需要繁琐的步骤,现成的给你准备好啦,拿了就用,用完了放回去下次再接着用,系统加载的速度会变快,性能也会随之增加了
反射与内省

动态代理

  • JDK动态代理,实现方式:生成代理对象的时候需要一个拦截器 InvocationHandler 因此咱们需要写一个拦截器,必须有接口类

Joeyxx7000
0 声望0 粉丝