仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1338|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA网站制作之深切浅出进修Hibernate框架(一):从实例动手初识Hibernate框架仓酷云 ...

[复制链接]
跳转到指定楼层
楼主
发表于 2015-1-18 11:29:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。这篇博客是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下设置以下信息。
[html]

  • <!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
[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反射机制发生的办法,会把对象的办法转为干系的办法)

[html]

  • <?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文件中
[html]

  • <mappingresource="com/cjq/hibernate/User.hbm.xml"/>

<mappingresource="com/cjq/hibernate/User.hbm.xml"/>
6.编写运转测试类

[java]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的天生:

[html]

  • <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网页编程并驾齐驱的
小女巫 该用户已被删除
沙发
发表于 2015-1-21 07:50:04 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
深爱那片海 该用户已被删除
板凳
发表于 2015-1-30 12:26:17 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
灵魂腐蚀 该用户已被删除
地板
发表于 2015-2-6 15:00:06 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
谁可相欹 该用户已被删除
5#
发表于 2015-2-11 08:49:01 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
精灵巫婆 该用户已被删除
6#
发表于 2015-3-2 06:05:09 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
变相怪杰 该用户已被删除
7#
发表于 2015-3-11 02:19:55 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
第二个灵魂 该用户已被删除
8#
发表于 2015-3-17 18:56:16 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
9#
 楼主| 发表于 2015-3-24 19:23:54 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
再见西城 该用户已被删除
10#
发表于 2015-3-26 22:12:32 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
简单生活 该用户已被删除
11#
发表于 2015-4-15 04:51:10 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
飘飘悠悠 该用户已被删除
12#
发表于 2015-4-19 17:23:10 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
蒙在股里 该用户已被删除
13#
发表于 2015-4-21 11:25:21 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
金色的骷髅 该用户已被删除
14#
发表于 2015-4-21 17:15:05 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
柔情似水 该用户已被删除
15#
发表于 2015-5-1 01:10:11 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
admin 该用户已被删除
16#
发表于 2015-5-1 22:11:35 | 只看该作者
是一种突破用户端机器环境和CPU
莫相离 该用户已被删除
17#
发表于 2015-5-6 13:10:45 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
不帅 该用户已被删除
18#
发表于 2015-6-12 06:32:39 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
飘灵儿 该用户已被删除
19#
发表于 2015-6-19 13:01:14 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
爱飞 该用户已被删除
20#
发表于 2015-7-1 18:50:25 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-28 03:06

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表