当前位置: 首页 > 知识库问答 >
问题:

Java播放框架2.0.4 ebean查询

水睿
2023-03-14

我想知道如何使用Play2.0中的模型和下面列出的查询来查询数据库。我没有看到将直接sql传递到play framework 2.0中的选项。

我想得到一份特定月份的费用清单。

SELECT * FROM Expensesdb.expense
WHERE month(expense.purchase_date) = 01

我看到的选项是查询所有费用,然后使用Date对象解析它们列出的月份。

我认为应该有一种有效的方法,我似乎找不到一种使用ebean和Java play framework 2.0来执行此查询的方法。

使现代化

谢谢Nico,我用DateTime尝试了你的代码,我试着使用下面的代码,它不会返回任何费用。我做错什么了吗?

    Calendar calendar = Calendar.getInstance();
    calendar.set(2012, 0, 01);

    Date startDate = calendar.getTime();
    calendar.set(2012, 0, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));

    Date endDate = calendar.getTime();
    List<Expense> expenses = find.where().between("purchaseDate", startDate, endDate).findList();
    return expenses;

共有2个答案

拓拔德馨
2023-03-14

@nico_ekito 1

另一方面,当您建议从DB获取所有行,然后在循环中解析它们时,我宁愿建议解析它们...同时以更容易搜索和索引的格式创建和存储。只需在您的数据库中创建额外的列,并在您的模型中覆盖保存()和/或更新(Object o)方法,以确保每个更改都将设置字段,即使用String购买期存储字符串如2012-11

你可以找到:

# in November of ANY year
SELECT * FROM table WHERE purchase_period LIKE '%-11';

# in whole 2012 
SELECT * FROM table WHERE purchase_period LIKE '2012-%';

# in December 2012
SELECT * FROM table WHERE purchase_period LIKE '2012-12';

或者,您可以将其划分为两个Integer字段:purchaseYearpurchaseMonth

对于第一种情况,Expense模型中的overriden保存()方法可以如下所示:

public void save() {
    this.purchaseDate = new Date();
    this.purchasePeriod = new SimpleDateFormat("yyyy-MM").format(this.purchaseDate);
    super.save();
}
段干宾白
2023-03-14

我看到两种选择:

1-使用Ebean映射

这个想法是搜索月初和月底之间的费用,比如:

Datetime firstDayOfMonth= new Datetime().withDayOfMonth(1);
Datetime lastDayOfMonth = new Datetime().dayOfMonth().withMaximumValue();
return finder.where()
    .between("purchaseDate", firstDayOfMonth, lastDayOfMonth).findList();

2-使用RawSQL

为此,请看看Ebean留档。

原始sql的主要缺点是,该代码不能移植到不同的sql服务器上(如果您不打算使用多个db引擎,则无所谓)。

 类似资料:
  • 在用400k记录查询MongoDb时,我得到了< code>OutOfMemoryError。我收集了大约40万条用户记录。当我试图检索所有用户(在弹性搜索中转储)时,我得到了< code>OutOfMemoryError错误。 我已经浏览过这个链接,在application.config中添加了jvm.memory=-Xms64m -Xmx1024m,但还是一样的异常。 这是我的堆栈跟踪 -

  • 问题内容: 我想知道(我的Java应用程序的)播放框架版本与我的应用程序的Java版本之间是否有任何联系? 示例:如果我使用play 2.2.1并在计算机上安装了java8。我可以在代码中使用java8吗? 如果有连接。java8的第一个播放版本是什么? 谢谢你妮芙 问题答案: Play 2.3.x是提及Java 8的第一个版本,请参见此处 今天早晨,我正在与我的一位同事交谈,他发现运行2.1.x

  • 而是使用EventStream而不是ArchivedEventStream,当我运行命令alert(通知)消息时,会转到除原始发件人之外的所有连接套接字,我也可以如何发送到原始发件人。 这是我的模型和控制器,使用WebSocket 事件模型 这是控制器

  • Rest服务器(Play Framework)中的相关问题在负载测试期间出现“读取超时”异常 java版本“1.8.0_31”java(TM)SE运行时环境(Build1.8.0_31-B13)java HotSpot(TM)64位服务器VM(Build25.31-B07,混合模式) 我正在我的本地PC中测试jmeter。我使用了2000个线程,出现了超时异常,并且Socket不知为什么没有关闭。

  • 在Windows上作为Java进程启动独立的play应用程序时遇到问题。我使用“play dist”命令生成一个zip文件,其中包含运行应用程序所需的所有jar。zip文件还包含“start”文件,该文件包含一个脚本,该脚本应该启动应用程序(在Linux服务器上运行良好)。 我找到了带有“play dist unzip”命令的sbtgoodies插件https://github.com/types

  • 这些是以下类别: 在控制器文件中,我有以下文件 列表getQuestion()中的size()引发LazyInitializationException,因为没有打开的会话 我知道,将fetch类型更改为EAGER或在QuestionRepository中的函数定义上方使用JPQL查询可能会解决这个问题,但在我的应用程序中,有些地方没有帮助,我需要延迟fetch。 如何使get问题()函数中的整个