当前位置:  编程技术>软件工程/软件设计
本页文章导读:
    ▪Grails技巧系列——GORM中select结果进行count的方法      《Grails技巧系列》将介绍笔者在Grails开发中总结的一些经验。这里将避免重复官方文档中的内容,希望能够以短小的文章给读者更多有价值的内容。  (关于GROM的具体使用方法请参考 Gra.........
    ▪大话设计模式 状态模式      package org.ustc.statemode; public class Work { private State state; private boolean isFinished ; public Work() { state = new MoningState(); setFinished(false); } public State getState() { return state; } public void setState(State stat.........
    ▪设计模式之八S:抽象工厂模式(Abstract Factory Pattern)      GOF 在《设计模式》:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 package com.google.abstractfactory; //抽象工厂角色:工厂接口 public interface Gardener {     public .........

[1]Grails技巧系列——GORM中select结果进行count的方法
    来源: 互联网  发布时间: 2013-11-19
《Grails技巧系列》将介绍笔者在Grails开发中总结的一些经验。这里将避免重复官方文档中的内容,希望能够以短小的文章给读者更多有价值的内容。 

GROM是Grails框架提供的一种O/R Mapping的解决方案。通过GROM可以摆脱繁琐的SQL书写,并且根据搜索到的结果自动生成Groovy实现,可以省去数据访问层代码的开发,减轻程序员的工作量。Java中的JDO、S2JDBC都是此类框架,而GROM的底层是Hibernate 3,是一种非常广泛用于Java开发的数据层框架。 
(关于GROM的具体使用方法请参考 Grails官方的 《Grails用户手册》,这里不作过多描述。) 

GROM提供了很多执行SQL语句的接口,包括用slect语句取得count的结果,如使用下面的代码,可以得到姓Simpson的人的数量。 
def criteria = new DetachedCriteria(Person).build { eq 'lastName', 'Simpson' } 
def results = criteria.list(max:4, sort:"firstName") 
以上例子可以看出,这种提取搜索结果数量的方式,主要针对某一个表的搜索,而在实际的商业开发中,有很多数据搜索是相对复杂的。需要对多个表进行结合,或者,需要通过与子搜索结合起来才能得到搜索结果。 
对于前者,可以通过设定目标之间的关系,通过载入功能就可以实现。但是,后者需要使用子查询的情况就是GORM难以实现的了。这一点是由于GORM内核本身是基于Hibernate的缘故,不但继承了强大的O/R优点,同时也继承了无法使用子查询的软肋。 
这种情况,我个人的做法是使用Groovy访问数据库功能,直接执行select语句,提取执行结果,做法如下: 1.首先在相应的service类中定义 def dataSource,Grails在执行时会自动将你的DataSouce插入进去 
2.在service类中相应的方法内,类似以下执行并返回结果 
def sql = new Sql(dataSource)
def result = sql.firstRow('select count(*) as c from (select max(c.id) from loveapple_contents c, loveapple_site s\
where s.id = parent_site_id and s.id = ? and parent_category_alias = ? group by c.alias) t' ,
[site.id, categoryAlias]) return result 
这段代码是 番茄CMS在提取分类中文章数量的一段处理。 

(当然,通常的网站在搜索文章数量是并不需要这么复杂,因为番茄CMS的功能比较多,数据结构比较特殊,所以只能用子查询。) 以上是笔者在Grails开发中用过的搜索count的方法,希望能给大家帮助。


原文地址:http://www.loveapple.cn/app/Grails/grails-chips-gorm-sql-count

作者:froole 发表于2013-5-2 15:13:01 原文链接
阅读:74 评论:0 查看评论

    
[2]大话设计模式 状态模式
    来源: 互联网  发布时间: 2013-11-19
package org.ustc.statemode;

public class Work {
	private State state;
	private boolean isFinished ;
	
	public Work() {
		state = new MoningState();
		setFinished(false);
	}
	public State getState() {
		return state;
	}
	public void setState(State state) {
		this.state = state;
	}
	public int getHour() {
		return hour;
	}
	public void setHour(int hour) {
		this.hour = hour;
	}
	private int hour;
	public void writeProgram(){
		state.writeProgram(this);
	}
	public void setFinished(boolean isFinished) {
		this.isFinished = isFinished;
	}
	public boolean isFinished() {
		return isFinished;
	}
}
package org.ustc.statemode;

public interface State {
	public void writeProgram(Work w);
}
package org.ustc.statemode;

public class MoningState implements State {
	

	@Override
	public void writeProgram(Work w) {
		// TODO Auto-generated method stub
		if(w.getHour()<12)
			System.out.println("精力充沛,time:"+w.getHour());
		else{
			w.setState(new AfternoonState());
			w.writeProgram();
		}
	}

	

}


package org.ustc.statemode;

public class AfternoonState implements State {

	@Override
	public void writeProgram(Work w) {
		// TODO Auto-generated method stub
		if(w.getHour()<17)
			System.out.println("下午犯困");
		else{
			w.setState(new EveningState());
		w.writeProgram();
		}
	}

}

package org.ustc.statemode;

public class EveningState implements State {

	@Override
	public void writeProgram(Work w) {
		// TODO Auto-generated method stub
		if(w.isFinished()==true){
			w.setState(new RestState());
			w.writeProgram();
		}else{
			if(w.getHour()<20)
				System.out.println("好累");
			else{
				w.setState(new SleepState());
				w.writeProgram();
			}
		}
	}

}

package org.ustc.statemode;

public class RestState implements State {

	@Override
	public void writeProgram(Work w) {
		// TODO Auto-generated method stub
		System.out.println("收工 下班咯");
	}

}

package org.ustc.statemode;

public class SleepState implements State {

	@Override
	public void writeProgram(Work w) {
		// TODO Auto-generated method stub
		System.out.println("不行了睡着了"+w.getHour());
	}

}

package org.ustc.statemode;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Work work = new Work();
		//work.setHour(20);
		//work.setHour(9);
//		work.setHour(14);
		work.setFinished(true);
		work.setHour(20);
		work.writeProgram();
	}

}



作者:a17909863341 发表于2013-5-2 15:01:39 原文链接
阅读:105 评论:0 查看评论

    
[3]设计模式之八S:抽象工厂模式(Abstract Factory Pattern)
    来源: 互联网  发布时间: 2013-11-19

GOF 在《设计模式》:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

package com.google.abstractfactory;

//抽象工厂角色:工厂接口
public interface Gardener {
    public Fruit createFruit(String name);
    public Veggie createVeggie(String name);
}

package com.google.abstractfactory;
 //抽象水果产品角色:水果接口
public interface Fruit { 

}

package com.google.abstractfactory;

// 抽象蔬菜产品角色:蔬菜接口

public interface Veggie {
}

packagecom.google.abstractfactory;
//具体产品角色:热带水果
public class TropicalFruit implements Fruit {
    private String name;
    public TropicalFruit(String name) {
        System.out.println("热带工厂为您创建了:热带水果-"+name);
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

packagecom.google.abstractfactory;
//具体产品角色:热带蔬菜
public class TropicalVeggie implements Veggie {
    private String name;
    public TropicalVeggie(String name) {
        System.out.println("热带工厂为您创建了:热带水果-"+name);
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

packagecom.google.abstractfactory;
//具体产品角色:亚热带水果

public class NorthernFruit implements Fruit {
    private String name;
    public NorthernFruit(String name) {
        System.out.println("亚热带工厂为您创建了:亚热带水果-"+name);
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

packagecom.google.abstractfactory;

//具体产品角色:亚热带蔬菜
public class NorthernVeggie implements Veggie {
    private String name;
    public NorthernVeggie(String name) {
        System.out.println("亚热带工厂为您创建了:亚热带蔬菜-"+name);
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

package com.google.abstractfactory;

//具体工厂角色:热带工厂
public class TropicalGardener implements Gardener {
    public Fruit createFruit(String name) {
        return new TropicalFruit(name);
    }
    public Veggie createVeggie(String name) {
        return new TropicalVeggie(name);
    }
}
package com.google.abstractfactory;
//具体工厂角色:亚热带工厂
public class NorthernGardener implements Gardener {
    public Fruit createFruit(String name) {
        return new NorthernFruit(name);
    }
    public Veggie createVeggie(String name) {
        return new NorthernVeggie(name);
    }
}
package com.google.abstractfactory;
//工厂模式--抽象工厂模式--一般性模式(农场应用)
//测试类(客户端)
public class TestFactoryPattern {
    private void test(){
        Veggie tv,nv;
        Fruit tf,nf;

        TropicalGardener tropicalGardener=new TropicalGardener();
        NorthernGardener

    
最新技术文章:
▪主-主数据库系统架构    ▪java.lang.UnsupportedClassVersionError: Bad version number i...    ▪eclipse项目出现红色叉叉解决方案
▪Play!framework 项目部署到Tomcat    ▪dedecms如何做中英文网站?    ▪Spring Batch Framework– introduction chapter(上)
▪第三章 AOP 基于@AspectJ的AOP    ▪基于插件的服务集成方式    ▪Online Coding开发模式 (通过在线配置实现一个表...
▪观察者模式(Observer)    ▪工厂模式 - 程序实现(java)    ▪几种web并行化编程实现
▪机器学习理论与实战(二)决策树    ▪Hibernate(四)——全面解析一对多关联映射    ▪我所理解的设计模式(C++实现)——解释器模...
▪利用规则引擎打造轻量级的面向服务编程模式...    ▪google blink的设计计划: Out-of-Progress iframes    ▪FS SIP呼叫的消息线程和状态机线程
▪XML FREESWITCH APPLICATION 实现    ▪Drupal 实战    ▪Blink: Chromium的新渲染引擎
▪(十四)桥接模式详解(都市异能版)    ▪你不知道的Eclipse用法:使用Allocation tracker跟...    ▪Linux内核-进程
▪你不知道的Eclipse用法:使用Metrics 测量复杂度    ▪IT行业为什么没有进度    ▪Exchange Server 2010/2013三种不同的故障转移
▪第二章 IoC Spring自动扫描和管理Bean    ▪CMMI简介    ▪目标检测(Object Detection)原理与实现(六)
▪值班总结(1)——探讨sql语句的执行机制    ▪第二章 IoC Annotation注入    ▪CentOS 6.4下安装Vagrant
▪Java NIO框架Netty1简单发送接受    ▪漫画研发之八:会吃的孩子有奶吃    ▪比较ASP和ASP.NET
▪SPRING中的CONTEXTLOADERLISTENER    ▪在Nginx下对网站进行密码保护    ▪Hibernate从入门到精通(五)一对一单向关联映...
▪.NET领域驱动设计—初尝(三:穿过迷雾走向光...    ▪linux下的块设备驱动(一)    ▪Modem项目工作总结
▪工作流--JBPM简介及开发环境搭建    ▪工作流--JBPM核心服务及表结构    ▪Eclipse:使用JDepend 进行依赖项检查
▪windows下用putty上传文件到远程Linux方法    ▪iBatis和Hibernate的5点区别    ▪基于学习的Indexing算法
▪设计模式11---设计模式之中介者模式(Mediator...    ▪带你走进EJB--JMS编程模型    ▪从抽象谈起(二):观察者模式与回调
▪设计模式09---设计模式之生成器模式(Builder)也...    ▪svn_resin_持续优化中    ▪Bitmap recycle方法与制作Bitmap的内存缓存
▪Hibernate从入门到精通(四)基本映射    ▪设计模式10---设计模式之原型模式(Prototype)    ▪Dreamer 3.0 支持json、xml、文件上传
▪Eclipse:使用PMD预先检测错误    ▪Jspx.net Framework 5.1 发布    ▪从抽象谈起(一):工厂模式与策略模式
▪Eclipse:使用CheckStyle实施编码标准    ▪【论文阅读】《Chain Replication for Supporting High T...    ▪Struts2 Path_路径问题
▪spring 配置文件详解    ▪Struts2第一个工程helloStruts极其基本配置    ▪Python学习入门基础教程(learning Python)--2 Python简...
▪maven springmvc环境配置    ▪基于SCRUM的金融软件开发项目    ▪software quality assurance 常见问题收录
▪Redis集群明细文档    ▪Dreamer 框架 比Struts2 更加灵活    ▪Maven POM入门
▪git 分支篇-----不断更新中    ▪Oracle非主键自增长    ▪php设计模式——UML类图
▪Matlab,Visio等生成的图片的字体嵌入问题解决...    ▪用Darwin和live555实现的直播框架    ▪学习ORM框架—hibernate(二):由hibernate接口谈...
▪(十)装饰器模式详解(与IO不解的情缘)    ▪无锁编程:最简单例子    ▪【虚拟化实战】网络设计之四Teaming
▪OSGi:生命周期层    ▪Javascript/Jquery——简单定时器    ▪java代码 发送GET、POST请求
▪Entity Framework底层操作封装(3)    ▪HttpClient 发送GET、POST请求    ▪使用spring框架,应用启动时,加载数据
▪Linux下Apache网站目录读写权限的设置    ▪单键模式的C++描述    ▪学习ORM框架—hibernate(一):初识hibernate
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3