Happy3w

NC持久化可框架JDBC FrameWork-2

2017.02.17
说明:此篇小编收集整理,非原作者。 第二章 对象的持久化 1. 普通Java Bean的持久化 1.1 对象定义 Person.java
//imports implied…. 
public class Person { 
private int id; 
private String name; 
int age;
public int getId () { 
return id; 
} 
public void setId (int id) { 
this.id = id; 
} 
…
}
在定义了Person类以后,需要将Person类映射成数据表,需要注意的是目前的持久层对Java Bean和数据表之间的关系有一定限制,如一个Java Bean只能映射成一个数据表。下面这个例子,我们使用一个简单的表,将一个表映射成一个Java Bean,Java Bean和表是一对一的关系。 Person.sql
CREATE TABLE PERSON( 
ID NUMBER (5, 0) NOT NULL, 
NAME VARCHAR (40) NOT NULL, 
AGE NUMBER (3, 0) NOT NULL,
PRIMARY KEY (ID) 
)
1.2 构造数据映射对象 负责定义数据库与javaBean的映射信息的接口定义如下:
public interface IMappingMeta {
    /**
     * 得到该数据库表的主键名称
     * @return 主键名称
     */
    public abstract String getPrimaryKey();
    /**
     * 得到值对象对应的表名
     * @return  表名
     */
    public abstract String getTableName();
    /**
     * 得到值对象的属性数组
     * @return
     */
    public abstract String[] getAttributes();
    /**
     * 得到值对象的属性数组一一对应的表的列名数组
     * @return
     */
    public abstract String[] getColumns();
}
根据ImappingMeta接口的定义,可以知道任何实现了ImappingMeta接口的对象映射元数据类都必须提供Java bean对应的数据库表名称、主键名称、字段名称,以及和数据库字段一一对应的Java bean对象的属性名称。根据前面的例子我们可以定义Person.java的对象映射元数据类PersonVOMeta.java 注意对象映射元数据类命名规范为nc.vo.xxx.XXXVOMeta
import nc.jdbc.framework.mapping.IMappingMeta;
public class PersonVOMeta implements IMappingMeta {
	private String[] attributes = new String[] { "id", "name", "age" };
	private String[] columns = new String[] { "ID", "NAME", "AGE" };
	public String getPrimaryKey() {
		return "ID";
	}
	public String getTableName() {
		return "Person";
	}
	public String[] getAttributes() {
		return attributes;
	}
	public String[] getColumns() {
		return columns;
	}
}
在完成了对象映射元数据类后,就剩下的应用的编码工作了。为简化这个工作,在NC系统中提供了nc.bs.dao.BaseDAO,该类是数据库访问帮助类封装了常用的持久层访问操作,提供了IUAPQueryBS和IVOPersistence以及superDMO中的所有方法。建议新的代码都使用BaseDAO。
BaseDAO dao=new BaseDAO()//使用默认的数据源
BaseDAO dao=new BaseDAO(dataSource)//使用指定的数据源
1.3 对象读取 BaseDAO对象已完成初始化,就可以方便地使用它了。首先,我们用它从数据库中读取一个Person对象。(在本例中,假设PERSON表中已存在10条记录,ID从1到10)。 要从数据库中得到一个Person对象,只需要BaseDAO实例。让我们读入ID是5的Person对象。
BaseDAO dao=new BaseDAO();
PersonVOMeta meta=new PersonVOMeta();
dao.retrieveByClause(Person.class,meta,"id=5");
1.4 对象写入 现在创建一个Person对象,并将它写入数据库。
BaseDAO dao=new BaseDAO();
Person person=new Person();
person.setName(“tom”);
person.setAge(“20”);
PersonVOMeta meta=new PersonVOMeta();
dao.insertObject(person,meta);//默认会自动为Person对象生成主键
如果想要保留Person类中的主键并插入到数据表中应该使用 dao.insertObjectWithPK(person,meta); 1.5 对象更新 现在利用Person对象,更新数据库中的ID=4的对应数据
BaseDAO dao=new BaseDAO();
Person person=new Person();
Person.setId(4);
person.setName(“tom”);
person.setAge(“20”);
PersonVOMeta meta=new PersonVOMeta();
dao.updateObject(person,meta);
1.6 对象删除 现在利用Person对象,删除数据库中的ID=4的对应数据
BaseDAO dao=new BaseDAO();
Person person=new Person();
Person.setId(“4”);
PersonVOMeta meta=new PersonVOMeta();
dao.deleteObject (person,meta);
BaseDAO针对Java Bean的持久化(CRUD操作)提供了各种应用不同的方法,具体使用方法和功能请参考BaseDAO的JavaDoc。 2. SuperVO的持久化 SuperVO是NC系统中比较特殊的值对象,该值对象自身已经包涵了值对象到数据库中的映射信息,所以SuperVO的持久化更为简单方便,无需构造对象映射元数据类,可以直接对VO进行持久化操作。 查询操作:
BaseDAO dao=new BaseDAO();
Collection vos=dao. retrieveAll (XXXSuperVO.class);//查询数据表中所有数据到对象集合中
更新操作
BaseDAO dao=new BaseDAO();
XXXSuperVO vo=new XXXSuperVO();
……
dao. updateVO (vo) ;
删除操作
BaseDAO dao=new BaseDAO();
XXXSuperVO vo=new XXXSuperVO();
……
dao. deleteVO (vo); 
插入操作
BaseDAO dao=new BaseDAO();
XXXSuperVO vo=new XXXSuperVO();
……
dao. insertVO (vo);
BaseDAO针对SuperVO的持久化(CRUD操作)提供了各种应用不同的方法,具体使用方法和功能请参考BaseDAO的JavaDoc