Hibernate基础学习记录文本
- 格式:doc
- 大小:584.91 KB
- 文档页数:89
Hibernate项目的构建与配置1.在项目里倒入Hibernate所必须的Jar包(1)Hibernate框架可以使用在任何的Java项目里,并不一定是Web项目。
只需要在项目里倒入Hibernate所必须要使用的jar包就可以了。
(2)在Hibernate的官网下载hibernate-release-4.2.2.Final.zip解压,要使用Hibernate必须导入的jar包就在目录“hibernate-release-4.2.2.Final\lib\required”下。
倒入此路径下的所有jar包就可以了。
2.配置hibernate.cfg.xml文件(1)配置hibernate.cfg.xml文件可以参考“\project\etc”目录下的hibernate.cfg.xml文件与hibernate.properties文件。
(2)使用Hibernate连接MySQL的hibernate.cfg.xml配置文件如下:<hibernate-configuration><session-factory>(设置显示Hibernate产生的SQL语句)<property name="show_sql">true</property>(设置MySQL的SQL语法的方言)<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>(设置MySQL的驱动程序)<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>(设置MySQL的数据库路径、用户名、密码)<property name="hibernate.connection.url">jdbc:mysql:///java</property><property name="ername">root</property><property name="hibernate.connection.password">lizhiwei</property>(设置当数据库要保存的表不存在时,就新建表)<property name="hibernate.hbm2ddl.auto">update</property>(设置对象与数据库表的关系映射文件)<mapping resource="vo/User.hbm.xml"/></session-factory></hibernate-configuration>(3)此配置文件一般放在项目的src目录下。
hibernate深度学习游离状态HQL当我学完这个之后我仿佛都懂了 = =或许这就是 hibernate的⼒量吧.操纵持久化对象(Session)1.1. 在hibernate中java对象的状态Hibernate 把对象分为 4 种状态:¨ 持久化状态,¨ 临时状态,¨ 游离状态,¨ 删除状态.Session 的特定⽅法能使对象从⼀个状态转换到另⼀个状态1.2. 临时对象(transient)¨ 在使⽤代理主键的情况下, OID 通常为 null¨ 不处于 Session 的缓存中¨ 在数据库中没有对应的记录1.2.1. 删除对象(Removed)¨ OID 不为 null¨ 从⼀个 Session实例的缓存中删除¨ Session 已经计划将其从数据库删除, Session 在清理缓存时, 会执⾏ SQL delete 语句, 删除数据库中的对应记录¨ ⼀般情况下, 应⽤程序不该再使⽤被删除的对象1.2.2. 持久化对象(也叫”托管”)(Persist)1.2.3.¨ OID 不为 null¨ 位于 Session 缓存中¨ 持久化对象和数据库中的相关记录对应¨ Session 在清理缓存时, 会根据持久化对象的属性变化, 来同步更新数据库¨ 在同⼀个 Session 实例的缓存中, 数据库表中的每条记录只对应唯⼀的持久化对象1.2.4. 游离对象(也叫”脱管”)(Detached)¨ OID 不为 null¨ 不再处于 Session 的缓存中¨ ⼀般情况需下, 游离对象是由持久化对象转变过来的, 因此在数据库中可能还存在与它对应的记录1.2.5. 对象的状态转换说明(图)对象的状态转换图测试hibernate中java对象的状态程序代码⽣命周期状态tx = session.beginTransaction();开始⽣命周期临时状态Customer c = new Customer);Session.save(c)处于⽣命周期中转变为持久化状态Long id=c.getId();处于⽣命周期中处于持久化状态c = null;Customer c2 =(Customer)session.load(Customer.class,id);mit();session.close();处于⽣命周期中转变为游离态c2.getName();处于⽣命周期中处于游离态c2 = null;结束⽣命周期结束⽣命周期1.2.6. 对象的状态总结Session缓存存在对应的记录数据中存在对应的记录临时态no no持久态yes可能有也可能没有游离态no可能有(数据没有删除)也可能没有1.2.7. 操纵持久化对象的⽅法(Session中)1.2.8. save()Session 的 save() ⽅法使⼀个临时对象转变为持久化对象。
Hibernet:把一个对象转化为一条记录或者把一条记录转化为一个对象。
1读取并且解析配置文件2.获得sessionfactery3获取session。
属性名和字段名一致时候://1.获取配置文件Configuration cft=new Configuration().configure();//2.获取sessionfactorySessionFactory sf=cft.buildSessionFactory();//3.获取session//Session session=sf.openSession();Session session=sf.getCurrentSession();Session session2=sf.getCurrentSession();在配置openSession()的时候需要在最后手动关闭session.close();当使用getCurrentSession()的时候不需要手动关闭session,他会自动关闭在Hibernate.cfg.xml中配置current_session_context选项中选择thread。
如下图:Format_sql-true,show_sql-true的作用是可以显示出hibernate操作的底层源代码实例:package com.bchy.s33;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import com.bchy.geimei.entity.Login;public class Getsession {public static void main(String[] args) {//1.获取配置文件Configuration cft=new Configuration().configure();//2.获取sessionfactorySessionFactory sf=cft.buildSessionFactory();//3.获取session/*Session session=sf.openSession();Session session2=sf.openSession();*/Session session=sf.getCurrentSession();Session session2=sf.getCurrentSession();if(session==session2){System.out.println("ok!!!");}//4.开启一个事物Transaction tx=session.beginTransaction();//5.操作数据库Login l=new Login();l.setLogin_id(81);/* l.setLogin_name("张三");l.setPassword("123");*/System.out.println("。
java实训个人总结8篇篇1时间过得真快,转眼间我已经实训了4个月了。
在这4个月的时间里,我学到了很多关于Java的知识,也积累了一些工作经验。
现在,我对这段时间的学习和工作进行一下总结,以便更好地反思和提高。
一、Java基础学习在实训初期,我主要学习了Java的基础知识,包括Java的基本语法、面向对象编程的思想、常用的数据结构和算法等。
通过不断练习和巩固,我逐渐掌握了这些基础知识,并能够灵活运用它们来解决实际问题。
二、项目实践在掌握了Java基础之后,我开始了项目实践的阶段。
在这个过程中,我参与了一个小型项目的开发,主要负责后端接口的设计和实现。
通过实践,我深刻体会到了Java在实际应用中的强大之处,同时也锻炼了我的团队协作能力和解决问题的能力。
在项目实践中,我遇到了很多挑战。
例如,在实现某个功能时,我最初的设计方案并不完美,导致后续的修改和调整花费了很多时间和精力。
但是,通过不断学习和摸索,我逐渐找到了更好的解决方案,并成功完成了任务。
这个过程让我深刻认识到了学习和实践的重要性,也让我更加自信地面对未来的工作。
三、团队协作在实训期间,我还锻炼了团队协作的能力。
我们经常需要一起开会讨论、分工合作、共同解决问题。
在这个过程中,我学会了如何与他人有效沟通、如何分工协作、如何处理团队冲突等。
这些能力对于未来的工作和生活都非常有用。
四、自我提升除了学习和项目实践之外,我还注重自我提升。
我不断阅读相关的技术文档和书籍、观看视频和参加线上线下的技术交流活动等。
这些经历不仅让我更加深入地了解了Java技术栈的各个方面,还让我结识了很多志同道合的朋友和业界大咖。
通过与他们的交流和学习,我受益匪浅。
五、总结与展望总的来说,这次Java实训让我收获颇丰。
我不仅掌握了Java的基础知识,还锻炼了项目实践和团队协作的能力。
同时,我也认识到了自己的不足之处并努力加以改进。
在未来的学习和工作中我会继续努力提升自己的技术水平和综合素质以更好地适应市场需求和企业发展需求!篇2一、实训背景与目标本次Java实训旨在通过实践操作,深化理论知识,提高编程技能,以便更好地适应工作岗位需求。
3.hibernate.hbm2ddl.auto :在SessionFactory 创建时,自动检查数据库结构,或者将数据库schema 的DDL 导出到数据库。
使用create-drop 时,在显式关闭SessionFactory 时,将删除掉数据库schema。
例如:validate | update | create | create-dropcreate :如果没有表就创建update :如果表结构更新,就更新validate :每次插入表的时候看看表结构有没有更新。
理论上是先建类后建表:这个时候只要你的类建好了,可以跨数据库。
实际中先建表比先建类多,建好表以后要对数据库进行优化,比如建索引,建试图,各种各样的优化。
project\etc目录下面有很多示例性的文档,log4j的文档就在那个下面。
SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); SessionFactory的建立是很耗费时间的,应该像连接池一样,只建立一次,以后要用就直接从那用。
Hibernate文档建议我们自己写一个辅助类,用单例来做。
JUnit的一个bug:@BeforeClasspublic static void beforeClass() {sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();}在这句话的时候配置文件如果有的时候写错了,她悄悄把错误隐藏起来了。
解决的方法:可以对这句话加try catch块8.表名和类名不一致的时候:@Entity@Table(name="_teacher")public class Teacher {10字段名和属性名不一致的时候@Column(name="_name")public String getName() {return name;}11 不需要的字段的设置@Transientpublic String getYourWifeName() {return yourWifeName;}12 映射指定的时间日期@Temporal(TemporalType.TIME)public Date getBirthDate() {return birthDate;}在注解里面如果一个注解的属性名字叫value,你可以不写,直接写后面的值,如@Temporal(value=“TemporalType.TIME”)可写成上面的那样。
hibernate4学习笔记Hibernate4学习笔记本⼈全部以⾃学为主,在⽹上收集各种学习资料,总结归纳学习经验,现将学习路径给予⼤家分享。
此次学习的hibernate的版本是:hibernate-release-4.2.4.Final(截⽌2015年7⽉31⽇最新版),JAVA的版本是:java8.0,使⽤的开发⼯具是:Eclipse Mars Release (4.5.0)。
第⼀天:Hibernate4基础知识和HelloWorld简单编程Hibernate是⼀种半成品ORM框架,对数据库持久化操作,程序员对数据库的操作转换成对对象的操作。
ORM 采⽤元数据来描述对象-关系映射细节, 元数据通常采⽤XML 格式, 并且存放在专门的对象-关系映射⽂件中。
HelloWorld简单编程1、准备Hibernate环境(1)导⼊Hibernate的Jar包,如下:(2)导⼊Mysql驱动包,我⽤的数据库是:Mysql 5.0,数据库驱动包如下:以上所有Jar加完毕之后,需要加⼊到Eclipse⾃⾝系统⾥⾯,具体如下:以上操作完毕之后,Hibernate的环境就算搭建完毕,下⾯就可以进⼀步操作。
2、配置hibernate.cfg.xml⽂件,主要是对数据库的连接,具体如下:"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/doc/63fa364d5022aaea998f0fde.html /hibernate-configuration-3.0.dtd ">rootmysqlname="connection.driver_class">com.mysql.jdbc.Driver jdbc:mysql:///Test(或者:jdbc:mysql://localhost:3306/Test)name="dialect">org.hibernate.dialect.MySQLInnoDBDialecttruetrueupdate3、编写⼀个实例类News.java,具体代码如下:package com.hibernate.helloworld;import java.sql.Date;public class News {private Integer id;private String title;private Date date;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}public News(String title, String author, Date date) { super();this.title = title;this.author = author;this.date = date;}public News(){}@Overridereturn"News [id="+ id+ ", title="+ title+ ", author="+ author + ", date=" + date + "]";}}4、创建News.hbm.xml配置映射⽂件,具体代码如下:"/doc/63fa364d5022aaea998f0fde.html /hibernate-mapping-3.0.dtd">5、将映射⽂件News.hbm.xml指定到hibernate.cfg.xml配置⽂件⾥⾯,即在hibernate.cfg.xml⽂件⾥加⼊⼀⾏映射代码,具体如下:6、创建hibernate API操作测试类(Juit测试),验证hibernate的优势效果,具体代码如下:package com.hibernate.helloworld;import java.sql.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;import org.junit.Test;public class HibernateTest {@Testpublic void test() {//1. 创建⼀个 SessionFactory 对象SessionFactory sessionFactory=null;//1). 创建 Configuration 对象: 对应 hibernate 的基本配置信息和对象关系映射信息Configuration configuration=new Configuration().configure();//4.0 之前这样创建//sessionFactory=configuration.buildSessionFactory();//2). 4.0以后创建⼀个 ServiceRegistry 对象: hibernate 4.x 新添加的对象//hibernate 的任何配置和服务都需要在该对象中注册后才能有效.ServiceRegistry serviceRegistry=newServiceRegistryBuilder().applySettings(configuration.getProperties() ).buildServiceRegistry();sessionFactory=configuration.buildSessionFactory(serviceRegistry) ;//2. 创建⼀个 Session 对象Session session=sessionFactory.openSession();//3. 开启事务Transaction transaction=session.beginTransaction();//4. 执⾏保存操作News news = new News("Java12345", "ATGUIGU", new Date(new java.util.Date().getTime()));session.save(news);//5. 提交事务/doc/63fa364d5022aaea998f0fde.html mit();//6. 关闭 Sessionsession.close();//7. 关闭 SessionFactory 对象sessionFactory.close();}}7、测试结果如下:(1)数据库⾥⾯的结果如下:(2)Eclipse下的语句⽣成如下:以上就是简单Hibernate的测试,总结:1、不需要在数据库⾥⾯创建任何数据,由hibernate ⾃动⽣成;2、代码简单易理解,不复杂,测试数据只需要先创建以下⼏个步骤:SessionFactory-→Session-→Transaction-→session操作数据库-→提交-→关闭;3、不需要写SQL 语句,从头到尾没有写⼀条SQL语句,反⽽Hibernate帮我们⽣成SQL语句。
Hibernate工作原理及为什么要用?一原理:1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory3.打开Sesssion4.创建事务Transaction5.持久化操作6.提交事务7.关闭Session。
8.关闭SessionFactory为什么要用:1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。
他很大程度的简化DAO层的编码工作3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4. hibernate的性能非常好,因为它是个轻量级框架。
映射的灵活性很出色。
它支持各种关系数据库,从一对一到多对多的各种复杂关系。
二Hibernate 的核心接口及其作用1 Configuration类:配置Hibernate启动Hibernate创建SessionFactory对象2 SessionFactory:初始化Hibernate创建Session对象线程安全—同一实例被多个线程共享重量级:代表一个数据库内部维护一个连接池2.1 openSession():总是创建新的session,需要手动close()2.2 getCurrentSession() : 必须在hibernate.cfg.xml设置session 上下文事务自动提交并且自动关闭session.从上下文环境中获得session,如果当时环境中不存就创建新的.如果环境中存在就使用环境中的,而且每次得到的都是同一个session (在session提交之前,提交之后就是新的了) 应用在一个session中有多个不同DAO操作处于一个事务时3 Session:负责保存、更新、删除、加载和查询对象轻量级--可以经常创建或销毁3.1 Load与get方法的区别:简单理解:load是懒加载,get是立即加载.load方法当使用查出来的对象时并且session未关闭,才会向数据库发sql, get会立即向数据库发sql返回对象3.3 merge(); 合并对象更新前会先select 再更新3.4clear()清空缓存,flush()将session中的数据同步到数据库两者组合使用于批量数据处理3.4Transaction commit() rollback()JPA: java persistence API 提供了一组操作实体bean的注解和API规范SchemaExporthiberante的生成数据库表(及其他ddl)的工具类可以通过这个工具类完成一些ddl四Hibernate查询查询语言主要有:HQL 、QBC (Query By Criteria条件查询) 、 Native SQLHql:1、属性查询2、参数查询、命名参数查询3、关联查询4、分页查询5、统计函数五优化抓取策略连接抓取(Join fetching)使用 OUTER JOIN(外连接)来获得对象的关联实例或者关联集合查询抓取(Select fetching)另外发送一条 SELECT 语句抓取当前对象的关联实体或集合另外可以配置hibernate抓取数量限制批量抓取(Batch fetching)另外可以通过集合过滤来限制集合中的数据量使用session.createFilter(topic.getReplies(),queryString).list();检索策略延迟检索和立即检索(优先考虑延迟检索)N+1问题指hibernate在查询当前对象时查询相关联的对象查询一端时会查询关联的多端集合对象解决方案:延迟加载连接抓取策略二级缓存集合过滤 BatchSize限制记录数量映射建议使用双向一对多关联,不使用单向一对多灵活使用单向一对多关联不用一对一,用多对一取代配置对象缓存,不使用集合缓存一对多集合使用Bag,多对多集合使用Set继承类使用显式多态表字段要少,表关联不要怕多,有二级缓存撑腰Hibernbate缓存机制性能提升的主要手段Hibernate进行查询时总是先在缓存中进行查询,如缓存中没有所需数据才进行数据库的查询.Hibernbate缓存:一级缓存 (Session级别)二级缓存(SessionFactory级别)查询缓存 (基于二级缓存存储相同参数的sql查询结果集)一级缓存(session缓存)Session缓存可以理解为session中的一个map成员, key为OID ,value为持久化对象的引用在session关闭前,如果要获取记录,hiberntae先在session缓存中查找,找到后直接返回,缓存中没有才向数据库发送sql三种状态的区别在于:对象在内存、数据库、session缓存三者中是否有OID临时状态内存中的对象没有OID, 缓存中没有OID,数据库中也没有OID 执行new或delete()后持久化状态内存中的对象有OID, 缓存中有OID,数据库中有OIDsave() load() get() update() saveOrUpdate() Query对象返回的集合游离(脱管)状态内存中的对象有OID, 缓存中没有OID,数据库中可能有OIDflush() close()后使用session缓存涉及三个操作:1将数据放入缓存2从缓存中获取数据3缓存的数据清理4二级缓存SessionFactory级别SessionFactory级别的缓存,它允许多个Session间共享缓存一般需要使用第三方的缓存组件,如: Ehcache Oscache、JbossCache等二级缓存的工作原理:在执行各种条件查询时,如果所获得的结果集为实体对象的集合,那么就会把所有的数据对象根据OID放入到二级缓存中。
大学生java实训总结报告6篇篇1一、实训背景与目标本次Java实训旨在通过实践操作,加深大学生对Java编程语言的理解与掌握,提高实际项目开发能力。
在为期一个月的实训期间,我们小组围绕Java SE基础、Java Web开发、数据库操作等内容进行了系统学习和实践。
通过本次实训,我们期望达到以下目标:1. 深入理解Java核心技术与编程思想。
2. 掌握Java Web开发的基本流程和关键技术。
3. 学会使用至少一种数据库进行Java程序与数据库的交互。
4. 具备一定的项目开发和团队协作能力。
二、实训内容与过程1. Java SE基础实训在实训初期,我们重点复习和巩固了Java SE基础知识,包括数据类型、运算符、流程控制、面向对象编程等。
通过编写简单的控制台程序,我们实践了异常处理、集合类、泛型以及多线程编程。
2. Java Web开发实训随后,我们转向Java Web开发的学习。
通过学习和实践,掌握了基于Servlet和JSP的Web开发技术。
同时,学习了HTML、CSS和JavaScript等前端技术,并练习了前后端数据的交互。
此外,还了解了MVC设计模式在Web开发中的应用。
3. 数据库操作实训在数据库操作方面,我们主要学习了SQL语言以及JDBC操作数据库的技术。
通过实践操作,我们能够在Java程序中实现数据的增删改查,并学会了使用ORM框架进行对象与数据库表的映射。
4. 项目开发实践在实训的最后阶段,我们以小组形式进行了一个小型项目——在线图书管理系统。
通过项目的开发,我们综合运用了前面学到的知识,包括Web开发技术、数据库操作等。
在项目开发过程中,我们学会了如何分工合作,如何进行有效的项目管理。
三、实训收获与体会1. 提升了编程能力。
通过实训,我们对Java编程语言有了更深入的了解,编程能力得到了显著提高。
2. 增强了项目开发经验。
项目开发的实践让我们体验到了软件开发的流程,学会了如何在项目中运用所学知识。
一、第一个应用实例1.搭建环境:新建一个名为HibernateDemo的java工程,并导入Hibernate的jar包,特别要注意除了导入lib下的jar包还需导入hibernate3.jar核心jar包。
由于涉及数据库操作,还应导入mysql驱动包。
说明,如果使用最新的hibernate,hibernate开发的基本jar包(7个) 来源:hibernate-distribution-3.3.2.GA.ziphibernate3.jarlib\required下的所有jar包2.简述Hibernate的作用:ORM:Object Relational Mapping,对象关系映射。
将java 程序中的对象自动持久化到关系数据库中。
而Hibernate的作用好比就是在java对象与关系数据库之间的一座桥梁,它主要负责两者之间的映射。
在Hibernate内部封装了JDBC 技术(但只是一个轻量级的封装,因而可以让程序设计人员更方便的以面向对象的思想操纵数据库),并向外提供API接口。
3.建新一个名为User.java的类,即是上面所说的java对象。
我们以后称这种类为实体类(或是持久化类),它的对象为实体对象(或是持久化对象)。
User.java内容如下:package com.asm.hibernate.domain;import java.util.Date;public class User {private int id;private String name;private Date date;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}}4.编写配置文件:User.hbm.xml。
它和User.java放在同一个包下。
内容如下:<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mappingpackage="com.asm.hibernate.domain"><class name="User"><id name="id"><generator class="native"/></id><property name="name"></property><property name="date"></property></class></hibernate-mapping>此配置文件,是用来为User.java进行配置的,我们以后称这种文件为实体配置文件(或是持久化类映射文件)<class>用来关联一个java类,注意在前面的根元素下有一个package属性,这样结合这个package和class标签下所指定的类名,就共同关联映射了一个java类。
其实可以这样理解,每一个包下都有实体配置文件,而这个配置文件开始的根元素package指定了此文件所处的位置(或是说它所关联的包),根元素下可以有多个<class>标签(查阅dtd文件),它们可以分别来关联包下的java类文件。
<class>标签,一般建议至少有两个属性:name属性用来关联一个java类,比如这里关联了User类;table属性用来指定这个类所对应的表文件,如果不指定,系统会自动name 指定的类文件进行关联(比如上面实际是:<class name="User" table="user">)<class>标签下的子标签:●<id>子标签实际就是用来映射主键,<id>下的name就是用来指java类中的id属性,而它可以有一个column属性用来指定表中的主键。
同时注意在此标签下有一个<generator class="native"/>标签,它是用来指定主键的生成方式。
●<property>子标签,就是用来指定java类的属性映射到表中的一个字段,默认下此标签没有指定column属性,即是说它会把name所关联的属性名作为字段名。
如果不想java类中的某些属性映射到表中,只要不用这个标签来关联这些属性即可。
总结:上面的<class><id><property>的name属性都分别指定了java类,java类的属性。
而table,column是用来指定表,字段名配置文件:hibernate.cfg.xml。
它放在当前的项目的根目录下。
内容如下:<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory name="foo"><propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <propertyname="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property> <property name="ername">root</property><property name="hibernate.connection.password">123456</property><propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.hbm2ddl.auto">create</property><mapping resource="com/asm/hibernate/domain/User.hbm.xml"/> </session-factory></hibernate-configuration>主配置文件,完成了驱动注册,数据库连接,并关联了相应的java对象配置文件。
说明:<mapping>具体指定了关联的所有实体配置文件,关于它的作用可以注释掉此属性看效果。
另通过<propertyname="hibernate.hbm2ddl.auto">create</property>指定了根据实体配置文件来自动生成表,其中包括:create/create-drop/update/validate四种可选方式。
5.编写测试类:UserTest.java 内容如下:package com.asm.hibernate.test;import java.util.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import er;public class UserTest {public static void main(String []args){Configuration cf=new Configuration();cf.configure();SessionFactory sf=cf.buildSessionFactory();Session s=sf.openSession();Transaction ts=s.beginTransaction(); //事务User user=new User();user.setName("jack");user.setDate(new Date());s.save(user);mit(); //提交事务s.close();System.out.println("done");}}6.分析流程:首先抛开Transaction tx=s.beginTransaction()和mit(),因为它们是提交事务得。
支持提交事务意味着支持数据回滚。
说明,通常情况下,很多数据库都默认支持提交事务,所以加这两句代码非常必要。
下面具体谈流程:第一步:获取SessionFactory对象,它会首先构建一个Configuration对象,此对象调用可以调用configure()和configure(String resource)这两种方法:这两种方法在Configuration中的源代码如下:public Configuration configure() throws HibernateException {configure( "/hibernate.cfg.xml" );return this;}public Configuration configure(String resource) throws HibernateException { ( "configuring from resource: " + resource );InputStream stream = getConfigurationInputStream( resource );return doConfigure( stream, resource );}分析这两个源代码可以知道:无参调用最终也是调用这个有参数的方法,所以我们也可以直接传参数调用。