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);//执行插入

         //获取新生成的主键值,注意recordput时并没有涉及主键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");//获取序列值

 

0 0
原创粉丝点击