百万架构师第二十课:源码分析: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主键传过来怎么用?有什么好处

答: 传与不传不影响功能

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

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

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

答:这就是属于多表查询

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

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

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

微信公众号:不止极客

你可能感兴趣的:(后端)