您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 尚学堂+hibernate++经典文档
1课程介绍讲课内容Hibernate,JPA,JTA,POJO概念了解Log4j配置动手练会Junit配置动手练会主键生成策略重要组件映射不重要复合主键不重要核心开发接口重要对象关系映射重要继承映射不重要,知道有那几种就可以。集合映射不重要,知道有哪几种CRUD重要,动手练会inverse级联操作延迟加载抓取策略树状结构(作业)重要HQL重要QBC、QBE不重要事务隔离级别、悲观锁,乐观锁理解一级缓存、二级缓存,查询缓存理解那些是重点重点annotation,xml会少讲Jpa的annotation是重点,hibernate扩展的annotation会少讲用到的软件hibernate-distribution-3.3.2.GA-dist.ziphibernate-annotations-3.4.0.GA.zipmysql-5.1.41-win32.msimyeclipse-8.0M1-win32.exe网站hibernate的创始人GavinKingGavinKing当时没有任何用SQL开发数据库的经验,GavinKing开发hibernate的第一件事是去街上买了本SQL基础的书推荐的书Hibernate自带的Reference文档才是每个Hibernate使用者应该精读的参考材料!学习方法锻炼自学能力不要依赖老师的文档自己查官方文档自己做实验很多细节没有必要去背,有可能换了不同的版本,现象会变化2Hibernate,JPA,EJB关系3HelloWorld(xml)项目名称:hibernateUser.javaTestHelloWorld.java3.1开发步骤新建java项目创建UserLibrary,加入相关jar包HIBERNATE_HOME/hibernate3.jarHIBERNATE_HOME/lib/*.jar(只拷贝required下面的就行)MySqljdbc驱动slf4j-nop-1.5.2.jarUser.java映射:User.hbm.xml?xmlversion=1.0encoding=UTF-8?!DOCTYPEhibernate-mappingPUBLIC-//Hibernate/HibernateMappingDTD3.0//EN=com.bjsxt.hibernate.domainclassname=Useridname=id/idpropertyname=name/property/class/hibernate-mappinghibernate.cfg.xml?xmlversion=1.0encoding=UTF-8?!DOCTYPEhibernate-configurationPUBLIC-//Hibernate/HibernateConfigurationDTD3.0//EN=connection.urljdbc:mysql://localhost/hibernate/propertypropertyname=connection.driver_classcom.mysql.jdbc.Driver/propertypropertyname=connection.usernameroot/propertypropertyname=connection.passwordbjsxt/propertypropertyname=dialectorg.hibernate.dialect.MySQLDialect/propertypropertyname=show_sqltrue/propertypropertyname=format_sqltrue/propertypropertyname=hbm2ddl.autocreate/propertymappingresource=com/bjsxt/hibernate/domain/User.hbm.xml//session-factory/hibernate-configuration创建数据库,Hibernate不会自动创建数据库Createdatabasehibernate将User.hbm.xml文件配置到hibernate.cfg.xml文件中mappingresource=com/bjsxt/hibernate/domain/User.hbm.xml/编写测试代码为了方便最好在hibernate.xfg.xml文件中加入:propertyname=show_sqltrue/propertypropertyname=format_sqltrue/propertypropertyname=hbm2ddl.autocreate/property3.2注意事项:推荐先设计域模型,再导出表Sessin暂时理解为对数据库连接的封装。数据库不会自动创建所以需手工执行:createdatabasehibernatehibernate.cfg.xml的mapping标签,用斜杠,不是用点儿用resource属性,不是class属性Session用完之后要关闭id必须配到第一个4核心接口4.1org.hibernate.cfg.Configuration作用:负责管理配置信息,创建SessionFactory对象这个对象然后就没啥大用了默认读取hibernate.propertiesconfigure()方法读取hibernate.cfg.xml.hibernate.cfg.xml.可以改名newConfiguration().configure(“hibernate.xml”)4.2org.hibernate.SessionFactory作用:管理数据库连接池,负责创建Session对象SessionFactory是重量级的建立一个对象耗费时间会占用大量内存空间一个项目通常只需要一个SessionFactory就够了.但是当你的项目要操作多个数据库时,那你必须为每个数据库指定一个SessionFactory线程安全可以多个线程访问一个对象Sessionfactory需要随时close吗?SessionFactory作为Session的“工厂”,它控制并且维护着非常多的资源。其设计意图就是跟你的应用程序尽量保持同等的生命周期,更何况创建一次SessionFactory实例的成本是很高的……所以你根本没有必要随时手动关闭它。如果对象的缓存很大,就称为重量级对象。如果对象占用的内存空间很小,就称为轻量级对象。SessionFactory就是个重量级对象,如果应用只有一个数据存储源,只需创建一个SessionFactory实例,因为随意的创建SessionFactory实例会占用大量内存空间。4.3org.hibernate.Session和HttpSesson没有关系作用:Session接口负责执行被持久化对象的CRUD操作,管理数据库连接,管理缓存Session轻量级的,创建和销毁它都不会占用很多资源,可能会不断地创建以及销毁Session对象Session非线程安全的,最好是一个线程只创建一个Session对象为什么有两个session接口?org.hibernate.classic.Sessionextendsorg.hibernate.Session4.4org.hibernate.Transaction作用:Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。默认不是自动提交一个transaction对应一个session通常被Session.beginTransaction()这个方法实例化不是线程安全的4.5org.hibernate.QueryQuery接口负责执行各种数据库查询。HQL、SQL、QBC、QBEQuery接口也是轻量级的,它不能在Session之外使用。4.6org.hibernate.classic.Lifecycleimplementsbackward-compatibilitywithHibernate2.1APIsnowdeprecatedinHibernate3.4.7org.hibernate.classic.Validatableimplementsbackward-compatibilitywithHibernate2.1APIsnowdeprecatedinHibernate3.4.8Usertype这是一个接口,用户可以实现它以定义出自己的数据类型。《UserType举例.doc》4.9Interceptor保存前,保存后等,没有侵入性,不用实现任何接口《Interceptor举例.doc》5JTA5.1重要结论JavaTransactionAPI(JTA)1.1J2EE的规范之一在一个具有多个数据库的系统中,可能一个程序会调用几个数据库中的数据,需要一种分布式事务,或者说需要用JTA来管理跨Session的长事务。tomcat不支持JTAJTA开源实现:AtomikosTransactionsEssentialsJOTM(JavaOpenTransactionManager)6基本映射6.1用于控制insert和update语句的映射属性映射属性作用property元素的insert属性false,在insert语句中不包含该字段,即不能被插入;默认值为trueproperty元素的update属性false,在update语句中不包含该字段,即不能被修改,默认值为trueclass元素的mutable属性false,等价于所有的property元素的update为false,即不能被修改,默认值为trueproperty元素的dynamic-insert属性如果为true,表示当更新一个对象时,会动态生成insert语句,只能取值不为null时,才会包含到insert语句中,默认值为falseproperty元素的dynamic-update属性如果为true,表示当更新一个对象时,会动态生成update语句,只能取值不为null时,才会包含到update语句中,默认值为falseclass元素的dynamic-insert属性如果为true,所有property的dynamic-insert属性为true,表示当更新一个对象时,会动态生成insert语句,只能取值不为null时,才会包含到insert语句中,默认值为falseclass元素的dynamic-update属性如果为true,所有property的dynamic-update属性为true,表示当更新一个对象时,会动态生成insert语句,只能取值不为null时,才会包含到update语句中,默认值为false6.2其他:formulapropertyname=nameformula=concat(firstname,lastname)/property7HelloWorld(annotation)项目名称:hibernate_annotationUser.javaTestHelloW
本文标题:尚学堂+hibernate++经典文档
链接地址:https://www.777doc.com/doc-4354079 .html