用法一:计数,统计单词数。在thinking in java 中类型信息里的计数器也是用到map来计数的。简单例子:
String s = "word word java word java work work";
String[] words = s.split(" ");
Map map = new HashMap();
int count = 0;
for(int i=0;i<words.length;i++){
if(map.containsKey(words[i])){
count = (Integer)map.get(words[i]) + 1;
map.put(words[i], count);
}else{
map.put(words[i], 1);
}
}
System.out.println(map);
用法二:很早以前写得一个项目中的查询。多个条件按照不同的排列组合作为查询条件,可以任意为空。这样的需求是在项目中不可能不遇到,遇到好多次,均是用以下方法处理。项目中的查询部分代码,这里是根据4个查询条件来查询的,将查询条件在action中封装在map中,在dao中处理如下:
/**
* 根据查询条件组成sql
* @param map 查询条件
* @return
*/
private String queryHql(Map map) {
StringBuilder s = new StringBuilder();
s.append("from ApplicationPO ap");
Iterator iter = map.keySet().iterator();
boolean t = false;
while(iter.hasNext()){
Object key = iter.next();
if(key.toString().equals("orderNum")&&map.get(key).toString().trim().length()!=0){
if(t){
s.append(" and ap.orderNum like '%");
s.append(map.get(key));
s.append("%'");
}else{
s.append(" where ap.orderNum like '%");
s.append(map.get(key));
s.append("%'");
}
t = true;
}
if(key.toString().equals("priceId")&&map.get(key).toString().trim().length()!=0){
if(t){
s.append(" and ap.priceId like '%");
s.append(Long.parseLong(map.get(key).toString()));
s.append("%'");
}else{
s.append(" where ap.priceId like '%");
s.append(Long.parseLong(map.get(key).toString()));
s.append("%'");
}
t = true;
}
if(key.toString().equals("state")&&map.get(key).toString().trim().length()!=0){
if(t){
s.append(" and ap.applicationState like '%");
s.append(map.get(key));
s.append("%'");
}else{
s.append(" where ap.applicationState like '%");
s.append(map.get(key));
s.append("%'");
}
t = true;
}
if(key.toString().equals("customerId")&&map.get(key).toString().trim().length()!=0){
if(t){
s.append(" and ap.customerId like '%");
s.append(Long.parseLong(map.get(key).toString()));
s.append("%'");
}else{
s.append(" where ap.customerId like '%");
s.append(Long.parseLong(map.get(key).toString()));
s.append("%'");
}
t = true;
}
}
s.append(" order by ap.applicationTime desc");
return s.toString();
}
需要注意的是map中put的value不能为null,可以在action中处理,将null转化为""。用此方法的话,查询增加一个条件的话,那么无非是多put进一个条件,在dao中处理的话,只需要多增加一个if即可,方便而且不会出错。看到过有人写的查询,全部用排列组合处理,一个dao写了6k多语句,那么多情况是否有漏掉,就不得而知了。
前段时间看到,就是在
s.append("from ApplicationPO ap");
后面加上 where 1=1,那么这个查询就可以省很多代码了。
看了http://www.iteye.com/topic/233664后,发现以前写得真事烂。为了项目,赶时间,写得还真差。
分享到:
相关推荐
今天我们来学习下映射的用法,具体以网站的注册过程为例。 一、solidity中,映射的关键字为mapping,首先我们先来定义两个mapping, mapping(address =>uint) idmapping和mapping(uint =>string) namemapping。id...
9.55、将坐标传递到GOOGLE MAP并显示 277 9.56、获取本机电话号码 280 9.57、获得手机联系人 280 9.58、2.0以上版本查询联系人详细信息 282 9.59、2.0以上版本添加联系人 285 9.60、拨打电话 287 9.61、发送SMS、MMS...
9.55、将坐标传递到GOOGLE MAP并显示 277 9.56、获取本机电话号码 280 9.57、获得手机联系人 280 9.58、2.0以上版本查询联系人详细信息 282 9.59、2.0以上版本添加联系人 285 9.60、拨打电话 287 9.61、发送SMS、MMS...
修正屏蔽 map 信息。(yaya) 2014-10-09(yaya) 1.屏蔽 map 信息。 2014-09-23(yaya) 1.使用 bootlace.com 安装 grldr.mbr 到 gpt 分区类型的设备。 2014-09-02(yaya) 1.ext4 分区支持 64 位功能,支持元...
本文介绍如何使用taglist插件(plugin)来查看程序中的标签(tag),并介绍了taglist插件的配置和用法。taglist插件利用Exuberant ctags程序生成标签文件,并提供像Source Insight那样的标签窗口,可以方便的跳转到函数...
★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的诊断和测试以及恢复系统功能的工具。小...
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...
运算符的用法有如下两种: variable!或variable!defaultValue,第一种用法不给缺失的变量指定默认值,表明默认值是空字符串,长度为0的集合,或者长度为0的Map对象. 使用!指定默认值时,并不要求默认值的类型和变量类型...
Linux 操作系统基础教程 清华大学信息学院计算机系 目 录 前言..........................................................................................................................................
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
如何取小数点前两位,并四舍五入。 4.日期和时间 如何取得年月日,小时分秒 如何取得从1970年到现在的毫秒数 如何获取某个日期是当月的最后一天 如何格式化日期 5.数组和集合 6.文件和目录(I/O)操作 如何...
下面的伪代码演示了消息循环的用法: while(1) { id=getMessage(...); if(id == quit) break; translateMessage(...); } 当该程序没有消息通知时getMessage就不会返回,也就不会占用系统的CPU时间。 下图为...
学生提问:使用组合关系来实现复用时,需要创建两个Animal对象,是不是意味着使用组合关系时系统开销更大? 159 5.9 初始化块 159 5.9.1 使用初始化块 160 5.9.2 初始化块和构造器 161 5.9.3 静态初始化块 162 ...
03_指针用法杂项 04_再谈多级指针做输出_传智扫地僧 05_动态库的基本概念和使用 06_动态库测试环境和调试环境搭建 07_socketclient动态库函数_初始化实现wmv 08_socketclient动态库函数_发送接受释放实现wmv 09_...