对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里的对象自动持久化到关系数据库中。
目前比较流行的ORM框架是hibernate和mybatis,hibernate大而全,mybatis就显得更加灵活。
ORM要解决的问题
- 对象持久化到数据库里
- 对象与表的映射规则
- 持久化方法
- 表之间的关系
smart 的实现
- @Entity注解标识需要持久化的类
- 类名(驼峰式)映射为 表名(下划线式)
- 属性名(驼峰式)映射为 字段名(下划线式)
- @Table、@Column指定特殊的名字
- EntityHelper保存映射关系:实体类=》表名,实体类 => (字段名 => 列名)
- DataSet封装持久化操作,主要使用以下俩类
- SqlHelper将对象操作转化为SQL语句、从smart-sql.properties中获取SQL语句
- DatabaseHelper封装JDBC操作
相关博客:
https://my.oschina.net/huangyong/blog/158916
https://my.oschina.net/huangyong/blog/266682
jfinal的实现
jfinal 使用了 ActiveRecord 这种领域模型模式
- 每一个数据库表对应创建一个类.类的每一个对象实例对应于数据库中表的一行记录; 通常表的每个字段在类中都有相应的Field;
- ActiveRecord同时负责把自己持久化. 在ActiveRecord中封装了对数据库的访问, 即CRUD;
- ActiveRecord是一种领域模型(Domain Model), 封装了部分业务逻辑;
提供了两套处理逻辑:
- 独创的Db+Record模式
- Record 类是通用的实体类,使用Map存储数据表信息:列名、值
- Db 负责对 Record进行增删改查操作
- activeRecord模式
- 配置类中开启ActiveRecordPlugin,并配置映射关系:<表名,主键ID,类>
- Model 类在 Map中存储数据表信息,同时包含一系列的数据库操作
- Generator 工具类根据数据库生成 BaseBlog和 Blog和 配置文件
- BaseBlog 继承 Model,并实现setter、getter方法,如此就可像普通 pojo一样操作了
- Blog 继承 BaseBlog,用户自主实现业务功能
小结
可见 smart 实现了数据库操作的基础功能,而 jfinal 有了更深入的思考,给出两套实现方式,且各有特色
jfinal 中,使用 Config记录一个数据库连接池,DbKit管理多个 Config,即多个数据库连接池,所以 jfinal可以进行多数据库开发。
1.Model封装了数据库数据和行为,针对每一个数据表 2.Db+Record分别管理数据和行为,不针对具体的数据表 3.ActiveRecordPlugin绑定一个数据库,可以有多个,在 Smart4jConfig.configPlugin中添加 4.Db.use(configName).xxx()方法切换数据库,仅作用于xxx方法,每次都要切换(我想过用ThreadLocal实现,持续起作用,但是用完必须手动切换回原来的数据库,否则会出错,会增加bug的可能)