import java.io.Serializable
public class MyObject implements Serializable {
private static final long serialVersionUID = 1L
private int i
public int getI() {
return i
}
public void setI(int i) {
this.i = i
}
}
//测试 的方法如下
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.io.IOException
import java.io.ObjectInputStream
import java.io.ObjectOutputStream
import java.sql.Connection
import java.sql.DriverManager
import java.sql.PreparedStatement
import java.sql.ResultSet
public class test {
public static void main(String[] args) throws IOException,
ClassNotFoundException {
MyObject obj = new MyObject()
obj.setI(4567)
write(Object2Bytes(obj))
// read()
}
public static void write(byte[] b) throws ClassNotFoundException {
System.out.println(b.length)
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")
try {
Connection con = DriverManager.getConnection("jdbc:odbc:temp")
String sql = "insert into tab values(?)"
PreparedStatement pstmt = con.prepareStatement(sql)
pstmt.setBytes(1, b)
pstmt.execute()
pstmt.close()
con.close()
} catch (Exception e) {
e.printStackTrace()
}
}
public static void read() throws ClassNotFoundException {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")
try {
Connection con = DriverManager.getConnection("jdbc:odbc:temp")
String sql = "select * from tab"
PreparedStatement pstmt = con.prepareStatement(sql)
ResultSet res = pstmt.executeQuery()
while (res != null &&res.next()) {
byte[] b = res.getBytes("key")
System.out.println(b.length)
MyObject obj = (MyObject) Bytes2Object(b)
System.out.println(obj.getI())
}
pstmt.close()
con.close()
} catch (Exception e) {
e.printStackTrace()
}
}
// 将对象转换成字节数组
public static byte[] Object2Bytes(Object obj) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream()
ObjectOutputStream oos = new ObjectOutputStream(baos)
oos.writeObject(obj)
return baos.toByteArray()
}
// 将字节数组转换成为对象
public static Object Bytes2Object(byte[] b) throws IOException,
ClassNotFoundException {
ByteArrayInputStream bais = new ByteArrayInputStream(b)
ObjectInputStream ois = new ObjectInputStream(bais)
Object obj = ois.readObject()
return obj
}
}
POJO是一种概念或者接口,身份及作用随环境变化而变化,DTO是经过处理后的PO,可能增加或者减少PO的属性,一个POJO持久化以后就是PO。
一、具体含义:
POJO(plainordinaryjavaobject):简单无规则java对象
传统意义的java对象。就是说在一些Object/RelationMapping工具中,能够做到维护数据库表记录的persisentobject完全是一个符合JavaBean规范的纯Java对象,没有增加别的属性和方法,是最基本的JavaBean,只有属性字段及setter和getter方法。
DAO(dataaccessobject):数据访问对象
是一个sun的一个标准j2ee设计模式,这个模式中有个接口就是DAO,它负持久层的操作。为业务层提供接口。此对象用于访问数据库。通常和PO结合使用,DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作。夹在业务逻辑与数据库资源中间。配合VO,提供数据库的CRUD操作。
二、相关概念:
PO(persistantobject):持久对象
在o/r映射的时候出现的概念,如果没有o/r映射,没有这个概念存在了。通常对应数据模型(数据库),本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。
VO(valueobject):值对象
通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DTO(数据传输对象),在web上传递。
TO(TransferObject):数据传输对象
在应用程序不同tie(关系)之间传输的对象
BO(businessobject):业务对象
从业务模型的角度看,见UML元件领域模型中的领域对象。封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务操作。