随笔分类 -  JAVA

摘要:这里我们主要介绍C#和Java,包括介绍C#和Java都是对传统C++面向组件的编程方式的革新,但7年前就出道的Java在这方面显然与C#不可同日而语等方面。自C#诞生之日起,关于C#和Java之间的论战便此起彼伏,至今不辍。抛开Microsoft与Sun之间的恩怨与口角,客观地从技术上讲,C#和Java都是对传统面向对象程序设计在组件化软件时代的革新之果,可谓殊途同归。虽说两种语言有着“90%的重叠”,但那另外“10%的较量”也往往能够左右一架天平的方向。C#和Java都提出了对传统C++艰深、晦涩的语法语义的改良。在语法方面,两者都摈弃了C++中函数及其参数的const修饰、宏代换、全局变 阅读全文
posted @ 2010-12-26 23:17 左正 编辑
摘要:Hibernate Query Language(HQL)提供了十分强大的功能,推荐大家使用这种查询方式。HQL具有与SQL语言类似的语法规范,只不过SQL针对表中字段进行查询,而HQL针对持久化对象,它用来取得对象,而不进行update、delete和insert等操作。而且HQL是完全面向对象的,具备继承、多态和关联等特性。1.from子句from字句是最简单的HQL语句,例如 from Student,也可以写成select s from Student s。它简单地返回Student类的所有实例。除了Java类和属性的名称外,HQL语句对大小写并不敏感,所以在上一句HQL语句中,fro 阅读全文
posted @ 2010-12-20 22:18 左正 编辑
摘要:1问:Hibernate初始化时总是报错:java.lang.NoClassDefFoundError Hibernate初始化时出现出错代码: java.lang.NoClassDefFoundError: net/sf/ehcache/CacheException 答:这是新手常见问题。是因为使用默认设置时,Hibernate文档里指出的Hibernate库不完整,缺少ehcache.jar(用于支持Ehcache的相关文件)。配置中加入以上文件,就可以避免初始化时出现java.lang.NoClassDefFoundError:net/sf/ehcache/CacheException异 阅读全文
posted @ 2010-12-20 22:17 左正 编辑
摘要:1. net.sf.hibernate.MappingException 当出现net.sf.hibernate.MappingException: Error reading resource:…异常时一般是因为映射文件出现错误。 当出现net.sf.hibernate.MappingException: Resource: … not found是因为XML配置文件没找到所致,有可能是放置目录不正确,或者没将其加入hibernate.cfg.xml中。 2. net.sf.hibernate.PropertyNotFoundException 当出现net.sf.hibernate.Pr 阅读全文
posted @ 2010-12-20 22:16 左正 编辑
摘要:批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。以下程序直接通过Hibernate API批量更新CUSTOMERS表中年龄大于零的所有记录的AGE字段: 如果CUSTOMERS表中有1万条年龄大于零的记录,那么Session的find()方法会一下子加载1万个Customer对象到内存。当执行tx.commit()方法时,会清理缓存,Hibernate执行1万条更新CUSTOMERS表的update语句: view plaincopy to clipboardprint? update CUSTOMERS set AGE=? …. where ID=i; up 阅读全文
posted @ 2010-12-20 22:15 左正 编辑
摘要:User u = (User) users.get(0); u.setName("新用户名" + count); //当count为20的倍数时,将更新的结果从Session中flush到数据库 if ( ++count % 20 == 0 ) { session.flush(); session.clear(); } } tx.commit(); HibernateUtil.closeSession(); } 通过这种方式,虽然可以执行批量更新,但效果非常不好。执行效率不高,而且需要先执行数据查询,然后再执行数据更新,并且这种更新将是逐行更新,即每更新一行记录,都需要执行一条update语句 阅读全文
posted @ 2010-12-20 22:14 左正 编辑
摘要:insert方法 public void insert(Object o){ Session session = HibernateSessionFactory.currentSession(); Transaction t = session.beginTransaction(); session.save(o); t.commit(); HibernateSessionFactory.clossSession(); } delete方法 public void delete(Object o,Serializable id){ Session session = HibernateSess 阅读全文
posted @ 2010-12-20 22:14 左正 编辑
摘要:1)inverse中提及的side其实是指一个类或者表的概念,双向关联其实是指双方都可以取得对方的应用。 2)维护关系这个名词还是稍显模糊或者晦涩。我们一般说A类或者A表(这里的表的是指多对多的连接表)有责任维护关系,其实这里的意思是说,我在应用在更新,创建,删除(读就不用说了,双向引用正是为了方便读而出现)A类或者A表时,此时创建的SQL语句必须有责任保证关系的正确修改。 3)inverse=false的side(side其实是指inverse=false所位于的class元素)端有责任维护关系,而inverse=true端无须维护这些关系。 4)我们说inverse设立不当会导致性能低下, 阅读全文
posted @ 2010-12-20 22:13 左正 编辑
摘要:set节点有以下属性(摘自Hibernate文档): (1) name 集合属性的名称 (2) table (可选??默认为属性的名称)这个集合表的名称(不能在一对多的关联关系中使用) (3) schema (可选) 表的schema的名称, 他将覆盖在根元素中定义的schema (4) lazy (可选??默认为false) lazy(可选--默认为false) 允许延迟加载(lazy initialization )(不能在数组中使用) (5) inverse (可选??默认为false) 标记这个集合作为双向关联关系中的方向一端。 (6) cascade (可选??默认为none) 让操 阅读全文
posted @ 2010-12-20 22:13 左正 编辑
摘要:Common Struts Errors and Causes This page contains errors and exceptions commonly encountered during web application development using Struts. Along with the exception or error messages themselves, potential causes of these errors are often listed along with links to additional resources. To find th 阅读全文
posted @ 2010-12-20 22:12 左正 编辑
摘要:Inverse和cascade是Hibernate映射中最难掌握的两个属性。两者都在对象的关联操作中发挥作用。 1.inverse属性:inverse所描述的是对象之间关联关系的维护方式。 inverse只存在于集合标记的元素中。Hibernate提供的集合元素包括set/ map/ list/ array / bag / Inverse属性的作用是:是否将对集合对象的修改反映到数据库中。 inverse属性的默认值为false,表示对集合对象的修改会被反映到数据库中 inverse=”true”表示对集合对象的修改不会被反映到数据库中。 one-to-many中inv 阅读全文
posted @ 2010-12-20 22:12 左正 编辑
摘要:Struts controller基本功能是 1. 截获用户的Http请求 2. 把这个请求映射到一个定义好的业务操作上 3. 获取业务操作结果,提供给客户端 4. 决定下一步应该显示哪一个页面 有几个部分共同组成了Struts 的Controller,用户的请求发送到ActionServlet中,ActionServlet调用RequestProssor开始处理用户请求的流程,在这个流程中,会查找ApplicationConfig,得到用户请求对应的Action,调用相应的Action来具体执行用户的请求,最后返回ActionForward,转向相应的流程。 ================ 阅读全文
posted @ 2010-12-20 22:11 左正 编辑
摘要:当要将一个对象存储在网络、硬盘、或通过流传输的时候,必须对该类实现序列化,否则不能执行以上操作!你要传输或保存对象时,需要将对象转换成bit流, 读取对象时,需要重新转换回来。 这样,就必需实现序列化接口。序列化是为了存储整个对象 什么是序列化?在什么情况下将类序列化? 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializab 阅读全文
posted @ 2010-12-20 22:10 左正 编辑
摘要:java.io.Serializable 接口没有任何方法和字段,仅仅表示实现它的类的对象可以被序列化。实现了这个接口的所有类及其子类都可以对象序列化。 序列化前,虚拟机要清楚每个对象的结构,所以序列化会比较慢,如果关心性能或者需要读取大量的特定的类对象,可以使用 java.io.Externalizable接口 对象序列化一般出现在如下的环境下: 把对象的字节序列保存在物理存储介质中(如硬盘文件); 把对象的字节序列经网络传输给请求者; 序列过程的特殊处理: private void writeObject(java.io.ObjectOutputStream out) throws IOE 阅读全文
posted @ 2010-12-20 22:08 左正 编辑
摘要:在控制台显示HQL语句property name="show_sql"true/property----------------------------------------------------------hibernate里面有四个参数比较重要cascade 有四个取值:none all save-update delete------------------------------1 第一种查询 from Cat cat where cat.mate.name like "kit%"相当于:select * from cat_table as table1 cat_table 阅读全文
posted @ 2010-12-20 22:06 左正 编辑
摘要:package dao; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.Query; import po.HibernateSessionFactory; import po.StuInfo; import po.StuMarks; import java.util.*; public class Dao { public List query1(){ Session session=HibernateSessionFactory.getSession(); String 阅读全文
posted @ 2010-12-20 22:06 左正 编辑
摘要:注:对Struts进行扩展有三种方法(1.修改ActionServlet,2.继承RequestProcessor.3.做一插件继承PlugIn)问题:有时候你需要在应用程序启动时装载一些数据到程序上下文中或执行某些操作。解决方法:创建一个实现了org.apache.struts.action.PlugIn接口的类文件并在struts-config.xml中设置plug-in元素。以下代码片段显示了一个plug-in生命声明和一个自定义的set-property子元素:plug-in className="com.oreilly.strutsckbk.CustomPlugin" set- 阅读全文
posted @ 2010-12-20 22:05 左正 编辑
摘要:Spring 的依赖注入机制,可以在运行期为组件配置所需资源,而无需在编写组件代码时就加以指定,从而在相当程度上降低了组件之间的耦合。 Spring 通过依赖注入模式,将依赖关系从编码中脱离出来,从而大降低了组件这间的耦合,实现了组件真正意义上的即插即用。这也是Spring最具价值的特性这一。 面向接中编程。 诚然,即使没有Spring,实现面向接中的设计也不呆难。Spring对于面向接口设计的意义,在于它为面向接口编程提供了一个更加自然的平台。基于Spring开发,来自于Spring所提供的简单舒适的依赖注入实现。Spring使得接口的定义和使用不在像传统编码过程中那么繁琐。(传统编码过程中 阅读全文
posted @ 2010-12-20 22:05 左正 编辑
摘要:---base标签---  使用base标签最主要的原因,是为了确保文档中所有的相对URL都可以被分解成正确的文档地址,即使在文档本身被移动或重命名的情况下也可以正确解析。  在创建文档集合时,使用base标签尤为重要。通过在每个文档中放置正确的base标签,就可以在目录甚至服务器之间移动整个文档集合,而不会破坏文档中任何链接。如果想要让用户查询指向一个与主文档URL不同的URL,那么也需要为可搜索文档( isindex)使用base标签。  当文档同事包含isindex标签和其他相对URL时,如果相对URL与所希望的索引处理URL无关,那么就可能会出现问题。正因为这个 阅读全文
posted @ 2010-12-20 22:04 左正 编辑
摘要:在1.0版本中我们通常都是用execute方法来完成我们对业务逻辑的处理及页面的转发。通常在一个Action中我们都只能够完成一种业务逻辑的操作。如果要是完成多个业务逻辑(比如:添加、删除等)功能相近的业务逻辑我们就没有办法了么?答案是否定的,我们可以通过在页面中定义一个隐藏变量,在不同的页面要求处理不同的业务逻辑的时候我们可以赋予这个变量不同的值,并在execute方法中通过对变量值的判断来完成不同的业务逻辑操作。 举例来说,我们首先在页面中定义一个隐藏变量。 html:hidden property="operAt"/ 然后定义一个JavaScript函数,我们可以在通过点击提交按钮的 阅读全文
posted @ 2010-12-20 22:03 左正 编辑