在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的更多相关文章

  1. 在Delphi中动态地使用SQL查询语句 Adoquery sql 参数 冒号

    在Delphi中动态地使用SQL查询语句 在一般的数据库管理系统中,通常都需要应用SQL查询语句来提高程序的动态特性.下面介绍如何在Delphi中实现这种功能.在Delphi中,使用SQL查询语句的途 ...

  2. SQL查询结果拼接成字符串

    sqlserver中将查询结果拼接成字符串   #for xml path(param)--将查询结果以xml格式输出 1 select id,name from table1 for xml pat ...

  3. sql查询报java.sql.SQLException: Column 'LC_ID' not found 的错误实际上是mysql在hibernate别名的问题

    报java.sql.SQLException: Column 'LC_ID' not found 的错误实际上是mysql在hibernate别名的问题 我的查询sql是 String sql2 =& ...

  4. c# 防止sql注入对拼接sql脚本的各个参数处理

    调用方法:GameServerId = this.NoHtml(GameServerId);//GameServerId为一个拼接sql的参数 /// <summary> /// 过滤标记 ...

  5. 使用sql查询mysql/oracle/sql server/gp数据库中指定表的字段信息(字段名/字段类型/字段长度/是否是主键/是否为空)

    1,根据数据库类型拼接不同URL /** * 根据类型不同拼接连接的URL * @param dbType 1:mysql.2:oracle.3:sql server.4:gp * @param ip ...

  6. SQL查询--简单了解SQL(结构化查询语言)

    以下内容是从其他地方摘抄过来的哈,原文地址忘记了,当时把内容记在了笔记中 SQL分类: 数据查询语言(DQL) 数据定义语言(DDL) 数据操纵语言(DML) 数据控制语言(DCL) 1.数据查询语言 ...

  7. SQL 查询建表SQL

    1.新建一个查询语句,按执行按钮 2.结果页面会显示一条sql语句,复制该语句即可建表 3.建表测试

  8. linQ to sql 查询生成的sql语句

    1.  如果是控制台应用,直接 db.Log = Console.Out; 2.其他应用则用如下语句: StringBuilder sql = new StringBuilder(); db.Log ...

  9. oracle的sql查询结果拼接

    oracle数据库中,使用wm_concat(column)函数,可以进行字段合并 oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oracle wm_co ...

随机推荐

  1. user initialization list vs constructor assignment

    [本文连接] http://www.cnblogs.com/hellogiser/p/user_initialization_list.html [分析] 初始化列表和构造函数内的赋值语句有何区别? ...

  2. 「转」xtrabackup新版详细说明

    声明:本文由我的同事@fiona514编写,是我看过的最用心的中文说明介绍,强烈推荐大家学习使用. Percona Xtrabackup 2.4.1 编译及软件依赖 centos5,6 需要升级cma ...

  3. .NET LINQ 相等运算

    相等运算      如果两个序列的对应元素相等且这两个序列具有相同数量的元素,则视这两个序列相等. 方法 方法名 说明 C# 查询表达式语法 Visual Basic 查询表达式语法 更多信息 Seq ...

  4. React学习笔记-1-什么是react,react环境搭建以及第一个react实例

    什么是react?react的官方网站:https://facebook.github.io/react/下图这个就是就是react的标志,非常巧合的是他和我们的github的编辑器Atom非常相似. ...

  5. socket通信之eofexception

    方案一: 用read()将不会抛出异常.因为read是block方式的. readInt()抛出异常的原因(我遇到的)是对方在该端口没有消息发送. 方案二: socket的端口被阻塞了 ,也就是我们需 ...

  6. JS中修改属性

    <!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...

  7. (转)ShardedJedisPool的使用

    package com.test; import java.util.ArrayList; import java.util.List; import redis.clients.jedis.Jedi ...

  8. 【转载】PyQt QSetting保存设置

    转载地址: http://blog.sina.com.cn/s/blog_4b5039210100h3zb.html 用户对应用程序经常有这样的要求:要求它能记住它的settings,比如窗口大小,位 ...

  9. 【JavaScript中的正则表达式】

    原文地址:http://blog.csdn.net/xh16319/article/details/9987847 1. 正则表达式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有 ...

  10. 《图形学》实验五:改进的Bresenham算法画直线

    开发环境: VC++6.0,OpenGL 实验内容: 使用改进的Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h ...