是否可以在Anorm中使用LIKE子句和字符串插值?
// e.g. this doesn't work
SQL"SELECT * FROM users WHERE last_name LIKE $lastName%".as(userParser.*)
Run Code Online (Sandbox Code Playgroud)
更新:我需要SQL语句,选择姓氏以给定字母开头的所有用户,例如:
SELECT * FROM users WHERE last_name LIKE 'Smi%';
Run Code Online (Sandbox Code Playgroud) 如何在Play Framework 2.3 Java项目的Scala模板中使用有界的通用参数?
我目前有类似的东西:
@(entities: List[_ <: Entity], currentEntity: Entity)
<ul>
@for(entity <- entities) {
@if(currentEntity.equals(entity)) {
<li><strong>@entity</strong></li>
} else {
<li>@entity</li>
}
}
</ul>
Run Code Online (Sandbox Code Playgroud)
但是,我可以在entities
和中使用不同类型的实体来称呼它,currentEntity
这不是很好。我想做类似的事情:
@[T <: Entity](entities: List[T], currentEntity: T)
...
Run Code Online (Sandbox Code Playgroud)
但这给了我Invalid '@' symbol
一个编译错误。
我想在我的play框架项目中使用Anorm作为DB库,将Scaldi作为DI.但是现在我无法注入数据库,因为在最新的游戏框架中,我们不能再使用DB.getConnection("datasource")了.
你们中的任何人都可以解释如何将NamedDatabase告知scaldi环境?
顺便说一句,这是我的代码snipet如何在Play scala中使用NamedDatabase.
class MembershipSqlStorage @Inject() (@NamedDatabase("membership") db: Database)
Run Code Online (Sandbox Code Playgroud)
它的工作原理.
谢谢
每当我在Cassandra中的表中插入数据,超过1000并通过id获取数据时,它会抛出以下异常:
com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: localhost/127.0.0.1:9042 (com.datastax.driver.core.exceptions.BusyPoolException: [localhost/127.0.0.1] Pool is busy (no available connection and the queue has reached its max size 256)))
at com.datastax.driver.core.RequestHandler.reportNoMoreHosts(RequestHandler.java:213)
at com.datastax.driver.core.RequestHandler.access$1000(RequestHandler.java:49)
at com.datastax.driver.core.RequestHandler$SpeculativeExecution.findNextHostAndQuery(RequestHandler.java:277)
at com.datastax.driver.core.RequestHandler$SpeculativeExecution$1.onFailure(RequestHandler.java:340)
at com.google.common.util.concurrent.Futures$6.run(Futures.java:1764)
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:456)
at com.google.common.util.concurrent.Futures$ImmediateFuture.addListener(Futures.java:153)
at com.google.common.util.concurrent.Futures.addCallback(Futures.java:1776)
at com.google.common.util.concurrent.Futures.addCallback(Futures.java:1713)
at com.datastax.driver.core.RequestHandler$SpeculativeExecution.query(RequestHandler.java:299)
at com.datastax.driver.core.RequestHandler$SpeculativeExecution.findNextHostAndQuery(RequestHandler.java:274)
at com.datastax.driver.core.RequestHandler.startNewExecution(RequestHandler.java:117)
at com.datastax.driver.core.RequestHandler.sendRequest(RequestHandler.java:97)
at com.datastax.driver.core.SessionManager.executeAsync(SessionManager.java:132)
at com.outworkers.phantom.builder.query.CassandraOperations$class.scalaQueryStringToPromise(CassandraOperations.scala:67)
at com.outworkers.phantom.builder.query.InsertQuery.scalaQueryStringToPromise(InsertQuery.scala:31)
at com.outworkers.phantom.builder.query.CassandraOperations$class.scalaQueryStringExecuteToFuture(CassandraOperations.scala:31)
at com.outworkers.phantom.builder.query.InsertQuery.scalaQueryStringExecuteToFuture(InsertQuery.scala:31)
at com.outworkers.phantom.builder.query.ExecutableStatement$class.future(ExecutableQuery.scala:80)
at com.outworkers.phantom.builder.query.InsertQuery.future(InsertQuery.scala:31)
at nd.cluster.data.store.Points.upsert(Models.scala:114)
Run Code Online (Sandbox Code Playgroud)
我使用PoolingOptions解决了上述问题.
val poolingOptions = new PoolingOptions()
.setConnectionsPerHost(HostDistance.LOCAL, 1, 200)
.setMaxRequestsPerConnection(HostDistance.LOCAL, 256) …
Run Code Online (Sandbox Code Playgroud) 如果我想在诸如 http4s 之类的东西中使用 ReactiveMongo,我必须将 ReactiveMongo 返回的所有 Future 调用包装在 Cats IO 效果中,这样说是否正确?
概括地说,将 ReactiveMongo 合并到 http4s 中需要哪些步骤?
我是Scala的新手.正如https://www.playframework.com/documentation/2.3.x/ScalaHttpFilters中的play框架官方文档中所述:
Play提供了一个名为EssentialFilter的低级过滤器API,可让您完全访问请求正文.
但是没有任何方法可以访问requestHeader
对象中的请求体.
import play.api.Logger
import play.api.mvc._
import play.api.libs.concurrent.Execution.Implicits.defaultContext
object LoggingFilter extends EssentialFilter {
def apply(nextFilter: EssentialAction) = new EssentialAction {
def apply(requestHeader: RequestHeader) = {
val startTime = System.currentTimeMillis
nextFilter(requestHeader).map { result =>
val endTime = System.currentTimeMillis
val requestTime = endTime - startTime
Logger.info(s"${requestHeader.method} ${requestHeader.uri}" +
s" took ${requestTime}ms and returned ${result.header.status}")
result.withHeaders("Request-Time" -> requestTime.toString)
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下方式在 MongoDB 中插入日期:
collection.insert(Json.obj("user"->"abc", "joined_date" -> DateTime.now))
Run Code Online (Sandbox Code Playgroud)
在数据库中:
{
"_id" : ObjectId("5865d99718969bca6a09450f"),
"user" : "abc",
"joined_date" : NumberLong("1483069847066")
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是日期以长毫秒格式存储在数据库中,但我想要的是它以 ISO 日期格式存储。
我在 MongoShell 中尝试保存相同的数据db.example.insert({user:"abc", joined_date:new Date()})
,结果如下:
{
"_id" : ObjectId("5865d838a4f98c5bb83b1eb8"),
"user" : "abc",
"joined_date" : ISODate("2016-12-30T03:44:56.824Z")
}
Run Code Online (Sandbox Code Playgroud)
那么,如何使用 ReactiveMongo 在数据库中以 ISODate 格式存储日期?
scala mongodb playframework reactivemongo play-reactivemongo
我有一个可以为空列的表,当查询空列时,它会抛出错误
val row: List[(String,String)] = SQL("select top 10 Spare_Part part,Pricing_Category cat from Price_Point_Base")
.as((str("part"))~ str("cat") map(flatten) *)
Run Code Online (Sandbox Code Playgroud)
我查看了链接 https://www.playframework.com/documentation/2.0/ScalaAnorm.
它只使用类似的东西来处理可空列
SQL("Select name,indepYear from Country")().map { row =>
row[String]("name") -> row[Option[Int]]("indepYear")
}
Run Code Online (Sandbox Code Playgroud)
但由于str("part")
比较紧凑row[String]("name")
,所以我想尝试使用str("part")
,但如何str("part")
使用可空列?
我正在尝试使用随播对象上提供的apply方法在Scala中实现工厂设计模式.我有以下方法.
sealed trait MyType {
def param: String
}
case class TypeA(param: String) extends MyType
case class TypeB(param: String, anotherParam: String) extends MyType
object MyType {
def apply(param: String): TypeA = ???
def apply(param, anotherParam: String): TypeB = ???
}
Run Code Online (Sandbox Code Playgroud)
现在,我如何在创建TypeA
或的实例时强制上述特征的调用者通过伴随对象进行操作TypeB
?
我有一个Processor
看起来像这样的特征:
trait Processor[A] {
def process(in: Seq[Byte]): Result[A]
}
trait Result[A]{
val ok: Boolean
val errorMessage: Option[String]
val data: Option[A]
}
Run Code Online (Sandbox Code Playgroud)
具体实施:
class StringProc extends Processor[String] {
def process(in: Seq[Byte]): StrResult
}
case class StrResult(...) extends Result[String]
object StrResult {
implicit val writes = Json.writes[StrResult]
}
Run Code Online (Sandbox Code Playgroud)
当使用StringProc
实例作为类型时Processor[String]
,process
不出所料的返回类型Result[String]
不是StrResult
.不幸的是,Writes[StrResult]
在这种情况下似乎没用:
找不到类型为Result [String]的Json序列化程序
我怎么能处理这种情况?