slick for play 使用原生sql查询以及拼接sql

Posted 唐际忠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了slick for play 使用原生sql查询以及拼接sql相关的知识,希望对你有一定的参考价值。

在play中用函数式框架slick来操作数据库是一件很爽的事情。但有时因为某些特殊场景又不得不用原生的sql了。 还好slick支持这种写法,可以看看slick官方文档,Slick Plain SQL queries

http://slick.lightbend.com/doc/3.1.1/sql-to-slick.html#slick-plain-sql-queries

 

下面说说我的场景,我的一个系统中有一个表格,由于用这个系统的也都是技术人员,为了方便就直接在表格上面开放了一个sql查询框,用来做条件筛选。 当用户录入sql where后面的条件后,需要把条件拼接到sql后面,这是就要用到slick的原生sql执行方式了。

代码如下:

implicit val getHostResult = GetResult(r => Host(r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<))

def queryForList(condition: String): Future[Seq[Host]] = db.run((sql"select * from ops_host where 1=1 #$condition".as[Host]))

需要注意的是getHostResult非常重要,它用来转换sql查询返回的结果的,如果不定义getHostResult,那么结果就没法解析,导致报错。

另外还有一个需要注意的就是#$condition

$是用来传递变量的,但$穿过来的值会被加上单引号,并且会被转义,那就是说如果你传递  and name=‘lemontea‘会变成‘and name=\‘lemontea\‘‘

那么为了不被转义,只需要在前面加上#就可以了。

 

原创文章,转载请注明出处。

以上是关于slick for play 使用原生sql查询以及拼接sql的主要内容,如果未能解决你的问题,请参考以下文章

play-slick 1.0.0:无法定义类型为 java.sql.Date 的列

如何使用 Postgresql 设置 Play Slick

play-slick升级后运行激活器失败

如何使用Slick和Play在测试中应用手动演变! 2.4

SQLite 与 Slick and Play

play-slick : 未找到表