Hibernate学习笔记(一)

1,什么是ORM? ORM(Object/relationship Mapping),关系对象映射 Hibernate是管理java对象和关系型数据库映射的框架。java对象和sql语句对应有很多不便,orm简化映射操作。

2,第一个Hibernate小例子

  插件介绍:Hibernate Tools for Eclipse Plugins 是jBoss推出的一个Eclipse综合开发工具插件,该插件可以简化Hibernate\EJB\JBoss Seam等ORM框架开发的工作 安装方法:Eclipse-->help-->install new software-->add 添加下载好的插件压缩包安装,并在new里检查Hibernate选项即可

  JAR包版本:hibernate-4.2.4发布包中lib\requierd\下所有jar、mysql-jdbc驱动包、junit-4.10.jar包。

  1).创建文件名"hibernate.cfg.xml"配置文档 借助 hibernate tools生成,没有提示需要导入hibernate-mapping-3.0.dtd支持。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- 必须配置 -->
        <property name="connection.username">root</property>    <!-- 数据库用户名 -->
        <property name="connection.password">myoa888</property>        <!-- 数据库密码 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>    <!-- 驱动字符串 -->
        <property name="connection.url">jdbc:mysql://127.0.0.1:3336/hibernate?useUnicode=true&amp;characterEncoding=UTF-8</property><!-- 数据库连接字符串 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>    <!--数据库连接方言  -->

        <!-- 开发常见配置 -->
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="hbm2ddl.auto">create</property>

        <!--加载实体类映射文件  -->
        <mapping resource="Students.hbm.xml" />
    </session-factory>
</hibernate-configuration>

2).创建要持久化的实体类

 1 import java.util.Date;
 2
 3 //学生持久类
 4 public class Students {
 5     /*
 6      * 设计hibernate持久类必须遵循的原则 1.公有的类,public修饰 2,提供公有的不带参数的构造方法 3,属性要私有,
 7      * 4,属性getter/setter封装
 8      */
 9     private int sid; // 学号
10     private String sname;// 姓名
11     private String gender;// 性别
12     private Date birthday;// 出生日期
13     private String address;// 地址
14
15     public Students() {
16
17     }
18
19     public Students(int sid, String sname, String gender, Date birthday,
20             String address) {
21         // super();
22         this.sid = sid;
23         this.sname = sname;
24         this.gender = gender;
25         this.birthday = birthday;
26         this.address = address;
27     }
28
29     @Override
30     public String toString() {
31         return "Students [sid=" + sid + ", sname=" + sname + ", gender="
32                 + gender + ", birthday=" + birthday + ", address=" + address
33                 + "]";
34     }
35
36     public int getSid() {
37         return sid;
38     }
39
40     public void setSid(int sid) {
41         this.sid = sid;
42     }
43
44     public String getSname() {
45         return sname;
46     }
47
48     public void setSname(String sname) {
49         this.sname = sname;
50     }
51
52     public String getGender() {
53         return gender;
54     }
55
56     public void setGender(String gender) {
57         this.gender = gender;
58     }
59
60     public Date getBirthday() {
61         return birthday;
62     }
63
64     public void setBirthday(Date birthday) {
65         this.birthday = birthday;
66     }
67
68     public String getAddress() {
69         return address;
70     }
71
72     public void setAddress(String address) {
73         this.address = address;
74     }
75
76 }

3).借助hibernate tools生成实体类映射文档 Students.hbm.xml,new-->others-->hibernate里带hbm.xml的那个

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <!-- Generated 2015-11-17 21:20:51 by Hibernate Tools 3.4.0.CR1 -->
 5 <hibernate-mapping>
 6     <class name="Students" table="STUDENTS">
 7         <id name="sid" type="int">
 8             <column name="SID" />
 9             <generator class="assigned" />
10         </id>
11         <property name="sname" type="java.lang.String">
12             <column name="SNAME" />
13         </property>
14         <property name="gender" type="java.lang.String">
15             <column name="GENDER" />
16         </property>
17         <property name="birthday" type="java.util.Date">
18             <column name="BIRTHDAY" />
19         </property>
20         <property name="address" type="java.lang.String">
21             <column name="ADDRESS" />
22         </property>
23     </class>
24 </hibernate-mapping>

此文将创建完之后,要加入到Hibernate.cfg.xml文件稍后边

1 <!--加载实体类映射文件  -->
2         <mapping resource="Students.hbm.xml" />

4).创建数据库,只需要建库就行,设置好字符集。

5).使用单元测试工具Junit测试:

@Before表示初始化方法 @Test测试方法 @After释放资源方法,测试方法惯例写在Test文件夹中,与src同级;

测试方法如下:

 1 import java.util.Date;
 2
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.Transaction;
 6 import org.hibernate.cfg.Configuration;
 7 import org.hibernate.service.ServiceRegistry;
 8 import org.hibernate.service.ServiceRegistryBuilder;
 9 import org.junit.After;
10 import org.junit.Before;
11 import org.junit.Test;
12
13 public class StudentsTest {
14     private SessionFactory sessionFactory;
15     private Session session;
16     private Transaction transaction;
17
18     @Before
19     public void init(){
20         //创建配置对象
21         Configuration config=new Configuration().configure();
22         //创建服务注册对象
23         ServiceRegistry serviceRegistry=
24                 new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
25         //创建会话工厂对象
26         sessionFactory=config.buildSessionFactory(serviceRegistry);
27         //创建会话对象
28         session=sessionFactory.openSession();
29         //开启事务
30         transaction=session.beginTransaction();
31     }
32     @After
33     public void destory(){
34         transaction.commit();//提交事务
35         session.close();//关闭会话
36         sessionFactory.close();//关闭会话工厂
37     }
38     @Test
39     public void testSaveStudent(){
40         Students s=new Students(1,"张三丰","男",new Date(),"武当山");
41         session.save(s);
42     }
43 }

Hibernate会自动创建数据库表,并插入数据,控制台打印格式化好的建表和插入语句。

时间: 2024-08-24 10:23:59

Hibernate学习笔记(一)的相关文章

《Hibernate学习笔记十一》:树状结构设计

<Hibernate学习笔记十一>:树状结构设计 这是马士兵老师讲解Hibernate的一个作业题,树状结构设计,这是一个比较典型的例子,因此有必要写篇博文记录下. 树状结构的设计,它是在同一个类中使用了多对一(ManyToOne)和一对多(OneToMany). 在完成这个题目我们应该按照如下的步骤进行: 1.先思考数据库的模型应该是什么样的?? 数据库中的模型应该如下:即存在id p_id 2.思考面向对象的模型,及如何来进行映射??? 根据数据库中表的特点,对象应该有id name;由于

《Hibernate学习笔记八》:组件映射

<Hibernate学习笔记八>:组件映射 前面介绍了一对一的单向.双向外键关联,例如,学生证和学生是一个一对一的关系.这篇博文主要是介绍下组件映射,即一个是另一个的一部分,例如,学生证的信息也可以作为学生信息的一部分,即在数据库中只存在学生一个表,而不是有学生和学生证两个表,并且这两个表中有一个一对一的关联关系. 如下: 有人或许会说,那我们就将学生和学生证的信息写在一个类中,则就不需要组件映射了,确实可以这样,但是,根据类的设计原则,我们一般都会将其设计为两个类,然后将学生证的信息作为一个

Hibernate学习笔记:第一个程序的搭建

Hibernate学习笔记:第一个程序的搭建 前一段时间对Struts2这个框架有了一点点地了解,很高兴,自己开始学习Hibernate这个框架了.本篇博文将记录下第一个Hibernate程序的搭建过程.其实有时候个人觉得无论我们学习什么语言也好,还是学习什么框架也好,第一个HelloWorld程序真的相当重要,假如 我们在学习第一个HelloWorld程序都跑不出来,这完全影响着我们对新接触的东西的兴趣和动力,但是,往往第一个程序都会涉及到很多的配置,因此使得对于初学者要摸索一定的时间,对于我

hibernate学习笔记之三(一级缓存的使用和管理)

(hibernate学习笔记系列来自于 "疯狂Java" Hibernate视频学习) 一级缓存 一级缓存生命周期很短,与session生命周期一致,所以一级缓存也叫session级缓存或事务级缓存.位于缓存中的对象处于持久化状态,它与表中的相关记录对应,session能够在某些时间点,按照缓存中持久化对象的属性来同步数据库中表的记录,这一过程称为清理缓存. 一级缓存实现原理. session缓存是由它的实现类sessionImpl中定义的一些集合属性构成的,原理是保证有一个引用在关联

hibernate学习笔记之四(Hibernate中的类型)

(hibernate学习笔记系列来自于 "疯狂Java" Hibernate视频学习) Hibernate中的类型 在*.hbm.xml文件中,<property name="password" column="t_pass">,hibernate根据type转换将java转换成hibernate类型,然后再转换成SQL类型,<property name="password" type="...&q

Hibernate学习笔记(3)

两年前曾经学习过Hibernate,也通过博客将Hibernate的学习过程记录下来了,地址如下: Hibernate学习笔记(1) Hibernate学习笔记(2) 最近在复习Hibernate,在重新学习的过程中,有了一些新的体会和收获,现在将其总结成博客,供以后作为参考资料使用. 一.导入相应的jar包 目前Hibernate更新到了4.x版本,在官网下载后,找到lib文件加中的required文件夹,此外还需要额外导入log4j和数据库驱动包. 二.创建Hibernate配置文件 在sr

Hibernate学习笔记(1)Hibernate配置

一 准备工作 首先我们将创建一个简单的基于控制台的(console-based)Hibernate应用程序. 我们所做的第一件事就是创建我们的开发目录,并且把所有需要用到的Java库文件放进去.解压缩从Hibernate网站下载的Hibernate发布包,并把所有需要的库文件拷到我们项目中去. 学习建User-library-hibernate,并加入相应的jar包 (a)项目右键-buildpath-configure build path-add library (b)选择User-libr

hibernate学习笔记之二(初识hibernate)

(hibernate学习笔记系列来自于 "疯狂Java" 视频学习) Hibernate概述 免费开源Java包,可以使程序和数据库的交互变得容易,并更加符合面向对象的设计. 持久化:将数据保存到数据库中 hibernate持久化类步骤 环境搭建 导入jar包,在hibernate包里的\lib\required文件夹里 导入mysql的JDBC驱动 将上述包添加到路径里面 编写持久化类 要求: 在持久化类中一般需要一个id,通常用Integer类型,这样之后操作会使用null,而不是

Hibernate学习笔记(2)Hibernate问题

(1)数据库驱动问题 log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Exception in thread "main" org.hibernate.HibernateException: JDBC Driver class not found: com.m

《Hibernate学习笔记九》:多对一和一对多的关联关系

<Hibernate学习笔记九>:多对一和一对多的关联关系 前面介绍了一对一的关联关系在Hibernate应该如何来实现,这篇博文就来介绍下多对一和一对多的关联关系. 多对一和一对多的关联关系在我们的生活中也比较常见,例如,在我们学生时代,一个班级可以有多个学生,而一个学生只能属于一个班级,这就是一个多对一(一对多)的例子: 还有在我们的工作中,一个工作小组可以有多个用户,而一个用户只能属于一个小组,这也是一个多对一(一对多)的关系的例子. 1.多对一的单向关联关系 下面就以一个工作小组可以有