基于Spring5实现ORM
初衷:
单表查询不写一句SQL,自动生成
查询的结果自动映射为Java对象
1、我要传一个复杂的查询条件,怎么传?
想到了用对象来传,但是有问题
a)、跨表联查的条件
b)、无法携带判断逻辑的运算符
c)、or 或者 and 无法区分
2、自动映射类型判断麻烦 ,用rs.getObject()方法
java
// 各自的厂商实现自己的链接
// MySQL为例,以下类型Java语言中是不存在的
// bigint ,由开发厂商自动就映射好了
// varchar
// int
{
System.out.println(rs.getObject(columnName).getClass());
}
// 各自的厂商实现自己的链接
// MySQL为例,以下类型Java语言中是不存在的
// bigint ,由开发厂商自动就映射好了
// varchar
// int
{
System.out.println(rs.getObject(columnName).getClass());
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
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 还需要传?
答:只要用的我框架,每个表必须有主键,哪怕是自增 为了降低程序设计的复杂度