关于实体为Date类型的字段,如何用model.find(" date>? ",param)方法进行查询?

来源:互联网 发布:桌面美女跳舞软件 编辑:程序博客网 时间:2024/05/16 10:49
假设实体为 Coupon,一个字段为public Date CreateTime;这时,如何通过Coupon.find(" CreateTime>? ",param)来进行查询?

有两种方式解决这一问题,
第一个:主要用在get请求时,这种方式使用时有限制,不能通用,特别是前端通过Json串传到后端时
第二个:这种方式用途更广泛,能解决几乎所有这类问题,目前还未发现它有什么局限性。

(1)在Action方法的参数前面添加修饰符

使用@As注解,我们可以指定日期格式。

例如:


archives?from=21/12/1980 


public static void articlesSince(@As("dd/MM/yyyy") Date from) {  

    List<Article> articles = Article.findBy("date >= ?", from);  

    render(articles);  

我们可还以对不同的语种定义不同的格式,例如

public static void articlesSince(@As(lang={"fr,de","*"}, value={"dd-MM-yyyy","MM-dd-yyyy"}) Date from) {  

    List<Article> articles = Article.findBy("date >= ?", from);  

    render(articles);  

在这个例子中,我们将法国和德国的日期定义为 dd-MM-yyyy ,其它都为 MM-dd-yyyy. 注意语种可用逗号分隔。注意参数lang的个数必须与value的个数相等。

如果没有使用@As注解,则Play将使用你的区域对应的默认日期格式。我们可在“conf/application.conf”中使用“date.format”为key来配置该格式.



(2)用在有Post请求、JSON传值到后台的情况,将实体字段前面加上注解,更简单一些
@Entity 
@Table(name = "mk_coupon") 
public class Coupon extends Model{
    
    @Temporal(TemporalType.DATE)
    @As(("yyyy-MM-dd")) 
    public Date expireStartDate; 
    ...
}

在post后台方法中,可以这样格式化时间
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
Date date=new Date(); 
String now=df.format(date); 

List<Object> param = new ArrayList<Object>();
param.add(df.parse(now));
Coupon.find(" and expireStartDate >? ",param) 

这样查询的结果也是正确的。
0 0