JDBC:数据库自定义类型与Java类的映射—将对象存储在关系数据库中(二)

这里利用PostgreSQL扩展的JDBC方法进行数据库自定义类型和Java类的映射关系,将Java对象插入关系数据库中。

步骤如下:

1.在数据库中自定义数据类型(CREATE TYPE TypeName AS)
2.在Java中新建对应的JavaBean,继承PGobject类,实现Serializable接口。
3.将数据库连接对象Connection接口强制转换成PGConnection,添加数据类型映射
((PGConnection)connection).addDataType(TypeName, 类型对应JavaBean的类)
4.给JavaBean对象设置类型。利用setType方法,参数为数据库中的TypeName。
5.利用PreparedStatement的setObject方法设置。

下面给出实例代码:

自定义数据类型:

CREATE TYPE provider AS(
  name varchar(20),
  address varchar(20)
);

对应的Java类:

public class Student extends PGObject implements Serializable {
  private String name;
  private String address;

  public Student() {}

  public Student(String name, String address) {
    this.name = name;
    this.address = address;
  }

  public void setName(String name) {
    this.name = name;
  }
  public String getName() {
    return name;
  }

  public void setAddress(String address) {
    this.address = address;
  }
  public void getAddress() {
    return address;
  }
}

关系映射和数据插入:

try {
    String sqlStr = "INSERT INTO goods(id, name, price, type, provider) VALUES(?, ?, ?, ?, ?)";
    ((PGConnection)dbConnection).addDataType("provider", Provider.class);
    PreparedStatement pStatement = dbConnection.prepareStatement(sqlStr);
    pStatement.setInt(1, goods.getId());
    pStatement.setString(2, goods.getName());
    pStatement.setBigDecimal(3, goods.getPrice());
    pStatement.setString(4, goods.getType());
    goods.getProvider().setType("provider");
    pStatement.setString(5, goods.getProvider());
    pStatement.execute();
    pStatement.close();
} catch (Exception e) {
    e.printStackTrace();
}

搞了两天终于搞定了!有遇到类似问题的童鞋可以参考!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助 1.2.6. 加载并存储对象 1.3. 第部分 - 关联映射 1.3.1. 映射Person 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 1.3.5. 双向关联 1.3.6. 使双向连起来 1.4. 第三部分 - EventManager web应用程序 1.4.1. 编写基本的servlet 1.4.2. 处理与渲染 1.4.3. 部署与测试 1.5. 总结 2. 体系结构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 2.5. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2. 获得SessionFactory 3.3. JDBC连接 3.4. 可选的配置属性 3.4.1. SQL方言 3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 进制流 (Binary Streams) 3.4.4. 级缓存与查询缓存 3.4.5. 查询语言的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators)(可选) 4.2. 实现继承(Inheritance) 4.3. 实现equals()和hashCode() 4.4. 动态模型(Dynamic models) 4.5. 元组片断映射(Tuplizers) 5. 对象/关系数据库映射基础(Basic O/R Mapping) 5.1. 映射定义(Mapping declaration) 5.1.1. Doctype 5.1.2. hibernate-mapping 5.1.3. class 5.1.4. id 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (可选) 5.1.9. property 5.1.10. 多对一(many-to-one) 5.1.11. 一对一 5.1.12. 自然ID(natural-id) 5.1.13. 组件(component), 动态组件(dynamic-component) 5.1.14. properties 5.1.15. 子(subclass) 5.1.16. 连接的子(joined-subclass) 5.1.17. 联合子(union-subclass) 5.1.18. 连接(join) 5.1.19. 键(key) 5.1.20. 字段和规则元素(column and formula elements) 5.1.21. 引用(import) 5.1.22. any 5.2. Hibernate 的类型 5.2.1. 实体(Entities)和值(values) 5.2.2. 基本值类型 5.2.3. 自定义类型 5

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值