Rails 中的持久化框架 Active recored
来源:互联网 发布:传奇霸业翅膀升级数据 编辑:程序博客网 时间:2024/05/01 10:23
Active Recored 基本的数据查询
Active Recored 是rails的核心组件 是标准的orm 框架相当于java的hibernate 一样。封装了对数据的crud 。常见的创建对象方法采用的new 。 activerecord 是MVC中的M用来处理数据和业务逻辑。项目中被用作ORM框架。在activerecord中是多约定少配置的原则。activerecord使用一些命名约定,查找模型或数据表之间的映射关系。类名为单数,对应的数据表就是复数,当类名为多个字段时采用驼峰命名,对应数据库表将使用下划线分隔各单词。创建activerecored模型的过程很简单,只需要继承ActiveRecord::Base类就行例子:
class Product< ActiveRecord::Base
end
该代码会创建Product 模型,对应于数据库中的products表 同时product 表中的字段也映射到了Product模型实例的属性上。
不使用默认的命名约定
使用ActiveRecord::Base.table_name= 该方法可以指定数据表的名字
例子:class Product < ActiveRecord::Base
self.table_name=“product”
end
1.数据的创建
通过new对象的方法,然后用对象调用字段的方法为其赋值,最后执行save()方法保存即可。或者直接调用create方法如:
1. User.create(:username=>'yea',:password=>'123456')
2. #或者传递一个Hash数组
3. User.create([{:username=>'name1',:password=>'123'},{:username=>'name2',:password=>'456'}])
4. #两种方式创建后都可以传递对象到一个代码块
5. #User.create(:username=>'yee') do |u|
6. u.password='123456'
7. end
2.数据的读取
1. #根据主键查找记录
2. User.find(1)
3. #根据主键数组,查找数据。返回一个数组
4. User.find(1,2,3) 或者User.find([1,2,3])
5. #以上查询如果没有记录则会抛出RecordNotFound的异常
#其他查询方法,使用例子如下
6. # find first
7. Person.find(:first) # returns the first object fetched by SELECT * FROM people
8. Person.find(:first, :conditions => [ "user_name = ?", user_name])
9. Person.find(:first, :conditions => [ "user_name = :u", { :u => user_name }])
10. Person.find(:first, :order => "created_on DESC", :offset => 5)
# find last
11. Person.find(:last) # returns the last object fetched by SELECT * FROM people
12. Person.find(:last, :conditions => [ "user_name = ?", user_name])
13. Person.find(:last, :order => "created_on DESC", :offset => 5)
# find all
14. Person.find(:all) # returns an array of objects for all the rows fetched by SELECT * FROM people
15. Person.find(:all, :conditions => [ "category IN (?)", categories], :limit => 50)
16. Person.find(:all, :conditions => { :friends => ["Bob", "Steve", "Fred"] }
17. Person.find(:all, :offset => 10, :limit => 10)
18. Person.find(:all, :include => [ :account, :friends ])
19. Person.find(:all, :group => "category")
:conditions参数类似于SQL中的WHERE子句,指定查询中的条件。
:order 对返回的结果排序,类似于SQL中的ORDER BY
:group 分组,类似SQL中的 GROUP BY
:limit 指定返回结果的行数
:offset 指定结果的偏移量,表示从第几条符合条件的记录开始
:joins 类似于LEFT JOIN之类的自子语句,详情参阅官方文档
:include 根据表之间的关联,在查询中自动加入LEFT OUTER JOIN的SQL语句,详情参阅官方文档
:select 返回的字段,以字符串形式表示,如"id,name"。默认为select * ...
:from SELECT语句from后面的表名,默认为当前模型对应的表,可根据需要指定其他的表或视图
:readonly 标记返回的记录为只读,不能再被更细或保存
:lock 如::lock=>true 一个排它锁,通常用于在生产的sql语句中包含 for update子句,这样只有在事务提交后,锁才会被释放。
Active Recored 提供个find_by_sql()方法中也可以直接书写sql 语句来执行相应的操作,也支持占位符参数传递。如:users = User.find_by_sql(['select * from users where username=?and password=?',username,password])
ActiveRecord还根据表的字段,动态生成了相应的查询简化相对应的查询方法如:
1. users = User.find_by_username('jack')
2. users = User.find_by_password('123456')
更新数据 例如:
1. #给查询的对象重新赋值
2. u = User.find(1)
3. u.username = 'ttt'
4. u.save
5. #使用update_attribute()可以同时更新给定的特定字段的值,这种形式不再需要调用save方法
6. u = User.find(1)
7. u.update_attribute(:username=>'newname',:password=>'321654')
8. #使用类方法,update()和update_all(),update的第一个参数为更新的id。
9. User.update(1,:username=>'john',:password=>'123456')#更新ID为1的记录的username为john,password为123456
10. User.update_all("password='123'","username like '%j%'")#更改所有用户中用户名包含j的密码为123
删除数据:
1. #第一种,调用对象的destroy方法
2. u = User.find(1)
3. u.destroy
4. #第二种,类方法delete()
5. User.delete(1)
6. User.delete([1,2,3])
7. #第三种,类方法delete_all(),它类似于SQL语句中DELETE语句的where
8. User.delete_all("username like '%j%'")
表与表之间的关联关系 有三种,一对一,一对多,多对多
Active Recored 提供了四种方法来表示关联关系:has_one,has_many,belongs_to 和has_and_belongs_to_many
1.belongs_to
这个类方法表示从一个ActiveRecord对象到另外单个具有一个外键属性的被关联对象的关联方法。其选项有
:class_name 指定关联的类名,在关联名称不符合命名惯例的时候使用
:conditions 设置关联的约束条件
:foreign_key 指定用来查找关联对象的外键的列。一般情况下Rails会使用你所设的关联名称后面加_id的方法自动推算出外键的名称。
:counter_cache 这个选项让Rails自动更新被关联对象的从属对象数量。
:include 指定加载关联对象时同时要加载的关联对象,Rails会动态地在SELETE语句中加入必要的LEFT OUTER JOINS。
2.has_many
此关联允许你在一个数据模型中定义关联让他具有很多其他的附属的数据模型。选项有
:after_add 当一个记录通过<<方法被加入到集合中后会触发这个回调,但不会被集合的create方法触发。可以接受一个或多个方法名的符号或者Proc对象
:atfer_remove 当使用delete方法将一个记录从集合中移除时触发这个回调
:as指定被关联对象的多态belongs_to
:before_add 当一个记录通过<<方法被加入到集合之前触发这个回调,concat和push是<<的别名
:before_remove 当使用delete方法讲一个记录从集合中移除前触发回调
:class_name 当关联的类名不同于Rails自动推算出时,手动指定类名
:conditions 指定从数据库中取出对象的sql查询语句中加入额外的条件
:counter_sql 重载ActiveRecord自动生成的、用于统计关联中所包含的记录数量的sql。
:delete_sql 重载ActiveRecord自动生成的、用于取消关联的sql
:dependent=>:delete_all | :destroy_all | :nullify 其中delete_all使用单个sql语句删除被关联的对象,此方法不会触发被删除对象的任何destroy回调方法。destroy_all会逐个地调用被关联对象的destroy方法,将被关联的对象及父对象一起删除。nullity是默认选项,仅仅清除指向父对象的外键。
:finder_sql 指定一个完成的sql语句来读取关联,当关联非常复杂且需要依赖多个数据库表来获取数据时,可以利用这个选项
:foreign_key 重载ActiveRecord根据约定自动计算出的用于加载关联的sql语句中的外键名
:group 提供一个属性,计算结果自动根据这个属性进行分组,使用GROUP BY
:include 同belongs_to
:insert_sql 重载ActiveRecord自动生成的、用于创建关联的sql语句。
:limit 在自动生成的、用于加载关联的sql中加入一个limit
:offset 设置结果集的偏移量
:order 类似sql的ORDER BY
:select 指定查询的字段
:table_name 关联的表名
:uniq=>true 从关联的集合中剔除重复的对象
3.has_one
这个关联相对比较简单
:class_name 关联的类名
:conditions 关联的条件 v cg
:dependent 级联的操作
:foreign_key 关联的外键
:include 同上
:order 排序
- Rails 中的持久化框架 Active recored
- rails active record associations
- rails active record querying
- active-admin rails
- MyBatis持久化框架
- 持久化框架
- 数据库持久化框架
- express框架持久化
- active mq 整合spring 并持久化到数据库
- active mq 整合spring 并持久化到数据库
- 浅谈持久层框架中的缓存机制
- 学习持久层框架中的小记录
- 批判Java持久化框架
- ibatis持久化框架使用
- 数据持久化框架(JPA)
- ormLite框架持久化编程
- android数据库持久化框架
- Hibernate对象持久化框架
- JQuery动画效果
- ReportViewer 只报 “本地报表处理期间出错” 其它很多原因的!
- 语句for( ;1;)是什么意思?
- jquery遍历函数.li ???
- hdoj 5773 <变相LIS>
- Rails 中的持久化框架 Active recored
- poj 1789 Truck History
- Android Studio does not detect .aidl files
- Python随学随记(4)
- Hdu 5765 Bonds
- 人生十难
- vs2013编译FFMPEG. 连接错误问题.
- Java设计模式--单例模式
- ubuntu 下如何以root身份登录