`
liuhuashan_21
  • 浏览: 5619 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

jdbc学习笔记(四) --引用

阅读更多

一、ID的High/Low算法
  高位数字分别与低位数字相匹配,得到的数字是唯一的
  减少与数据库的交互

二、ORM
1、类映射成表
  类名与表名对应
2、属性定义映射成列,类型之间必须是兼容的
3、类关系映射成表关系

一对一双向关系
内存中都保存对方的一个引用
数据库中,表b的id是主键,也是外键,引用a表的id主键 -- share pk
表b中有一个字段aid是外键,引用a表的主键,并且有唯一约束  -- pk+fk
共享主键:
create table car_pk (
id number(10,0) not null,
name varchar2(15),
serial varchar2(30),
manufacturer varchar2(50),
producedate date,
primary key (id)
);

create table engine_pk (
id number(10,0) not null,
model varchar2(20),
manufacturer varchar2(50),
producedate date,
primary key (id)
);

alter table engine_pk
add constraint fk_engine_car_pk
foreign key (id)
references car_pk(id);

外键+唯一约束
create table car_fk (
id number(10,0) not null,
name varchar2(15) not null,
serial varchar2(30) not null,
manufacturer varchar2(50) not null,
producedate date,
primary key (id)
);

create table engine_fk (
id number(10,0) not null,
model varchar2(20) not null,
manufacturer varchar2(50) not null,
producedate date,
carid number(10,0) unique,
primary key (id)
);

alter table engine_fk
add constraint fk_engine_car_fk
foreign key (carid)
references car_fk(id);

实体对象:在内存中有id属性的
值对象:没有id的,依赖其他对象存在

一对多关系
一的一方保存多一方的一个集合,最好使用set,保证无重复元素
多的一方保存一一方的一个对象的引用
public class Order implements Serializable{
private int id;
private String owner;
private String phone;
private String address;
private Set<Item> items = new HashSet<Item>();
}
public class Item implements Serializable{
private int id;
private String product;
private int amount;
private Order order;
}

create table ec_item (
id number(10,0) not null,
product varchar2(15) not null,
amount number(10,0) not null,
orderid number(10,0) not null,
primary key (id)
);

create table ec_order (
id number(10,0) not null,
owner varchar2(15) not null,
phone varchar2(15) not null,
address varchar2(50),
primary key (id)
);

alter table ec_item
add constraint fk_item_order
foreign key (orderid)
references ec_order(id);


多对多
双方都保存对方的多个引用
例子:学生选课
public class TarenaCourse implements Serializable{
private int id;
private String name;
private int period;
private Set<TarenaStudent> students = new HashSet<TarenaStudent>();
}
public class TarenaStudent implements Serializable{
private int id;
private String name;
private Date birthday;
private Set<TarenaCourse> courses = new HashSet<TarenaCourse>();
}

create table student (
id number(10,0) not null,
name varchar2(15) not null,
birthday date,
primary key (id)
);

create table student_course (
sid number(10,0) not null,
cid number(10,0) not null,
primary key (sid, cid)
);

create table course (
id number(10,0) not null,
name varchar2(15) not null,
perion number(10,0),
primary key (id)
);

alter table student_course
add constraint fk_student
foreign key (sid)
references student(id);

alter table student_course
add constraint fk_course
foreign key (cid)
references course(id);

通过学生姓名找课程
select c.name from cource c,student s,student_course sc
where c.id=sc.cid and s.id=sc.sid
and s.name = 's1'

三、继承关系
public abstract class Computer implements Serializable{
private int id;
private int price;
private String manufacturer;
}

public class Desktop extends Computer{
private boolean isLCD;
}

public class Notepad extends Computer{
private float weight;
private float thickness;
}

1、建3张表 table per class
子类中保存父类的主键作为外键
create table computer_tpc (
id number(10,0) not null,
price number(10,0) not null,
manufacturer varchar2(30) not null,
primary key (id)
);

create table desktop_tpc (
computerid number(10,0) not null,
islcd char(1),
primary key (computerid)
);

create table notepad_tpc (
computerid number(10,0) not null,
weight float,
thickness float,
primary key (computerid)
);

alter table desktop_tpc
add constraint fk_desk_computer_tpc
foreign key (computerid)
references computer_tpc(id);

alter table notepad_tpc
add constraint fk_note_computer_tpc
foreign key (computerid)
references computer_tpc(id);

查找所有电脑的配制(只要是电脑就能被查出来)
select c.id,c.price,d.islcd,n.weight,n.thickness
from computer c, desktop d,notepad n
where c.id = d.computerid(+)
and c.id = n.computer(+)

2、建2张表
create table desktop (
id number(10,0) not null,
price number(10,0) not null,
manufacturer varchar2(30) not null,
islcd char(1),
primary key (id)
);

create table notepad (
id number(10,0) not null,
price number(10,0) not null,
manufacturer varchar2(30) not null,
weight float,
thickness float,
primary key (id)
);

3、建1张表
create table computer_tph (
id number(10,0) not null,
category char(1) not null,
price number(10,0) not null,
manufacturer varchar2(30) not null,
islcd char(1),
weight float,
thickness float,
primary key (id)
);

四、JDBC2.0扩展

1、JDBC DataSource
DataSourse(数据源),包含了连接数据库所需的信息,可以通过数据源或的数据库连接,有时由于某些连接数据库的信息会变更,
所以经常使用包含数据库连接信息的数据源。

JDBC取连接有2种方式:Driver Manager 和 数据源

2、JNDI和DataSourse
主要功能:定位服务
JNDI,(命名路径服务)也用于存储数据,但是他所存储的是一写零散的信息。
JNDI的方法是在javax.naming包下

InitialContext 连接,初始化上下文,这个类的提供者一般也是服务器的提供者
查找和绑定
查找由我们做,绑定我们并不关心,只配制数据源就好了

代替DriverManager定位数据源
遍布式企业的数据源的属性可以存储在同一个目录(JNDI)中
以这种方式集中管理用户名、密码、数据库名和JDBC URL
创建连接:
Context jndiContext = new InitialContext();
DataSource source = (DataSource)jndiContext.lookup(" ");
COnnection con = source.getConnection();

3、连接池
要提供连接池数据源,带缓存的连接
带缓存的连接,即可池化的连接,其close()方法,在物理上并没有被关闭,而是保留在一个队列中并被反复使用。

4、分布式事务
事务分为JDBC事务和JTA
JDBC事务,由容器管理
JTA,分布式事务,由容器管理

分享到:
评论

相关推荐

    java笔记--

    本笔记将深入探讨Java的基础知识和核心概念。 1. **Java基础** - **语法**:Java语法与C++类似,但更加简洁。例如,Java使用垃圾回收机制自动管理内存,避免了C++中的内存泄漏问题。 - **类与对象**:Java是面向...

    javaEE学习笔记

    以上是对《Java/JavaEE 学习笔记》中提到的主要知识点的详细总结,涵盖了 Unix、Java 核心概念、JDBC、Hibernate 以及 Servlet 等多个方面。这些内容不仅适合初学者作为入门指南,也为进阶学习者提供了深入研究的...

    2022年Java学习笔记-Java课程配套案例.rar

    这份"2022年Java学习笔记-Java课程配套案例.rar"压缩包文件显然是为了帮助学习者深入理解Java编程,通过实践案例来巩固理论知识。下面将详细探讨Java语言的一些核心知识点,并结合压缩包中的案例进行说明。 1. **...

    《java学习》-java学习笔记.zip

    这份《java学习》笔记包含了多个核心主题,旨在帮助初学者和有经验的开发者深入理解和掌握Java技术。 1. **正则表达式(正则.md)**: 正则表达式在Java中用于文本匹配和搜索,是处理字符串的强大工具。Java提供了...

    Java架构面试专题(含答案)和学习笔记-1

    本资料包含学习笔记和答案,便于自我检验和理解。 1. **Java基础知识**: - **内存管理**:包括垃圾回收机制、内存泄漏及其检测方法、JVM内存模型(堆、栈、方法区等)。 - **数据类型与数据结构**:深入理解原始...

    java学习比记-北大青鸟时做的笔记,每堂课都有

    【Java学习笔记】北大青鸟课程精华解析 Java是一种广泛使用的高级编程语言,以其平台无关性、面向对象的特性以及强大的安全性能而受到广大开发者喜爱。北大青鸟作为知名的IT培训机构,提供了丰富的Java教学资源,这...

    servlet学习笔记_JNDI.doc

    ### JNDI (Java Naming and Directory Interface)学习笔记 #### 一、JNDI简介 JNDI(Java Naming and Directory Interface),即Java命名和目录接口,是在分布式计算环境中使用的一种标准化接口,它允许Java应用...

    Java+JDK6学习笔记

    本篇将围绕“Java+JDK6学习笔记”展开,探讨在JDK6环境下Java编程的核心知识点。 1. **JDK6概述**:JDK6是Oracle公司于2006年发布的Java平台标准版(Java SE)的一个重要版本,它的全称是Java SE 6,带来了许多新...

    Java学习笔记-个人整理的

    {1.10.3}数组对象的引用}{35}{subsection.1.10.3} {1.10.4}数组对象的复制}{35}{subsection.1.10.4} {1.10.5}扩充数组对象长度}{36}{subsection.1.10.5} {1.10.6}Problems}{37}{subsection.1.10.6} {1.11}简单...

    JAVA学习笔记————————

    在深入探讨JAVA学习笔记之前,我们首先理解一下JAVA这一编程语言的重要性。JAVA,由Sun Microsystems公司(现已被Oracle收购)于1995年推出,是一种面向对象的、跨平台的编程语言,以其“一次编写,到处运行”的特性...

    Hibernate 的学习笔记

    ### Hibernate 学习笔记知识点详解 #### 一、Hibernate 简介 - **概念**:Hibernate 是一种“对象/关系映射”(Object/Relational Mapping,简称 ORM)技术,用于解决 Java 应用程序与关系型数据库交互的问题。 - *...

    传智播客JPA学习笔记修改免积分版

    ### 传智播客JPA学习笔记知识点梳理 #### 一、JPA概述与核心价值 - **定义**: JPA (Java Persistence API) 是由 Sun 官方提出的一种 Java 持久化标准,旨在为 Java 开发者提供一套统一的对象-关系映射 (ORM) 工具,...

    Spring学习笔记(10)----公共属性的注入配置

    在Spring框架的学习中,公共属性的注入配置是一个重要的概念,它可以帮助我们实现代码的复用,提高开发效率。本文将详细解析Spring中的公共属性注入配置,并通过实例来深入理解其工作原理。 首先,我们需要理解什么...

    java技术从入门到精通(孙鑫)学习笔记

    孙鑫老师的《java技术从入门到精通》学习笔记是许多初学者和进阶者的重要参考资料。下面,我们将深入探讨这份珍贵资料中可能涵盖的核心概念。 首先,入门阶段,你需要了解Java的基础语法。包括数据类型(如基本类型...

    java学习笔记JDK6.0课件和代码

    这个压缩包中包含的"java学习笔记JDK6课件和课本代码"是学习JDK 6.0的重要参考资料,可以帮助你深入理解Java编程的核心概念和实践技巧。 1. **Java基础**:Java是一种面向对象的编程语言,它的基础包括类、对象、...

    java学习笔记及源代码

    这份"java学习笔记及源代码"的资源,显然旨在帮助初学者或有经验的开发者深入理解和实践Java编程。以下是对这个主题的详细阐述: 一、Java语言基础 1. 类与对象:Java的核心是面向对象编程,类是对象的模板,对象是...

    马士兵hibernate学习笔记

    ### 马士兵Hibernate学习笔记知识点总结 #### 一、HelloWorld示例 - **目的**:通过简单的示例理解Hibernate的基本使用流程。 - **步骤**: - 创建Java项目`hibernate_0100_HelloWorld`。 - 建立库依赖,包括...

    《IT学习资料2》-java学习笔记.zip

    《IT学习资料2》-java学习笔记.zip 是一个包含了丰富的Java学习资源的压缩包,它提供了从基础到进阶的全面教程。这个压缩包中包含了多个Markdown格式的文档,每个文档对应一个特定的Java编程主题,是学习和巩固Java...

Global site tag (gtag.js) - Google Analytics