spring源码分析-SpringJdbc设计原理

1.简介
Spring Jdbc也遵循了简单开发的原则,使用了模板模式,替我们完成所有使用JDBC API进行开发的单调乏味的、底层细节处理工作,而我们只需要补充一些spring没做的事就可以了,下表描述了哪些是spring帮助我们做好的,哪些是我们要做的。
spring源码分析-SpringJdbc设计原理

2.有哪些模板呢?
JdbcTemplate:Spring里最基本的JDBC模板,利用JDBC和简单的索引参数查询提供对数据库的简单访问。
NamedParameterJdbcTemplate:能够在执行查询时把值绑定到SQL里的命名参数,而不是使用索引参数。
SimpleJdbcTemplate:利用Java 5 的特性,比如自动装箱、通用(generic)和可变参数类表来简化JDBC模板的使用。

3.基于spring jdbc进行二次开发

Hibernate优点
1、API丰富,可以实现无SQL操作(HQL),为了兼容所有数据库(都会先解释为HQL)
再由HQL翻译成SQL(当然,有支持直接执行SQL的API,为了考虑用户需求复杂性)
对所有数据库方言都支持得非常不错
2、ORM全自动化

MyBatis优点
1、轻量级,性能好
2、SQL和Java代码分离(SqlMap,把每一条SQL语句起一名字,作为Map的key保存)
get("selectByName")

缺点
Hibernate过于复杂,什么临时态、持久态、删除态、游离态,OneToOne OneToMany ManyToMany
MyBatis对于sql语句的编写工作量较大

简化,spring推出的jdbc在于简化,使用JdbcTemplate自己写去

因此我们集合了两者的优点进行spring jdbc的二次开发

第一,性能要好,是啥就是啥,不经过二次处理(不对SQL语句进行二次包装)
第二,单表操作实现NoSQL(只要用JDBC,SQL是不能省,只不过这拼接SQL的过程不要用户自己写了
由程序自动生成,最终生成的是一个字符串)
第三,ORM零配置实现自动化(利用反射机制,把字段和属性对应上,然后,自动实例化返回结果)

原则:约定优于配置(保证代码健壮性)
DAO原则:一个Dao只操作一张表
约定:做修改和删除的是根据主键来操作的
约定:尽量使用单表操作,如果实在要多表操作,可以先把数据查出来放到内存,然后在内存中进行计算
约定:支持读写分离
约定:支持分库分表
约定:ORM支持的类型原则上只认Java八大基本数据类型 + String(为了降低复杂度)


二次开发框架流程
1、知道QuertRUle规范,定义了跟多查询规则的常量,定义了查询规则保存方法
2、提供一个抽象Dao类给用户去实现,基于单表操作
3、把实体的配置信息解析成一个EntityOpertion对象,同时实现了ORM的自动过程
4、在抽象的Dao调用查询方法,把QueryRule作为参数传入,提供一个QueryRule搞定所有操作(对用户来说只要知道一个类,就会用这个框架了)
5、再将传入的QueryRule交给QueryRuleSqlBuilder构建出一个sql语句(被拆分了SQL)
6、拼接CRUD SQL语句
7、交给JdbcTemplate执行
8、调用EntityOpertion的ORM过程
9、返回结果,对于用户来说都是单表操作,而且规定了泛型,所以不需要做任何强制类型转换


4.不依赖spring的orm框架
那么orm的实现原理是什么呢,我们可以看源码
大四的时候写的,比较粗糙的一个版本:https://gitee.com/charjay/simpleorm.git