grails过滤器和数据查询的几个重要方法

一  简单的查询方法

1.findAllWhere的使用

在grails中find和findAll的区别是find默认取出查询出来的第一条的记录,findAll则是查询出全部记录

def useFindAllWhere() {
  def city=CityInfo.findAllWhere(code:"HK",id:1)
  Iterator<CityInfo> it=city.iterator();
  def buf=new StringBuffer();
  while(it.hasNext()){
      CityInfo c=it.next();
      buf.append(c.getId()+","+c.getName()+"\n");
  }
  render buf.toString();
    }

where后面如果有多个条件的话就表示and

2.getAll的使用

def  useGetAll(){
  def c=CityInfo.getAll([1,2,3])
  Iterator<CityInfo> it=c.iterator();
  def buf=new StringBuffer();
  while(it.hasNext()){
      CityInfo c1=it.next();
      buf.append(c1.getId()+","+c1.getName()+"\n");
  }
  render buf.toString();
    }

get是根据id查询单条数据,getAll则是查询多条数据

3.useFindAllBy的使用

这个方法特别厉害,by后面可以加下面的这些条件

  • LessThan
  • LessThanEquals
  • GreaterThan
  • GreaterThanEquals
  • Between
  • Like
  • Ilike  (i.e. ignorecase like)
  • IsNotNull
  • IsNull
  • Not
  • Equal
  • NotEqual
  • And
  • Or

代码如下

def useFindAllBy(){
  def c=CityInfo.findAllByIdBetween(5,35);
  Iterator<CityInfo> it=c.iterator();
  def buf=new StringBuffer();
  while(it.hasNext()){
      CityInfo c1=it.next();
      buf.append(c1.getId()+","+c1.getName()+"\n");
  }
  render buf.toString();
    }

运行效果如下:

4.使用find或findAll的时候同时使用hql

def useFindAll(){
  def hql="from CityInfo where id>:id  and code in:code";
  def c=CityInfo.findAll(hql,["id":2,code:["NB","NJ"]])
  Iterator<CityInfo> it=c.iterator();
  def buf=new StringBuffer();
  while(it.hasNext()){
      CityInfo c1=it.next();
      buf.append(c1.getId()+","+c1.getName()+"\n");
  }
  render buf.toString();
    }

这里并没有列出所有的方法,没有写出来的可以查看API文档

二  过滤器的使用

以前的web开发过滤器一般用来限制某些文件或文件夹的访问权限,grails的过滤器一般用来限制某些控制器或控制器的方法不能被直接访问。grails可以对某个或者全部控制器进行访问控制

针对这块的知识可以看看文档,文档上面貌似说的也不是很仔细。下面我写了个过滤器来限制所有控制器的访问,只要session为空并且访问的不是指定的方法就跳转到登录界面,有一点要注意就是过滤器以Filters结尾,一般来讲过滤器应放在grails-app/conf下面

package filter

class LoginFilters {

  def filters = {
    all(controller: ‘*‘,action:"*") {
      before = {
        if(session.user||actionName=="loginCheck"||actionName=="login") {

          return true
        }else{
          redirect(uri:"/login/login")
          return false;
        }
      }
      after = { Map model ->

      }
      afterView = { Exception e ->

      }
    }
  }
}

下面把login控制器的代码贴出来:

class LoginController {
  def loginCheck(){
    session.user="cry"
    render "已经模拟登录"
  }
  def login(){

  }
}

至于登录页面弄的就比较简单了,我就写了一句话,下面来访问刚才的其中一个action如other/useFindAllWhere,可以看到下面的界面

接下来访问登录的方法

接下来访问之前的控制器就不会跳转到登录界面了

赞一个  收 藏

时间: 2024-08-24 19:26:15

grails过滤器和数据查询的几个重要方法的相关文章

django对数据查询结果进行排序的方法

在你的 Django 应用中,你或许希望根据某字段的值对检索结果排序,比如说,按字母顺序. 那么,使用 order_by() 这个方法就可以搞定了. ? 1 2 >>> Publisher.objects.order_by("name") [<Publisher: Apress>, <Publisher: O'Reilly>] 跟以前的 all() 例子差不多,SQL语句里多了指定排序的部分: ? 1 2 3 SELECT id, name,

Yii2 数据查询

数据查询 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的一条数据(举个例子): User::find()->where(['name' => '小伙儿'])->one(); 此方法返回 ['name' => '小伙儿'] 的一条数据: User::find()->where(['name' => '小伙儿'])->all(); 此方法返回 ['name' => '小

基于 request cache 请求缓存技术优化批量商品数据查询接口_一点课堂(多岸学院)

基于 request cache 请求缓存技术优化批量商品数据查询接口 Hystrix command 执行时 8 大步骤第三步,就是检查 Request cache 是否有缓存. 首先,有一个概念,叫做 Request Context 请求上下文,一般来说,在一个 web 应用中,如果我们用到了 Hystrix,我们会在一个 filter 里面,对每一个请求都施加一个请求上下文.就是说,每一次请求,就是一次请求上下文.然后在这次请求上下文中,我们会去执行 N 多代码,调用 N 多依赖服务,有的

MongoDB数据查询

启动MongoDB:sudo service mongodb start,mongo 经测试,键可加引号也可不加,但是值一般要加引号,数值类型除外 MongoDB区分大小写,命名通常采用驼峰式命名法 MongoDB在使用数据库,插入集合等情况下,若数据库/集合不存在将自动创建 数据查询find() db.<集合名>.find({<键名>:<值>,...}) 格式化结果集:后加.pretty()即db.<CollectionName>.find({key:'v

用python操作mysql数据库(之数据查询结果返回字典类型)

#!/usr/bin/env python # -*- coding: utf-8 -*- import MySQLdb #建立连接 conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='1qaz#EDC',db='test_db') cur = conn.cursor(MySQLdb.cursors.DictCursor) #建立游标时,加上"MySQLdb.cursors.DictCursor",让数据查询结果返回字

SharePoint服务器端对象模型 之 使用CAML进展数据查询

SharePoint服务器端对象模型 之 使用CAML进行数据查询 一.概述 在SharePoint的开发应用中,查询是非常常用的一种手段,根据某些筛选.排序条件,获得某个列表或者某一些列表中相应的列表条目的集合. 除去列表上的查询之外,在SharePoint中还大量存在着各种各样的查询,比如针对回收站的SPRecycleBinQuery.针对审计的SPAuditQuery.针对变更的SPChangeQuery等等,不过这些查询在实际项目中使用到的频率并不是很高.本章节还是着重介绍列表查询功能.

6、SQL Server 数据查询

一.使用SELECT检索数据 数据查询是SQL语言的中心内容,SELECT 语句的作用是让数据库服务器根据客户要求检索出所需要的信息资料,并按照规定的格式进行整理,返回给客户端. SELECT 语句的基本结构 [WITH<common_tale_expression>] SELECT select_list [INTO new_table_name] [FROM table_source][where search_condition] [GROUP BY group_by_expressio

数据库 简单的数据查询

简单的数据查询 1.查询的基本结构: select[distinct] */列名 from table 表名 [where condition] [order by] 2.投影的操作:指定查询结果中能够显示的列 语法:select 列名列表 from 表名; (1):选择多列查询,列名之间用“,”隔开 (2):单列时,只单个. (3):若选择所有列,则用*代替. 3.表名前缀:本列无多大意义,但在复杂的多表查询的情况下,很有用. 语法:select 列名表名 from 表名; 4.列别名(as)

Hibernate数据查询(转)

Hibernate Query Language(HQL)Criteria QueryNative SQL下面对其分别进行解释Hibernate Query Language:HQL提供了是十分强大的功能,它是针对持久化对象,用取得对象,而不进行update,delete和insert等操作.而且HQL是面向对象的,具备继承,多态和关联等特性.from子句:from子句是最简单的HQL,例如from Student,也可以写成 select s from Student s.它简单的返回Stud