j2ee学习笔记(比较凌乱)

来源:互联网 发布:南昌金域名都 小姐 编辑:程序博客网 时间:2024/04/28 12:54
hibernate是一个java的开发框架,这一点人尽皆知.但需要说明的是,它是独立的,与servlet\struts2\spring虽然经常联合使用,但是他们并没有直接关联,起码他们是不同的人分别开发的.
使用hibernate需要到其官网www.hibernate.org下载文件,我今天下的是hibernate-release-4.3.10.Final.zip.解压后,其中不仅有使用手册documentation,还有hibernate所有的运行库文件资源包(lib目录下),项目源代码(存于project目录), 以及重要的使用hibernate框架必须使用的运行库文件hibernate3.jar .但直接使用<<Java web程序设计教程>>这本书中的例子会发现,在所有使用hibernate的例子里,hibernate.jar都在lib文件夹下.使用spring的例子,相应的jar包也在.


hibernate是对odbc的面向对象化的包装,也就是说原先的数据库操作部分,都必须开发者必须面向odbc,理清connect,select等数据库联接,选择操作.为了简化开发的操作步骤,进一步的傻瓜化开发过程,hibernate框架的发明者将数据库完全封装了起来,开发者利用这个框架,只需要填写几个xml表中的属性,然后定义一个数据表类,其中有数据,有对数据的存取操作,而框架本身已经能够自动将你的这个存取操作关联到持久化数据存取了,即自动对应到数据库的存取了.


依次类推,struts,spring实际上都和hibernate差不多,他们都是java人员在开发过程中为了简化开发步骤,也就是为了在人力上偷懒,以及标准化操作,简化代码量(毕竟代码量越多,出错的概率越大),而创造出来的开发框架.struts是进一步简化和标准化servlet操作.


spring当中配置mysql数据库的数据源,配置代码如下:这个配不好,apache会报错找不到数据库.而mysql-connector-java-5.0.3-bin.jar必须手工添加进项目lib目录下,如果缺少这个jar包,apache会报错找不到com.mysql.jdbc.Driver驱动文件.
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/company" />
<property name="username" value="root" />
<property name="password" value="123456" />
</bean>\
<<Java web程序设计教程>>第13章company这个例子,很好的给出了一个spring的例子.




遇到报错:
JDBC exception on Hibernate data access; nested exception is org.hibernate.excep10
通常会认为确实是hibernate配置文件有问题,一种情况可能是配置文件中的java bean文件和数据库文件中的表属性不符.
而当这一切都符合的时候,请注意可能只是需要将配置中scheme属性删掉,有时候自动生成的配置文件会出这个错。因为这个属性代表的是Oracle等数据库中的用户名.在我的这个例子中一直都是schema=odb,我前面一直未怀疑该属性,但对比school案例,又发现school中hibernate配置文件根本无此属性并运行良好,也曾怀疑过,但最终未下杀手,结果到头来还是这个属性坏的事.
schema="dbo" catalog="LiberSystem
而另一个属性catalog则更是一定要删除,因为catalog代表的是数据库名.要明白,这个属性一旦定义,hibernate在解析的时候会依据它来找数据库,在SSH整合架构下已经不再听从本该听从的applicationContext.xml文件的了.


还有一个爱出错的地方是Dao中用hibernateTemplate进行查询操作时,查询语句容易出现语法错误.原书及源代码中都是用的
String queryString = "from Operator as model where model."+ propertyName + "= ?";
List<Operator> result = getHibernateTemplate().find(queryString,value);
但报sql语法错误,改成String queryString = "from Operator where "+ propertyName + "= ?";就执行成功了.


需要说明的是一旦出现数据库错误,两个疑点重点检查:
一是数据类型,比如datetime date,
二是bean类属性名称和数据库表属性名称是否对应。
三是hibernate sql语句的语法是否正确。不同数据库对应的sql语句语法是不同的。
0 0
原创粉丝点击