rspec 是 ruby 中最有名的测试框架。针对于rails,rspec有个很好的插件 rspec-rails 本文介绍这个插件的安装。
1 安装rspec: $ gem install rspec
2 安装rspec-rails:$ gem install rspec-rails
3 在rails目录下运行:$ ruby script/generate rspec
4 Spec::Rails可以生成model rspec 和 restful controller
命令如下:ruby script/generate rspec_scaffold purchase order_id:integer created_at:datetime amount:decimal
同样也可以生成只生成model和rspec:ruby script/generate rspec_model person
或者controller:ruby script/generate rspec_controller person
Hibernte 1:n 最佳抓取策略
在orm中实体1:n关联时,要考虑两个问题,分别是经典的n+1问题,和笛卡尔积问题。所以要避免使用默认抓取策略,同时尽量减少结果。hibernate作为最主流的java orm。一般的的优化原则是使用batchsize减少子查询的sql数量,同时在one一端使用懒加载,并且用subselect或者join来代替默认的关联加载。
上代码:
@Entity
@BatchSize(size=10)//因为一般要获得post,都会调用creator,所以使用预抓(EAGER)策略,同事设置预抓持为10
public class User extends BaseEntity{
@Id @GeneratedValue
@Column(name="id")
private long id;
@OneToMany(mappedBy="creator",fetch=FetchType.LAZY)//懒加载
@Fetch(FetchMode.SUBSELECT)//使用JOIN会产生笛卡尔积的问题,subselect策略是Hibernate.org推荐的解决N+1问题策略
private Set posts=new HashSet();
......
}
@Entity
public class Post extends BaseEntity {
@Id @GeneratedValue
@Column(name="id")
private long id;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(nullable=false)
private User creator;
....
}
用perl脚本解决ant…非法字符:\65279…的问题
用ant管理项目,编译时发现有些utf8编码的java文件无法编译,
报错是…非法字符:\65279…。
在网上查N多与ant有关的文章,但是大多数的解决方案都不是很理想。因为文件比较多,而且我的
机器上也没有装editplus。
索性自己用perl写了一个脚本
如下:
#remove the utf-8 BOM for Ant
sub remove_bom {
#open( my $in, "+<", "src/com/umpay/wap20/mobileProxy/MobileProxy.java" );
foreach my $filename (@_) {
print $filename,"\n";
open( my $in, "+<", $filename );
@lines = <$in>;
$line1 = $lines[0];
$t_chk1 = substr( $line1, 0, 1 ); #0xef -> 239
$t_chk2 = substr( $line1, 1, 1 ); #0xbb -> 187
$t_chk3 = substr( $line1, 2, 1 ); #0xbf ->191
if ( ord($t_chk1) == 239 && ord($t_chk2) == 187 && ord($t_chk3) == 191 )
{
$line1 = substr( $line1, 3 );
seek( $in, 0, 0 );
print $in $line1;
}
close $in;
}
}
&remove_bom("src/com/umpay/wap20/mobileProxy/MobileProxy.java"
,"src/com/umpay/wap20/security/GeneralKeyPairs.java"
,"src/com/umpay/wap20/security/RSAUtil.java"
,"src/com/umpay/wap/pages/WML.java");
其中remove_bom方法就是处理有问题的文件的方法。
把你的项目中出现问题的文件名称一个一个的放到remove_bom的参数列表中就可以了。ant,BOM,ant,BOM
最后运行这个perl文件。之后再运行ant就可以了。