简介
环境要求
- jdk-1.8
- idea
- https://github.com/sumcolin/o...
细则
- 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 因此咱们需要写一个拦截器,必须有接口类
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。