从零开始写ORM框架系列1
该系列完整的代码可以在我的git下载到
背景
因为.net转java的原因,我们需要一套orm的框架。
我们组维护一个主要的DB,大概几百张表,大部分的表的数据都在千万行以上,上亿的也有。而且由于现在公司正在从SQLServer迁移到MySQL,所以需要orm框架同时支持SQLServer和MySQL。
框架调研
首先考虑的是公司提供的DAL框架,不过看了文档,弄了个helloword,总体感觉下来比较糟糕。主要如下几点:
1、不支持author。生产发现某个SQL有问题,不能快速的找到谁写的,为什么写。从而快速的修改或者回滚代码。
2、不管数据库是否为空,所有的字段生成出来全是封包的类型,比如不是int而是Integer。这样导致代码里需要各种判空,一个不小心就会掉坑里去。
3、指定查询字段很麻烦,而且字段名指定错了编译也不报错,只有真正执行查询的时候才会报错。不指定字段的话,默认是select *,但是我们公司DBA要求不能select *,一定要指定字段,不指定的话对数据库服务器的网络,服务器IO压力都很大,查询出来之后,查询出来一堆没用的字段,对业务的服务器压力也很大。
这3个原因也是我们考虑放弃公司DAL框架的主要原因。
然后因为以前在其他公司也用过hibernate跟myibatis,所以也考虑过用ibatis,但是还是发现有几个通用的问题:
1、都要自己写SQL或者配置文件,比较麻烦。
2、不支持指定查询内容,指定的话就会造成类或方法的膨胀。
3、SQL没有author。
所以,最后还是决定自己弄一个orm框架。写这个orm,从有想法到真正完成,大概用了一个星期的班余时间。
基本要求
1、能同时支持SQLServer和MySQL
2、默认author
3、零配置文件
4、支持指定查询字段,不能用select *。
5、更新和删除一定要指定主键。
6、有CodeGen,能根据表自动生成实体。
7、开发使用起来方便。