Hibernate学习之路(一)—— HelloWorld

1.所用软件:

(1)eclipse java ee IDE

(2)MySQL数据库

2.eclipse中引入相应jar包:

1)build path中引入hibernate的jar包

2)引入mysql连接java的jar包

3.写hibernate配置文件

将文件命名为hibernate.cfg.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2
 3 <!DOCTYPE hibernate-configuration PUBLIC
 4         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 5         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 6
 7 <hibernate-configuration>
 8 <session-factory>
 9     <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
10     <property name="connection.username">root</property>
11     <property name="connection.password"></property>
12     <property name="connection.url">jdbc:mysql:///hibernate</property>
13     <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
14     <property name="show_sql">true</property>
15     <property name="format_sql">true</property>
16     <property name="hbm2ddl.auto">update</property>
17     <mapping resource="com/denise/hibernate/model/Student.hbm.xml" />
18     <mapping class="com.denise.hibernate.model.Teacher" />
19 </session-factory>
20 </hibernate-configuration>

session-factory的属性中,connection.username以及connection.password是MySQL数据库中自己的用户名和密码,比如我的用户名是root,密码没有设置;而connection.url指明数据库的地址,写法可以有多种形式,因为我连接的数据库是localhost下的hibernate数据库,所以可以简写地址如上。

最后两项mapping,是对模型的映射,resource是传统的映射方式,后面跟类文件的地址;class是使用注解的方式映射,后面跟类名。为方便理解,可以先创建好模型类再写该条语句。

4.数据库建立相应的表

在连接的数据库中建立两张表,分别名为student和teacher。student的字段有id name age,teacher 的字段有 id name title,两张表的id都设为主键。

如果使用的是命令行客户端的MySQL,可以用如下sql语句创建:

use hibernate;

create table student(id int primary key, name varchar(20), age int);

create table teacher(id int primary key, name varchar(20), title varchar(10));

如果使用的是图形化界面的MySQL,则创建过程更简单。

5.创建对应数据库表的model类

先说明,创建与数据库表对应的java类后的步骤,是将数据库与java类连接,即映射。有两种映射方式,一是用映射文件映射,二是使用注解映射。Student类采用的是前者,Teacher采用的是后者。注意看两者的不同。

Student类:

 1 package com.denise.hibernate.model;
 2
 3 public class Student {
 4     private int id;
 5     private String name;
 6     private int age;
 7     public int getId() {
 8         return id;
 9     }
10     public void setId(int id) {
11         this.id = id;
12     }
13     public String getName() {
14         return name;
15     }
16     public void setName(String name) {
17         this.name = name;
18     }
19     public int getAge() {
20         return age;
21     }
22     public void setAge(int age) {
23         this.age = age;
24     }
25
26 }

Teacher类:

 1 package com.denise.hibernate.model;
 2
 3 import javax.persistence.Entity;
 4 import javax.persistence.Id;
 5
 6 @Entity
 7 public class Teacher {
 8     private int id;
 9     private String name;
10     private String title;
11
12     @Id
13     public int getId() {
14         return id;
15     }
16     public void setId(int id) {
17         this.id = id;
18     }
19     public String getName() {
20         return name;
21     }
22     public void setName(String name) {
23         this.name = name;
24     }
25     public String getTitle() {
26         return title;
27     }
28     public void setTitle(String title) {
29         this.title = title;
30     }
31
32 }

每个属性对应表中每个字段,此处字段名与表名相同。再添加setter getter方法。

6.映射

1)映射文件映射

在Student类同个包下,创建Student.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2015-7-19 11:31:50 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="com.denise.hibernate.model.Student" table="STUDENT">
    <!-- 数据库表名不区分大小写 -->
        <id name="id" type="int"> <!-- 映射主键 -->
            <column name="ID" />
            <generator class="assigned" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" />
        </property>
        <property name="age" type="int">
            <column name="AGE" />
        </property>
    </class>
</hibernate-mapping>

事实上,此处type可以省略。colume name和表名一致,也可省略。

2)注解映射

不需要添加其他文件。

7.编写测试类测试

    public void mainTest(){
        Student s = new Student();
        s.setId(002);
        s.setName("Lily");
        s.setAge(33);

        Teacher t = new Teacher();
        t.setId(2011);
        t.setName("Kim");
        t.setTitle("中级");

        Configuration cfg = new Configuration();
        SessionFactory sf = cfg.configure().buildSessionFactory();
        Session session = sf.openSession();
        session.beginTransaction();
        session.save(s);
        session.getTransaction().commit();
        session.close();
        sf.close();
}

当前,buildSessionFactory其实已被弃用,最新办法可以很轻易查到。

用junit运行该方法,并在数据库中查看表中数据是否有更新。

另,当前的顺序为,先建表,再写模型类,最后映射。实际上顺序可以任调,主要看开发者自身的意愿。

时间: 2024-11-05 16:40:28

Hibernate学习之路(一)—— HelloWorld的相关文章

[原创]java WEB学习笔记84:Hibernate学习之路-- -映射 一对一关系 ,基外键的方式实现

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记82:Hibernate学习之路---映射 一对多关联关系,配置,CRUD方法测试及注意点

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记85:Hibernate学习之路-- -映射 一对一关系 ,基于主键方式实现

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记83:Hibernate学习之路---双向 1-n介绍,关键点解释,代码实现,set属性介绍(inverse,cascade ,order-by )

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword,

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记89:Hibernate学习之路-- -Hibernate检索方式(5种),HQL介绍,实现功能,实现步骤,

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------