java数据引擎(二):详细使用
来源:互联网 发布:2016年达内java百度云 编辑:程序博客网 时间:2024/06/05 20:59
一、 详细用法
数据引擎的数据操作大体可分为两大类,一个是直接面对表的操作,一个是面对配置SQL的操作,两者可共存,根据方便程度及业务复杂度,可灵活选择。
1. 单表操作
当需要访问的对象只涉及一张表时,就属于单表操作。数据引擎使用两种对象进行表的自动映射,即Map对象和实体对象。当使用Map时,是将库表的字段及值映射为map的key-value;当使用实体对象时,将关系表映射为实体,这与hibernate一致,表字段名如果含下划线分隔符,实体属性将转为驼峰形式。两者性能上基本接近。使用Map时,代码量更少,Map的key完全与库表字段同名,统一使用小写形式,value类型为Object,在get时,根据数据类型转型为具体类型。
A.插入记录
a.插入单条记录
上面快速入门中,增加记录时,没有涉及大对象字段。对于二进制字段可以采用以下方式,对于Clob字段,只要将获取的数据转为字符串即可。
//以map对象方式插入带图片的记录
File file = new File(“E:\\照片\\手机拍\\IMG135.jpg”);
InputStream is = new FileInputStream(file);
byte[] data=newbyte[(int)file.length()];
is.read(data);
Map record=new HashMap();
record.put(“name”,“王五”);
record.put(“photo”, data);
DataCenter.exeInsert(“student”, record);//执行插入
//获取新生成的主键值,注意record在put时并没有涉及主键sid,
//这是引擎自动完成的
Integersid=(Integer)record.get(“sid”);
//以实体对象方式插入
Student st=new Student();
st.setName(“赵六”);
st.setPhoto(data);
DataCenter.exeInsert(“student”, st);
Integer sid = st.getSid();//获取新生成的主键值
b.插入主从关联记录
有时候,在保存一条主记录时,需要连带保存从记录,引擎只需将从记录的实体对象放到主实体即可。假设一种场景,有order表、order_detail表、order_goods表,主表order的每条记录都对应一条详细记录,同时,一个order可能买了多个商品,对应order_goods多条记录(当然,实际更可能只有一个从表,这里是为了说明的方便)。
实体Order的属性如下:
privateLong oid;//主键属性
privateString name;
privateOrderDetail orderDetail;// 关联属性
privateList<OrderGoods> orderGoodsList;//关联属性
Order order=new Order();//主记录
order.setOid(100L);
order.setName(“订单名”);
OrderDetail orderDetail=new OrderDetail();
orderDetail.setOid(100L);//订单详细也有一个oid,通过它与主表关联,因此值与上相同
orderDetail.setXXX(..);//设置其它属性值
order.setOrderDetail(orderDetail);//关联上
OrderGoods gd1=new OrderGoods();
gd1.setOid(100L);//oid关联键,order_goods字段名称不一定要是oid,只要关联上就行
gd1.setXXX(..);//其它属性
OrderGoods gd2=new OrderGoods();
gd2.setOid(100L);
gd2.setXXX(..);//其它属性
OrderGoods gd3=new OrderGoods();
gd3.setOid(100L);
gd3.setXXX(..);//其它属性
List list=new ArryList();
list.add(gd1);
list.add(gd2);
list.add(gd3);
order.setOrderGoodsList(list);//这个订单有三个商品
int c=DataCenter.exeInsert(“order”,order);//保存,返回值c==5
c.批量插入记录
List list=new ArrayList();
for(int i=1;i<10;i++){
Student s=new Student();
s.setSid(Long.valueOf(i));
s.setName(“name_”+i);
list.add(s);
}
intc=DataCenter.exeInsertBatch(“student”, list);//执行插入
//在上面,list的元素是实体对象,也可以用Map对象,调用操作完全一样,这里就不重复了。
d.插入带序列的记录
对于oracle,当建有序列时,怎么获取呢?这需要用到特殊的参数类DataMap,它就是一个Map类,可完全代替普通map对象,它可设置序列。如果插入一个实体对象,则无法取得序列了。
假如student的主键sid配置了序列seq_sid。
DataMap map = new DataMap();
map.putSequence("sid","seq_sid.nextval");//关键这步
map.put("name","zhangsan");
int c = DataCenter.exeInsert("student", map);//执行插入
intsid=(Integer) map.get("sid");//获取序列值
- java数据引擎(二):详细使用
- java数据引擎(三):详细使用
- java数据引擎(四):详细使用
- java数据引擎(五):详细使用
- java数据引擎(九):应用二
- Pig数据分析引擎 二 使用PigLatin语句分析数据
- SCUT引擎简单使用二
- [Drools]JAVA规则引擎 -- Drools 详细说明
- java数据引擎(七):总结
- 浏览器工作原理(二):渲染引擎的详细介绍
- SVN服务使用详细(二)
- 使用MyBatis(二)使用java注解查询单行数据
- java使用js引擎例子
- java使用js引擎例子
- JAVA模版引擎Freemarker常用标签(二)
- Java工作流引擎学习----JBPM(二)
- Java模板引擎之Freemarker(二)
- java数据引擎(一):引擎渊源和快速入门
- Java Thread Join
- Cannot change version of project facet Dynamic web
- 二分图判定
- JAVASE_正则表达式
- [Java] 东南大学人文讲座信息爬虫
- java数据引擎(二):详细使用
- HorizontalScrollView
- Lucene 使用(一)简介
- 蓝桥杯 最大子阵_dp
- Oracle 语法基础
- 今天碰到@WebServlet错误
- 小白也刷题--leetcode求两链表的交集
- CentOS 7 中在配置文件中修改 mariadb的字符编码
- hdu 1299