spring源码分析-SpringJdbc设计原理

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

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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值