再抛Jdo的问题 进来讨论啊

etre 2003-10-15 11:38:19
1、Jdo现在大部分的实现是用的JDBC,也就是说它是建立在JDBC之上的呢?那么对于同样的程序,用JDO是否比JDBC慢呢?可能有一些JDO中用了对象池,那么它是如何保证和数据库同步呢?尤其是对实体的操作。
2、对于每个实体我们都要写一个类来进行操作,如果当我们的数据库中的表变了的话,那么对我们已写的实体是不是要重新进行编写呢?,但是如果用JDBC,则就不需要,只是它关于实体的概念没有那么强。
3、如何能在JDO之上建立一个通用的数据库操作平台。好象没有JDBC那么容易。
先抛几个来看看,以面还有啊
...全文
50 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyuzi 2003-10-15
  • 打赏
  • 举报
回复
程序有问题吗?怎么用ant好用啊,数据都写入数据库了,而且这不是我写的阿,是按照上面那个地址的源代码阿,只是改了包名
-------------------jdogenie.Main----------------------------
package jdogenie;

import javax.jdo.*;
import java.util.*;
import java.io.IOException;

public class Main {

public static void main(String[] args) throws Exception {
System.out.println("开始测试功能……");

inputCard("张三","东风东路311号","223003433995431237","020-38864157",500.00f,5000.0f);
System.out.println("信用卡已创建!");

}

/**
* 本方法专用于获取JDO API的核心对象:存储管理器PersistenceManager
*/
public static PersistenceManager getPersistenceManager() {
if(pmf == null) {
java.util.Properties p = new java.util.Properties();
try {
//从配置文件读入配置信息
p.load(Main.class.getClassLoader().getResourceAsStream("/creditSys.jdogenie"));

} catch(IOException ex) {
throw new RuntimeException(ex);
}
pmf = JDOHelper.getPersistenceManagerFactory(p);
}

return pmf.getPersistenceManager();
}
private static PersistenceManagerFactory pmf;

public static CreditCard inputCard(
String name,
String address,
String idcard,
String phone,
float initialBalance,
float allowOverDraft
) throws IdCardDuplicatedException {

CreditCard cc = new CreditCard();
cc.setName(name);
cc.setAddress(address);
cc.setIdcard(idcard);
cc.setPhone(phone);
cc.setInitialBalance(initialBalance);
cc.setAllowOverDraft(allowOverDraft);

//以下是自动产生的信息:
cc.setCreateTime(new Date());
cc.setBalance(initialBalance); //使刚创建后的余额等于初始余额,这是典型的业务逻辑

//下面将新信用卡保存到数据库,注意其中的JDO API。
PersistenceManager pm = getPersistenceManager();
//先检测是否已经有该身份证注册的信用卡存在:
Query q = pm.newQuery(CreditCard.class,"idcard==_newIdcard");
q.declareParameters("String _newIdcard");
Collection existCards = (Collection)q.execute(idcard);
if(existCards.iterator().hasNext()) {
throw new IdCardDuplicatedException(); //已经该身份证号存在
}

//身份证号没重复,以下保存该信用卡对象:
pm.currentTransaction().begin(); //每次对数据库的更新必须放到事务中
pm.makePersistent(cc);
pm.currentTransaction().commit(); //提交新对象
pm.close(); //释放JDO资源

return cc;
}

public static class IdCardDuplicatedException extends RuntimeException {}

}
----------------------------------------------------
xiaoyuzi 2003-10-15
  • 打赏
  • 举报
回复
按照http://www.csdn.net/develop/article/19/19397.shtm作的,我的build.xml是这样的
-------------build.xml----------------
<?xml version="1.0" encoding="GB2312" ?>
<project name="creditSys" default="run">
<property name="src" location="src" />
<property name="build" location="build" />
<property name="build.classes" location="build/classes" />
<property name="jdo.home" value="../../jdogenie-2.0.1"/>
<property name="jdo.project" value="creditSys.jdogenie"/>
<property name="jdo.lib" value="${jdo.home}/lib"/>
<property name="jdo.tools" value="${jdo.home}/tools"/>
<property name="jdo.license" value="${jdo.home}/license"/>
<property name="jdbc.jar" location="../../mysql/lib/mm.mysql-2.0.4-bin.jar" />

<path id="cp">
<pathelement path="${build.classes}"/>
<pathelement path="${jdbc.jar}"/>
<pathelement path="${jdo.license}"/>
<fileset dir="${jdo.lib}" includes="*.jar"/>

<fileset dir="." includes="*.jar" />
</path>

<target name="cleanup" description="清除所有编译生成的class文件">
<delete>
<fileset dir="${build.classes}" includes="**/*.class"/>
</delete>
</target>

<target name="compile">
<javac debug="true" destdir="${build.classes}" srcdir="${src}" classpathref="cp"/>
</target>

<target name="enhance" depends="cleanup, compile">
<taskdef classpathref="cp" resource="jdogenie.tasks"/>
<jdo-enhance project="${ant.project.name}.jdogenie" outputdir="${build.classes}" >
<persistentaware dir="${build.classes}">
<package name="jdogenie.*"/>
</persistentaware>
</jdo-enhance>
</target>

<target name="run" depends="enhance" description="Run the application">
<java classname="jdogenie.Main" classpathref="cp" />

</target>

</project>
----------------------------------------------------------
按照上面的build.xml用ant来运行,都没有问题,用java运行就不行。试了n种classpath了,总说java.lang.NullPointerException,不知道用java来运行应该怎么写命令行
spring 的优点? 1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 7.spring属于低侵入式设计,代码的污染极低 8.独立于各种应用服务器 9.spring的DI机制降低了业务对象替换的复杂性 10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部 什么是DI机制? 依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色 需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中 创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者 因此也称为依赖注入。 spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。 设置注入的优点:直观,自然 构造注入的优点:可以在构造器中决定依赖关系的顺序。 什么是AOP? 面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面 1.面向切面编程提供声明式事务管理 2.spring支持用户自定义的切面 面向切面编程(aop)是对面向对象编程(oop)的补充, 面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。 AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象, 是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分。 aop框架具有的两个特征: 1.各个步骤之间的良好隔离性 2.源代码无关性 Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory 为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 2. Hibernate是如何延迟加载? 1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection) 2. Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。 3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、 4. 说下Hibernate的缓存机制 1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存 2. 二级缓存: a) 应用及缓存 b) 分布式缓存 条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据 c) 第三方缓存的实现 5. Hibernate的查询方式 Sql、Criteria,object comptosition Hql: 1、 属性查询 2、 参数查询、命名参数查询 3、 关联查询 4、 分页查询 5、 统计函数 6. 如何优化Hibernate? 1.使用双向一对多关联,不使用单向一对多 2.灵活使用单向一对多关联 3.不用一对一,用多对一取代 4.配置对象缓存,不使用集合缓存 5.一对多集合使用Bag,多对多集合使用Set 6. 继承类使用显式多态 7. 表字段要少,表关联不要

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧