您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > Hibernate个人学习笔记
Hibernate使用之后JDBC大部分不用再编写了轻量级框架没有侵入性适合对象关系清晰、不适合聚集性批量操作不适合需要使用数据库特定性功能的情况课程目标:理解O/RMapping原理掌握Hibernate开发的相关知识能使用Hibernate进行实际项目开发Hibernate高手进级:性能优化策略目录什么是Hibernate快速体验Hibernate的开发步骤认识Hibernate基本核心接口Hibernate的对象关系映射Hibernate查询语句(HQL)直接使用JDBC操作数据库的步骤很繁琐JDBC操作的是关系型数据库我们用JAVA开发程序,则使用面向对象的思想Hibernate正是在这两种不同的模型之间建立关联,Hibernate给我们提供了利用面向对象的思想来操作关系型数据的接口Hibernate能做什么?-理解O/R映射Hibernate能帮助我们利用面向对象的思想,开发基于关系型数据库的应用程序第一:将对象数据保存到数据库第二:将数据库数据读入对象中1、第一个hibernate项目,入门1.1、Hibernate_first创建步骤1、新建java项目2、创建UserLibrary,加入如下jar*HIBERNATE_HOME/hibernate3.jar*HIBERNATE_HOME/lib/*.jar*MySqljdbc驱动3、创建hibernate配置文件hibernate.cfg.xml,为了便于调试最好加入log4j配置文件位于:hibernate-3.2\etc目录下4、定义实体类User.java5、定义User类的映射文件User.hbm.xmlhibernate-mappingclassname=com.tongji.hibernate.Useridname=idgeneratorclass=uuid//idpropertyname=name/propertyname=password/propertyname=createDate/propertyname=expireDate//class/hibernate-mapping6、将User.hbml.xml文件加入到hibernate.cfg.xml文件中mappingresource=com/tongji/hibernate/User.hbm.xml/7、编写hbm2ddl工具类:ExportDB.java将实体类→生成数据库表publicstaticvoidmain(String[]args){//读取hibernate.cfg.xml文件Configurationcfg=newConfiguration().configure();SchemaExportexport=newSchemaExport(cfg);export.create(true,true);}8、开发客户端Client.java为了方便跟踪sql执行,在hibernate.cfg.xml文件中加入propertyname=hibernate.show_sqltrue/propertypublicstaticvoidmain(String[]args){//读取hibernate.cfg.xml文件Configurationcfg=newConfiguration().configure();//创建SessionFactorySessionFactorysf=cfg.buildSessionFactory();Sessionsession=null;try{session=sf.openSession();//开启事务session.beginTransaction();Useruser=newUser();user.setPassword(jbjb);user.setName(不得了);user.setCreateDate(newDate());user.setExpireDate(newDate());//保存数据session.save(user);//提交事务session.getTransaction().commit();}catch(Exceptione){e.printStackTrace();//回滚事务session.getTransaction().rollback();}finally{if(session!=null){if(session.isOpen()){//closesessionsession.close();}}}}}1.2、步骤总结实体类(持久化类)的设计实体类与关系数据库的映射应用的开发1.3、Hibernate核心接口1.3.1Configuration概述:Configuration类负责管理Hibernate的配置信息。它包括如下内容:Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等。Hibernate映射文件(*.hbm.xml)。Hibernate配置的两种方法:属性文件(hibernate.properties)。①调用代码:Configurationcfg=newConfiguration();xml文件(hibernate.cfg.xml)。②调用代码:Configurationcfg=newConfiguration().configure();hibernate-configurationsession-factorypropertyname=hibernate.connection.driver_classcom.mysql.jdbc.Driver/propertypropertyname=hibernate.connection.urljdbc:mysql://localhost/hibernate_first/propertypropertyname=hibernate.connection.usernameRoot/propertypropertyname=hibernate.connection.passwordRoot/propertypropertyname=hibernate.dialectOrg.hibernate.dialect.MySQLDialect/propertypropertyname=hibernate.show_sqltrue/propertymappingresource=com/tongji/hibernate/User.hbm.xml//session-factory/hibernate-configuration1.3.2SessionFactory概述:应用程序从SessionFactory(会话工厂)里获得Session(会话)实例。它在多个应用线程间进行共享。通常情况下,是线程安全的,整个应用只有唯一的一个会话工厂——例如在应用初始化时被创建。然而,如果你使用Hibernate访问多个数据库,你需要对每一个数据库使用一个会话工厂。会话工厂缓存了生成的SQL语句和Hibernate在运行时使用的映射元数据。他的创建很耗时的,通常放在一个静态方法里面只创建一次static{try{Configurationcfg=newConfiguration().configure();factory=cfg.buildSessionFactory();}catch(Exceptione){e.printStackTrace();}}调用代码:SessionFactorysessionFactory=cfg.buildSessionFactory();说明:SessionFactory由Configuration对象创建,所以每个Hibernate配置文件,实际上是对SessionFactory的配置1.3.3Session(会话)概述:Session不是线程安全的,它代表与数据库之间的一次操作,它的概念介于Connection和Transaction之间。Session也称为持久化管理器,因为它是与持久化有关的操作接口。Session通过SessionFactory打开,在所有的工作完成后,需要关闭。它与Web层的HttpSession没有任何关系。调用代码Sessionsession=sessionFactory.openSession();2.测试实体对象的生命周期2.1junit简介:*编写测试类xxxTest,需要继承TestCase*编写单元测试方法,测试方法必须以test开头,测试方法不能含有参数和返回值,如:publicvoidtestHello1(){}*最好单元测试的代码单独建立一个目录2.2了解Hibernate中CRUD操作publicclassSessionTestextendsTestCase{publicvoidtestSave1(){Sessionsession=null;Transactiontx=null;Useruser=null;try{session=HibernateUtils.getSession();tx=session.beginTransaction();//Transient状态user=newUser();user.setName(李四);user.setPassword(123);user.setCreateTime(newDate());user.setExpireTime(newDate());//persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步session.save(user);user.setName(王五);//session.update(user);tx.commit();}catch(Exceptione){e.printStackTrace();tx.rollback();}finally{HibernateUtils.closeSession(session);}//detached状态user.setName(张三);try{session=HibernateUtils.getSession();session.beginTransaction();//persistent状态session.update(user);session.getTransaction().commit();}publicvoidtestReadByGetMethod1(){Sessionsession=null;try{session=HibernateUtils.getSession();session.beginTransaction();//马上发出查询sql,加载User对象Useruser=(User)session.get(User.class,402880d01b9bf210011b9bf2a2ff0001);System.out.println(user.name=+user.getName());//persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步user.setName(龙哥);session.getTransaction().commit();}publicvoidtestReadByGetMethod2(){Sessionsession=null;try{session=HibernateUtils.getSession();session.beginTransaction();//采用get加载数据,如果数据库中不存在相应的数据,返回nullUseruser=(User)session.get(User.class,asdfsafsdfdsf)
本文标题:Hibernate个人学习笔记
链接地址:https://www.777doc.com/doc-6245113 .html