文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
使用 ActiveRecord 来操作数据 resty-orm
Active Record(中文名:活动记录)是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。
Active Record 和 Row Gateway (行记录入口)十分相似,但前者是领域模型,后者是一种数据源模式。关系型数据库往往通过外键来表述实体关系,Active Record 在数据源层面上也将这种关系映射为对象的关联和聚集。
Active Record 适合非常简单的领域需求,尤其在领域模型和数据库模型十分相似的情况下。如果遇到更加复杂的领域模型结构(例如用到继承、策略的领域模型),往往需要使用分离数据源的领域模型,结合 Data Mapper (数据映射器)使用。
Active Record 驱动框架一般兼有 ORM 框架的功能,但 Active Record 不是简单的 ORM,正如和 Row Gateway 的区别。
著名的例子是全栈(Full Stack) Web 开发框架 Ruby on Rails ,其默认使用一个纯 Ruby 写成的 Active Record 框架来驱动 MVC 中的模型层。
在 Resty 中 ActiveRecord 表现为两部分:
Model
映射指定的表数据,数据存储在一个 attrs 的 map 中,map 的 key 不区分大小写,适合具有固定业务的实体,可动态切换数据源,内部实现了属性检测和 Query Cache,包含了基本的数据操作方法
Record
除了具有 model 的全部特征外,还是一个动态的映射,适合动态的数据表业务,不需要建立指定的 model 来映射数据
使用方法
1. 在 application.properties 配置 jdbc 连接,连接池等
##druid plugin auto load,default 为数据源名字
##druid plugin auto load
db.default.url=jdbc: mysql://127.0.0.1/example?useUnicode=true&characterEncoding=UTF-8
db.default.user=dev
db.default.password=dev1010
db.default.dialect=mysql
#c3p0 配置
c3p0.default.minPoolSize=3
c3p0.default.maxPoolSize=20
#druid 配置
#druid.default.initialSize=10
#druid.default.maxPoolPreparedStatementPerConnectionSize=20
#druid.default.timeBetweenConnectErrorMillis=1000
#druid.default.filters=slf4j,stat,wall
#flyway database migration auto load
flyway.default.valid.clean=true
flyway.default.migration.auto=true
flyway.default.migration.initOnMigrate=true
2. 在 AppConfig 类中配置 ActiveRecordPlugin,来加载连接和映射 model
public void configPlugin(PluginLoader pluginLoader) {
C3p0DataSourceProvider cdsp = new C3p0DataSourceProvider("default");
ActiveRecordPlugin activeRecordCdsp = new ActiveRecordPlugin(cdsp, true);
//映射的 model 必须能被扫描到
activeRecordCdsp.addIncludePaths("cn.dreampie.orm");
pluginLoader.add(activeRecordCdsp);
}
3. 编写一个 Model 类映射数据表,需要继承 Model
//假设 cn.dreampie.orm 目录下有个 model 叫 User
//使用 table 注解来映射指定的数据表,generatedKey 是自增主键(自增方式分为数据库自增和自定义生成器自增,
//如 uuid),primaryKey 非自增主键,generated=true 表示使用自定义的生成器生成主键,cached 表示缓存
@Table(name = "sec_user",generatedKey="id", primaryKey = "sid",generated=true, cached = true)
public class User extends Model<User> {
public static User dao = new User();
}
4. 编写一个 Resouce 来执行某个数据操作,如果你只使用了 orm 部分,在其他地方也可以执行该操作
@API("/users")
public class UserResource extends ApiResource {
/**
* 查询一个 user 的集合
*/
@GET
public List<User> findAll() {
//使用 Record 达到相同的效果,而不需要编写 User.java
//Record userDAO=new Record("sec_user","id,sid",true,true);
//userDAO.findAll();
return User.dao.findAll();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论