1.运行环境:
JDK,ORACLE9i以上,CASTOR包。建议使用JBUILDE
工具进行开发
2.使用环境:
采用ORM(关系对象映射)操作数据库数据,适用于Application与WEB方式下的开发。
3.功能:
提供查询,更新,删除,插入(没实现主键自动生成),(分页暂时没实现)。4.使用步骤:
首先在数据库建立一个cat表,字段为cat_id;name;sex;weight;类型1,4为数字型,2,
3为字符串型。
其次建立两个配置文件(由自己定义文件名称):
repository.xml配置信息:
<?xml version="1.0" encoding="UTF-8"?>
<Repository>
<TableDesc execid="CAT" identifyField="CAT_ID">
<table>CAT</table>
<condition />
<FieldDesc name="CAT_ID" fieldType="java.lang.String" >
<title>CAT_ID</title>
</FieldDesc>
<FieldDesc name="NAME" fieldType="java.lang.String" >
<title>NAME</title>
</FieldDesc>
<FieldDesc name="SEX" fieldType="java.lang.String" >
<title>SEX</title>
</FieldDesc>
<FieldDesc name="WEIGHT" fieldType="java.lang.Long" >
<title>WEIGHT</title>
</FieldDesc>
</TableDesc>
</Repository>
配置文件的设计说明如下:
TableDesc 表示一个表的声明。
Execid 是类名一般情况下最好和表名一致(容易找到对应关系),但是不允许有下划线出现。注意这个类名不是全路径。
DentifyField 表中的主键,如果是复合主键则以逗号相隔开
Table 数据库表名
<FieldDesc name="SEX" fieldType="java.lang.String" >
<title>SEX</title>
</FieldDesc>
这里是表中字段的描述,name是字段名。 fieldType 是数据库字段对
应java中的类型,只有4中类型可填充:java.lang.String,
java.lang.Long, java.util.Date, java.lang.Double
title可要可不要.如果存在多个表,那么就在</TableDesc>和
</Repository>之间加入表描述。
pool-config.xml配置信息:
<?xml version="1.0" encoding="GB2312"?>
<ResourceParams>
<maxActive>10</maxActive>
<maxIdle>5</maxIdle>
<maxWait>10000</maxWait>
<username>test</username>
<password>test</password>
<driverClassName>oracle.jdbc.driver.OracleDriver</driverClassName>
<url>jdbc:oracle:thin:@192.168.0.90:1521:forecast</url>
<removeAbandoned>true</removeAbandoned>
<removeAbandonedTimeout>60</removeAbandonedTimeout>
<logAbandoned>true</logAbandoned>
</ResourceParams>
把上述信息保存为XML文件。对这个文件不多做说明了。
确定两个文件已经存在,接下来就是要创建表CAT。
还有表所对应的BEAN。
下面是我在Hibernate的一个例子中建立的VO。(借用)
package com.cea.boat.dao;
import java.util.*;
public class Cat implements Cloneable {
//Declare Field
private java.lang.String catId;
private java.lang.String name;
private java.lang.String sex;
private java.lang.Long weight;
//Get Method
public java.lang.String getCatId() {
return catId;
}
public java.lang.String getName() {
return name;
}
public java.lang.String getSex() {
return sex;
}
public java.lang.Long getWeight() {
return weight;
}
//Set Method
public void setCatId(java.lang.String catId) {
this.catId=catId;
}
public void setName(java.lang.String name) {
this.name=name;
}
public void setSex(java.lang.String sex) {
this.sex=sex;
}
public void setWeight(java.lang.Long weight) {
this.weight=weight;
}
public Object clone() {
Object o = null;
try {
o = super.clone();
}
catch (CloneNotSupportedException ex) {
System.out.println(o);
}
return o;
}
public boolean equals(Object obj) {
Cat o = (Cat)obj;
boolean result = true
&& (catId == o.catId || catId.equals(o.catId))
&& (name == o.name || name.equals(o.name))
&& (sex == o.sex || sex.equals(o.sex))
&& (weight == o.weight || weight.equals(o.weight))
;
return result;
}
}
到此已经完成了该做的事了,下面是一个使用的例子。
l查询方式:
例子:
Void testQuery() throws Exception{
{
System.setProperty(Const.RUN_KEY, Const.POOL_FACTORY_KEY);
System.setProperty(Const.CONFIG_PATH,
"E:/project/CEAConnection/pool-config.xml");
System.setProperty(Const.REPOSITORY_CONFIG_PATH,
"E:/project/CEAConnection/repository.xml");
}
ConnectionManage connectionManage = new ConnectionManage();
connectionManage.activity("com.cea.boat.dao.Cat cat");
Query Query=connectionManage.createQuery(“cat. Catid=’1’ ”);
while (Query.hasNext()) {
Object[] objects = Query.next();
Cat cat = (Cat) objects[0];
}
connectionManage.close();
}
说明:
在WEB中使用只需要在网站启动时声明一次即可。
{
//指明使用连接池
System.setProperty(Const.RUN_KEY, Const.POOL_FACTORY_KEY);
//连接池参数配置文件
System.setProperty(Const.CONFIG_PATH,
"E:/project/CEAConnection/pool-config.xml");
//配置文件指定
System.setProperty(Const.REPOSITORY_CONFIG_PATH,
"E:/project/CEAConnection/repository.xml");
}
声明一个连接管理者,管理数据库资源,事务的起始,它的生命周期最好是在一个事务结束就完结,当然你也可以在这个事务完结时继续用这个实例,来创建下一个事务的开始。不建议如此使用。
ConnectionManage DataManage = new ConnectionManage();
激活要使用类(在配置中必须有Cat),类名为全路径如果要使用多个对象,则对象间要用逗号相隔开
connectionManage.activity("com.cea.boat.dao.Cat cat");
这里只需要给出SQL查询条件比如SQL中是select * from cat cat where cat.Catid=‘1’那么 select * from cat cat where 这里后台已经帮你完成,你需要做的就是把条件完成,如果没有条件则为空.
Query Query = connectionManage.createQuery(“cat. Catid=’1’ ”);
Query.hasNext()的作用相当于resultset.next()查看是否还存在记录,Query.next()返回一个对象数组这里如果activity的是多个对象,那么objects里会顺序的存储相应的对象实例,使用的时候强制转化就可以了。
while (Query.hasNext()) {
Object[] objects = Query.next();
Cat cat = (Cat) objects[0];
}
使用完毕,释放使用的数据库资源
connectionManage.close();
l新增方式:
由于没有主键自动生成,因此主键暂时只能由自己来维护,要保证catid为111的在表里不存在,否则会出现异常。
Void testInsert() throws Exception{
Cat cat = new Cat();
cat. setCatId(“111”);
cat. SetSex(“F”);
cat. setName(“catm”);
ConnectionManage cm = new ConnectionManage();
cm.create(cat);
cm.commit();
cm.close();
}
l更新方式:
表里已经存在catid为111的猫,否则查不到这条记录就更新不了信息
Void testUpdate() throws Exception{
Cat cat = new Cat();
cat. setCatId(“111”);
cat. SetSex(“F”);
cat. setName(“catmm”);
ConnectionManage cm = new ConnectionManage();
cm.update(cat);
cm.commit();
cm.close();
}
l删除方式:
删除方式比较简单,只要给出对象,并且主键值不为空,就可以删除表中记录。
Void testDelete() throws Exception{
Cat cat = new Cat();
cat. setCatId(“111”);
ConnectionManage cm = new ConnectionManage();
cm.delete(cat);
cm.commit();
cm.close();
}