JAVA网站制作之深切浅出进修Hibernate框架(一):从实例动手初识Hibernate框架仓酷云 ...
一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。这篇博客是hibernate进修的第一篇,次要复杂先容hibernate框架,以后复杂说一下hibernate的目次布局,最初写一个复杂的hibernate实例。经由过程这三步来复杂的熟悉一下hibernate。空话未几说,步进正题。起首复杂先容一下hibernate框架,它是一种基于JDBC的支流耐久化框架,是一个优异的orm完成;它对JDBC举行了轻量级的封装,年夜年夜简化了数据会见层冗杂的反复代码;并且它使用了java反射机制来完成程序的通明性;它的本意是从对象动身而非干系数据库动身,这一点也就是申明它是以面向对象头脑办理数据库的操纵成绩。
以上是从观点上说的hibernate,上面来看一下hibernate目次布局:
<br>
这就是解压出来的hibernate的目次文件,在这内里doc目次为文档,lib目次为所用的库文件,src为hibernate源代码,hibernate3.jar为打包后的字节码文件。别的一些随后博客碰到再先容。
这里要说的进修hibernate框架一直和3个对照主要的文件打交道,即hibernate自己的设置文件hibernate.cfg.xml文件,这个文件用来设置hibernate本身属性,数据库驱动、数据库毗连和数据库方言;别的一个是对象干系映照设置文件,如UserInfo.hbm.xml。此文件卖力实体对象到干系数据库映照。最初一个就是我们罕见的耐久化类了,也就是对象实际中的实体。
有了下面的基本,我们来一步一步的完成一个hibernate实例。
1.在eclipse中设置hibernate情况:
我们起首创建一个项目,名叫hibernate_first,以后自界说个寄存jar包的库,就取名为UserLibrary;导进相干的包,这些包包含响应数据库驱动、hibernate目次下lib文件夹下的jar包,另有hibernate目次下的hibernate3.jar。
<br>
2.导进hibernate.cfg.xml,而且设置数据库毗连:
将hibernate目次下的hibernate.cfg.xml文件导进项目标src目次下,以后设置数据库毗连信息,我们这个实例拔取的是用Mysql作为数据库,以是我们就要在hibernate.cfg.xml下设置以下信息。
[*]<!DOCTYPEhibernate-configurationPUBLIC
[*]"-//Hibernate/HibernateConfigurationDTD3.0//EN"
[*]"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
[*]
[*]<hibernate-configuration>
[*]<session-factory>
[*]<propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
[*]<propertyname="hibernate.connection.url">jdbc:mysql://localhost:3306/User</property>
[*]<propertyname="hibernate.connection.username">root</property>
[*]<propertyname="hibernate.connection.password">123</property>
[*]<propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
[*]
[*]
[*]
[*]</session-factory>
[*]</hibernate-configuration>
<!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><propertyname="hibernate.connection.url">jdbc:mysql://localhost:3306/User</property><propertyname="hibernate.connection.username">root</property><propertyname="hibernate.connection.password">123</property><propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property></session-factory></hibernate-configuration>
3.创建实体类User.java
[*]importjava.util.Date;
[*]
[*]publicclassUser{
[*]
[*]privateStringid;
[*]
[*]privateStringname;
[*]
[*]privateStringpassword;
[*]
[*]
[*]publicStringgetId(){
[*]returnid;
[*]}
[*]
[*]publicvoidsetId(Stringid){
[*]this.id=id;
[*]}
[*]
[*]publicStringgetName(){
[*]returnname;
[*]}
[*]
[*]publicvoidsetName(Stringname){
[*]this.name=name;
[*]}
[*]
[*]publicStringgetPassword(){
[*]returnpassword;
[*]}
[*]
[*]publicvoidsetPassword(Stringpassword){
[*]this.password=password;
[*]}
[*]
[*]}
importjava.util.Date;publicclassUser{privateStringid;privateStringname;privateStringpassword;publicStringgetId(){returnid;}publicvoidsetId(Stringid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}}
4.供应User.hbm.xml文件,完成实体类的映照(编写对象干系映照文件,把对象干系映照的逻辑放在此处,这个文件包含表和字段的对象干系,当操纵对象时,该文件经由过程java反射机制发生的办法,会把对象的办法转为干系的办法)
[*]<?xmlversion="1.0"?>
[*]<!DOCTYPEhibernate-mappingPUBLIC
[*]"-//Hibernate/HibernateMappingDTD3.0//EN"
[*]"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
[*]<hibernate-mapping>
[*]<classname="com.cjq.hibernate.User">
[*]<idname="id">
[*]<generatorclass="uuid"/>
[*]</id>
[*]<propertyname="name"/>
[*]<propertyname="password"/>
[*]</class>
[*]</hibernate-mapping>
<?xmlversion="1.0"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><classname="com.cjq.hibernate.User"><idname="id"><generatorclass="uuid"/></id><propertyname="name"/><propertyname="password"/></class></hibernate-mapping>
这里完成实体类映照的时分数据就要创建了,创建数据库必定要和设置文件中的符合合。
5.将User.hbm.xml文件到场到hibernate.cfg.xml文件中
[*]<mappingresource="com/cjq/hibernate/User.hbm.xml"/>
<mappingresource="com/cjq/hibernate/User.hbm.xml"/>
6.编写运转测试类
viewplaincopyprint?
[*]importorg.hibernate.Session;
[*]importorg.hibernate.SessionFactory;
[*]importorg.hibernate.cfg.Configuration;
[*]
[*]publicclassHibernateTest{
[*]
[*]publicstaticvoidmain(String[]args){
[*]
[*]//读取hibernate.cfg.xml文件
[*]Configurationcfg=newConfiguration().configure();
[*]
[*]//创建SessionFactory
[*]SessionFactoryfactory=cfg.buildSessionFactory();
[*]
[*]//获得session
[*]Sessionsession=null;
[*]try{
[*]session=factory.openSession();
[*]//开启事件
[*]session.beginTransaction();
[*]Useruser=newUser();
[*]user.setName("张三");
[*]user.setPassword("123");
[*]
[*]//保留User对象
[*]session.save(user);
[*]Useru1=(User)session.load(User.class,newString("402881e4361533e901361533eb920001"));
[*]System.out.print("从数据库加载数据的用户名为"+u1.getPassword());
[*]//提交事件
[*]session.getTransaction().commit();
[*]}catch(Exceptione){
[*]e.printStackTrace();
[*]//回滚事件
[*]session.getTransaction().rollback();
[*]}finally{
[*]if(session!=null){
[*]if(session.isOpen()){
[*]//封闭session
[*]session.close();
[*]}
[*]}
[*]}
[*]}
[*]}
importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.cfg.Configuration;publicclassHibernateTest{publicstaticvoidmain(String[]args){//读取hibernate.cfg.xml文件Configurationcfg=newConfiguration().configure();//创建SessionFactorySessionFactoryfactory=cfg.buildSessionFactory();//获得sessionSessionsession=null;try{session=factory.openSession();//开启事件session.beginTransaction();Useruser=newUser();user.setName("张三");user.setPassword("123");//保留User对象session.save(user);Useru1=(User)session.load(User.class,newString("402881e4361533e901361533eb920001"));System.out.print("从数据库加载数据的用户名为"+u1.getPassword());//提交事件session.getTransaction().commit();}catch(Exceptione){e.printStackTrace();//回滚事件session.getTransaction().rollback();}finally{if(session!=null){if(session.isOpen()){//封闭sessionsession.close();}}}}}
7.倡议
最好到场以下设置项,便利察看hibernatesql的天生:
[*]<propertynamepropertyname="hibernate.show_sql">true</property>
[*]lt;propertyname="hibernate.format_sql">true</property>
<propertyname="hibernate.show_sql">true</property><propertyname="hibernate.format_sql">true</property>
最好到场log4j设置文件,将该设置文件拷贝到src下,便于程序的调试。
8.了局
<br>
经由过程一些观点和目次另有实例完成,如今对hibernate有所懂得,上面的博客要对JDBC和反射机制做一些复杂的先容,这些常识是hibernate框架的基本,以是有需要在深切进修hibernate框架之前先容一下。敬请等候!!!
最后我再次声明,我并没有说不看好java,实际上我对java很乐观的,毕竟她正在不断改进中,我相信她总有一天会和.net网页编程并驾齐驱的 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 Java 编程语言的风格十分接近C、C++语言。 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 是一种突破用户端机器环境和CPU 是一种使网页(Web Page)产生生动活泼画面的语言 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 是一种语言,用以产生「小应用程序(Applet(s)) J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
页:
[1]