广义上,ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换。 狭义上,ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口。这里指的 ORM 是指 Hibernate 这样的框架,至于 ORM 框架的好处就不说了,ORM 一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。 但是,这本身 SQL 语言是存在冲突的,我们先来拆分一下要求
面向对象和上面的行为实际上是格格不入的,比如将表抽象为一个类,每个类的实例是一行数据,看起来确实很完美,但是其实存在一个隐藏的缺陷。
目前的主流 ORM 技术有好多种,Hibernate 是一种比较典型的如上面所述的 ORM 技术,Mybatis 则是一种半自动化的 ORM 技术,这里讲一讲 Mybatis
也就是说,ORM 本身,需要做两件事
Mybatis 由于过于依赖 SQL,因此如果将底层数据库进行替换,则会导致很大的迁移工作量,Hibernate 就不存在这个问题,但是 Hibernate 确实不够灵活,刚才也讲到了 SQL 查询的问题,因此 Hibernate 如果要做到灵活,实在是代价太大了。两者各有优缺点。
ORM 主要有两个意义
除了上面这两种 ORM 以外,还有一种更加轻量级的技术方案,就是提供一整套类似于函数调用方式来写 SQL 查询,借助 IDE 的代码提示和编译器语法检查,来保证安全,这种方案是灵活度最高的。但是更加繁琐
在针对防注入方面,通常做法是使用绑定参数和预处理语句,避免字符串的拼接,或者采用手段,防止传入的单引号提前截断 SQL
由于数据库查询存在这么大的问题,而且需要保证 SQL 安全,笔者有两条思路
来源: https://juejin.im/post/59f618cf518825603b5833d0