对象关系映射(英语: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操作
jfinal的实现
jfinal 使用了 ActiveRecord 这种领域模型模式
每一个数据库表对应创建一个类.类的每一个对象实例对应于数据库中表的一行记录; 通常表的每个字段在类中都有相应的Field;
ActiveRecord同时负责把自己持久化. 在ActiveRecord中封装了对数据库的访问, 即CRUD;
ActiveRecord是一种领域模型(Domain Model), 封装了部分业务逻辑;
提供了两套处理逻辑:
独创的Db+Record模式
Record 类是通用的实体类,使用Map存储数据表信息:列名、值
Db 负责对 Record进行增删改查操作
activeRecord模式
配置类中开启ActiveRecordPlugin,并配置映射关系:
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的可能)