基于Spring5实现ORM
初衷:
单表查询不写一句SQL,自动生成
查询的结果自动映射为Java对象
1、我要传一个复杂的查询条件,怎么传?
想到了用对象来传,但是有问题
-
a)、跨表联查的条件
-
b)、无法携带判断逻辑的运算符
-
c)、or 或者 and 无法区分
2、自动映射类型判断麻烦 ,用rs.getObject()方法
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 还需要传?
答:只要用我的框架,每个表必须有主键,哪怕是自增
为了降低程序设计的复杂度
微信公众号:不止极客