分享
 
 
 

最新面向对象查询语言:NQL

王朝other·作者佚名  2006-07-26
窄屏简体版  字體: |||超大  

面 向 对 象 查 询 语 言:NQL

newxy(新坐标)技术运用之七

作者:胡立新

net.newxy.dbm.NQL 是 newxy(新坐标)的面向对象的查询类。他以标准的sql语言为基础,开发者不需要学习新的语法规则。不需要在查询语句中镶入值对象类名。通过add()方法加入新的查询条件,通过and()、addAnd()方法及or()、addOr()方法设置逻辑关系。利用多态特性,控制查询范围。

newxy(新坐标)处理多项查询时采用了NQL技术。

以下是 NQL 类的几个构造方法

public NQL(IFacade ifacade,String _sql)throws Exception{

this.ifacade=ifacade;

this._sql=_sql;

initial();

}

ifacade是net.newxy.dbm.DBM及其子类的接口。_sql是最初sql语句。

public NQL(String dao,String _sql)throws Exception{

this.dao=dao;

this._sql=_sql;

initial();

}

dao 是src/下newxy.properties文件中设置的DAO类别名。例如

dao.test=common.TestDao

参数dao就可以是"dao.test"。

_sql是最初sql语句。

public NQL(String _sql)throws Exception{

this._sql=_sql;

initial();

}

这个构造函数调用的initial()方法会用默认DAO类的实例赋给NQL类变量ifacade。_sql是最初sql语句。

应用举例

下面举几个例子。类NQL1、NQL2、NQL3、NQL4之间有递次继承关系。NQL1继承自net.newxy.dbm.NQL类。

NQL1 以"select b.* from industry as a,enterprise as b where{a.code=b.industry_code}"作为 构造函数参数。查询得企业表enterprise中所有数据。

NQL2 继承 NQL1,在NQL1的基础上加以限制,查询结果企业的经营范围包含"批发"或"餐饮"

NQL3 继承 NQL2,在NQL2的基础上以加扩张,使查询结果企业也可以是行业代码等于"D"。

NQL4 继承 NQL3,在NQL3的基础上加限制,使查询结果在NQL3的基础上,使企业名称必需包含"公司"或行业代码等于"A"。

类NQL1,定义及运用

定义

package common;

import net.newxy.dbm.NQL;

public class NQL1 extends NQL{

public NQL1()throws Exception{

super("select b.* from industry as a,enterprise as b where{a.code=b.industry_code}");

}

}

注意:作为参数的查询语句中应有where{},用的是大括号,而不是小括号,表明这里是动态生成查询条件的地方。还有种形式是:select * from enterprise where{}

运用,查询得企业表enterprise中所有数据

NQL nql=new NQL1();

List list=nql.list();

for (int i = 0; i < list.size(); i++) {

DynaBean bean = (DynaBean) list.get(i);

System.out.println(bean.get("name")+" "+bean.get("dealIn"));

}

产生的SQL语句是:select b.* from industry as a,enterprise as b where (a.code=b.industry_code)

类NQL2,定义及运用

定义

package common;

public class NQL2 extends NQL1{

public NQL2() throws Exception{

super();

and();

addOr();

add("b.dealIn like '%批发%'");

add("b.dealIn like '%餐饮%'");

setWhere();

}

}

运用,在NQL1的基础上加以限制,查询结果企业的经营范围包含"批发"或"餐饮"

NQL nql=new NQL2();

List list=nql.list();

产生的SQL语句是:select b.* from industry as a,enterprise as b where ((a.code=b.industry_code) and (b.dealIn like '%批发%' or b.dealIn like '%餐饮%'))

类NQL3,定义及运用

定义

package common;

public class NQL3 extends NQL2{

public NQL3() throws Exception{

super();

or();

add("b","industry_code","D");

setWhere();

}

}

运用,在NQL2的基础上加以扩张,使查询结果企业可以是行业代码等于"D"

NQL nql=new NQL3();

List list=nql.list();

产生的SQL语句是:select b.* from industry as a,enterprise as b where ((a.code=b.industry_code) and ((b.dealIn like '%批发%' or b.dealIn like '%餐饮%') or (b.industry_code='D')))

类NQL4,定义及运用

定义

public class NQL4 extends NQL3{

public NQL4() throws Exception{

super();

and();

addOr();

add("b.name like '%加工%'");

add("b","industry_code","A");

setWhere();

}

}

运用,在NQL3的基础上加限制,使查询结果在NQL3的基础上,使企业名称必需包含"公司"或行业代码等于"A"。

NQL nql=new NQL4();

List list=nql.list();

产生的SQL语句是:

select b.* from industry as a,enterprise as b where ((a.code=b.industry_code) and (((b.dealIn like '%批发%' or b.dealIn like '%餐饮%') or (b.industry_code='D')) and (b.name like '%公司%' or b.industry_code='A')))

NQL4产生的sql语句也可由直接得到,方法如下:

NQL nql = new NQL("select b.* from industry as a,enterprise as b where{a.code=b.industry_code}");

nql.and();

nql.addOr();

nql.add("b.dealIn like '%批发%'");

nql.add("b.dealIn like '%餐饮%'");

nql.setWhere();

nql.or();

nql.add("b","industry_code","D");

nql.setWhere();

nql.and();

nql.addOr();

nql.add("b.name like '%公司%'");

nql.add("b","industry_code","A");

nql.setWhere

产生的SQL语句是:

select b.* from industry as a,enterprise as b where ((a.code=b.industry_code) and (((b.dealIn like '%批发%' or b.dealIn like '%餐饮%') or (b.industry_code='D')) and (b.name like '%公司%' or b.industry_code='A')))

注:

1.红色条件是构造NQL实例时的基本条件,它与后来产生的条件始终是"and "关系。

2.setWhere()方法会将当前附加的条件与先前条件结合构成新的条件。前后条件之间是"and"还是"or"由 and()、or()方法决定。 当前附加各条件之间是"and"还是"or"关系则由addAnd()、addOr()方法决定。可参看NQL4的构造方法及产生的sql语句(注意黑色部分):

public NQL4() throws Exception{

super();

and();

addOr();

add("b.name like '%公司%'");

add("b","industry_code","A");

setWhere();

}

select b.* from industry as a,enterprise as b where ((a.code=b.industry_code) and

(((b.dealIn like '%批发%' or b.dealIn like '%餐饮%') or (b.industry_code='D'))

and (b.name like '%公司%' or b.industry_code='A')))

3.如果NQL3的构造函数中不包含setWhere();则NQL4产生的sql语句如下:

select b.* from industry as a,enterprise as b where ((a.code=b.industry_code) and ((b.dealIn like '%批发%' or b.dealIn like '%餐饮%') and (b.industry_code='D' or b.name like '%公司%' or b.industry_code='A')))

NQL3构造函数中 add("b","industry_code","D")加入条件会与NQL4构造函数中add("b.name like '%公司%'")、add("b","industry_code","A")加入的条件一同解析,放入同一括号中。结果SQL语名包含的是

and (b.industry_code='D' or b.name like '%公司%' or b.industry_code='A')

所以NQL类的子类构造函数应是如下形式

super();

or();//或者 and();

addAnd();//或者 addOr();

add("b.name like '%公司%'");

add("b","industry_code","D");

setWhere();

否则就不用继承,直接用NQL。

newxy(新坐标)技术网站:http://www.newxy.net

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有