java数据引擎(四):详细使用
来源:互联网 发布:nba2k13捏脸详细数据 编辑:程序博客网 时间:2024/05/22 15:51
A.修改
a.传递单条记录进行更新
//将sid为1的记录的name值修改为‘张三峰’
//以map对象方式操作
Map record=new HashMap();
record.put(“name”,“张三峰”);
record.put(“sid”, 1);
int c=DataCenter.exeUpdate(“student”, record);//执行修改
//以实体对象方式操作
Student st=new Student();
st.setName(“张三峰”);
st.setSid(1);
int c=DataCenter.exeUpdate(“student”, st);
以上的更新操作必需带主键,即最后是主键为条件进行的更新,如果要进行灵活多样的条件更新,需要使用Param类。
//将sid为1的记录的name值修改为‘张三峰’,所在班级修改为6班
//以map对象方式操作
Map record=new HashMap();
record.put(“name”,“张三峰”);
record.put(“class_id”,6);
int c=DataCenter.exeUpdate(“student”,
record,new Param(“sid”,1));//执行修改
//以实体对象方式操作
Student st=new Student();
st.setName(“张三峰”);
st.setClassId(6);
int c=DataCenter.exeUpdate(“student”,st,new Param(“sid”,1));
返回值c表示影响的记录数,如果Param不是以主键作条件,返回值就可能大于1.
//将age大于等于20并且是5班的所有学员划为8班
Student st=new Student();
st.setClassId(8);
Param pm= new Param();
pm.add(“class_id”,5).add(“age”,”>=”,20);
int c=DataCenter.exeUpdate(“student”,st,pm);
关于Param的各种条件构成,可参考前文的Param详解。
使用实体对象时,不能将字段更新为null,使用map对象则可以。
b.传递多条记录进行更新
也叫批量更新,参数为list,其每个元素是同质的,并且含主键属性,元素可以是map对象,也可以是实体对象。注意:当实体对象操作时,如果实体属性是java的基本数据类型,会影响到更新结果,例如,int的属性,即使不给赋值,也会取默认值0,所有建议使用Integer,这个特性在其它orm框架中也是存在的。
List lis=new ArrayList();
Map record=new HashMap();
record.put(“name”,“张三峰”);
record.put(“sid”, 1);
list.add(record);
record=new HashMap();
record.put(“name”,“李四谷”);
record.put(“sid”, 2);
list.add(record);
int c=DataCenter.exeUpdateBatch(“student”,list);
//执行后,将主键为1的记录name修改张三峰,主键为2的name修改为李四谷,c===2
c.含表达式的更新
有一种更新采用上述方式是实现不了的,例如将符合条件的员工的工资都涨10%,因为每个人的涨幅不一样,这时需要使用前面提到的DataMap对象。
//将工资都涨10%
DataMap map=new DataMap();
map.setExp("salary","salary+salary*0.1");
int c=DataCenter.exeUpdate("employee",map,new Param());
//将工龄大于10年的员工工资涨10%
int c=DataCenter.exeUpdate("employee",map,new Param(“year”,”>”,10));
其它表达式示例:
//将工资改为原来的10%,不是涨,是降了90%,以下两句等效:
map.setExp("salary","salary*0.1");
map.setExp("salary","salary","*",0.1);
//将note的值加上后缀_sufix,针对oracle, ||是连字符操作
map.setExp("note","note","||","_sufix");
//将字段field1的值更新为field2+field3,字段类型都是字符型
map.setExp("field1","field2||field3");
//将字段field1的值更新为field2和field3相加再除以10,字段类型都是数字型
map.setExp("field1","field2+field3",”/”,10);
//将age减去10后,再乘以2,这是个无意义的操作啊。
map.setExp("age","(age-10)*2");
有时一个对象不确定是需要插入、还是修改,可以调用以下方法,让引擎自动操作:
exeInsertOrUpdate(“表名”,object);
B. 删除
可以传递单个对象进行删除,也可以传递多个对象批量删除,还可以直接传递主键进行删除,当然,更灵活的是使用Param类构建删除条件进行操作。
//删除student的全部记录,true表示能回滚,false不能回滚,但速度快
boolean flag=DataCenter.exeDelete(“student”,true);
//以map对象或实体对象作条件删除记录,条件对象必需含主键
Map obj=new HashMap();
obj.put(“sid”,20);
//Student obj=new Student();
//obj.setSid(20);
int c= DataCenter.exeDelete(“student”,obj);//删除sid为20的记录
//删除符合条件的所有记录
int c= DataCenter.exeDelete(“student”,pm);//pm为Param对象,构建方式参见前文
//直接传递主键值进行删除,单主键表
int c= DataCenter .exeDeleteByKey(“student”,20);
//根据多个对象删除记录,对象可以是map或实体对象,放在list中,如果包含主键属性,则按主键删除,否则按其它属性组成的条件删除
List list=new ArrayList();
Student obj=new Student();
obj.setSid(20);
list.add(obj);
…
int c= DataCenter .exeDeleteBatch(“student”,list);
C. 聚集运算
这是进行sum、count等操作,例如,如果按name分组,对student表的age求总和,对name统计总数,可以这样调用:
Map colTypeMap =newHashMap();
colTypeMap.put("name","count");
colTypeMap.put("age","sum");
String[] groupby = new String[] {"name" };
List<Map<String, Object>> res = DataCenter.calculate("student", colTypeMap, groupby);
Integer age_t=res.get(0).get(“age”);//获取结果中的age统计数
Integer name_t=res.get(0).get(“count_name”);//获取结果中的name统计数
其中参数colTypeMap,指定运算字段,是运算列与运算类型的键值对,运算类型的取值有sum,avg,count,max,min等,可以一次查询多个类型,如果类型仅仅是count,用getRecordCount方法更方便。参数groupby是用于分组的列,多列以英文逗号分隔,计算max,min时,本参数为空。返回值是包含结果的Map列表,Map的key为指定的字段,value为统计值。
上面的调用生成的sql为:
select sum(age) age,count(name) count_name from student group by name
如果有条件限制,并且要显示出是哪个name的统计值,调用如下:
Map colTypeMap =newHashMap();
colTypeMap.put("name","count");
colTypeMap.put("age","sum");
String[] groupby = new String[] {"name" };
Param pm = new Param();
pm.addField("name");
pm.add("age",">=", 20);
List<Map<String, Object>> res = DataCenter.calculate("student", colTypeMap, groupby,pm);
上面的调用生成的sql为:
select name, sum(age) age, count(name) count_name from student where (age >=100) group byname
对于求max和min值,有更简便的方法:
int max=DataCenter.calculateMax("student","age", pm);//统计字段age的最大值
int min=DataCenter.calculateMin("student","age", pm);// 统计字段age的最小值
pm是Param对象,构建方式参考上文。
生成的sql类似:select max(age) age from student where …
- java数据引擎(四):详细使用
- java数据引擎(二):详细使用
- java数据引擎(三):详细使用
- java数据引擎(五):详细使用
- java数据引擎(十一):应用四
- java并发编程之Thread类详细使用(四)
- [Drools]JAVA规则引擎 -- Drools 详细说明
- java数据引擎(七):总结
- iOS开发学习专题-基础知识(四) NSNumber容器 NSData数据 NSData转换的详细使用方式
- java使用js引擎例子
- java使用js引擎例子
- Java四种线程池的介绍及详细使用代码示例
- Java四种线程池的介绍及详细使用代码示例
- java数据引擎(一):引擎渊源和快速入门
- java数据引擎(六):高级主题
- java数据引擎(八):应用一
- java数据引擎(九):应用二
- java数据引擎(十):应用三
- MFC中使用HALCON
- 浅谈优化程序性能
- Java多线程与并发应用-(5)-如何优雅的使用ThreadLocal类
- UIScrollView 原理详解
- TCP三次握手和四次握手以及SYN攻击
- java数据引擎(四):详细使用
- java初级
- PythonChallenge第5题
- African demand of film faced plywood increasing
- mappingResources、mappingLocations、mappingDirectoryLocations、mappingJarLocations
- 源码推荐:多图无缝滚动控件,多视图控制器间切换
- java数据引擎(五):详细使用
- 第三章第17题
- 我的IO漫谈