百万架构师第二十课:源码分析:Spring 源码分析:手写定制自己的ORM框架|JavaGuide

原文链接

基于Spring5实现ORM

初衷:

单表查询不写一句SQL,自动生成

查询的结果自动映射为Java对象

1、我要传一个复杂的查询条件,怎么传?

想到了用对象来传,但是有问题

  • a)、跨表联查的条件

  • b)、无法携带判断逻辑的运算符

  • c)、or 或者 and 无法区分

2、自动映射类型判断麻烦 ,用rs.getObject()方法

// 各自的厂商实现自己的链接
// MySQL为例,以下类型Java语言中是不存在的
// bigint ,由开发厂商自动映射好了
// varchar
// int
{
	 System.out.println(rs.getObject(columnName).getClass());   
}

3、跨多种数据库如何统一API

4、数据源的动态切换如何来做?

AbstractRoutingDataSource数据源自动路由,执行数据连接以前,根据业务规则来动态获取到一个连接

从而达到动态切换数据库连接的效果

为了操作方便,每次置换完,执行完成以后,会将数据源恢复到默认的设置

5、SQL注入

1、首先将QueryRule构建好,把所有的查询条件保存到一个ruleList中

2、再写一个工具类QueryRuleSqlBuilder,循环ruleList对每一个条件分别处理processAnything,主要是构建where后面语句

3、process以后propertisList 保存诸如 and name = ? , values tom,利用索引位置相同,来进行一一对应

问:selectbysql就相当于没有使用框架,不符合之前统一参数,统一查询方法?

答:不推荐使用,如果一定要多表查询,只有两种方案

a) 写SQL语句

b) 查多次,在内存中处理数据关系,一般会在Service中进行处理


在Java代码中处理,会让程序员更加容易理解

如果给大串SQL,这会让后来接手的人直接想死

我见过一条SQL语句有10行之长的,我直接看晕了

----------- 在我的团队中,极少数使用多表关联查询 -------------

问:······这个PK主键传过来怎么用?有什么好处

答:<T extends Serializable,PK extends Serializable> 传与不传不影响功能

目的:返回结果不需要再手动的强制类型转换

问:如果用老师这个框架来组装SQL,复杂查询的话,会不会变得难以组装?

比如说查某个表的字段是另外一个表的条件,以此类推多个表的话?

答:这就是属于多表查询

问:连接操作,还有如果表没有主键PK 还需要传?

答:只要用我的框架,每个表必须有主键,哪怕是自增

为了降低程序设计的复杂度
来源于: https://javaguide.net

微信公众号:不止极客

posted @   nogeek_cn  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示