首页 > 技术文章 > Hibernate快速入门实例

doitbyyourself 2017-07-07 14:55 原文

Hibernate工程项目创建基本步骤:导包(Hibernate依赖包、SQL驱动包)、编写实体类、编写ORM映射配置文件、编写核心配置文件、编写测试驱动。

项目工程代码已经上传到GitHub:https://github.com/wanyouxian/Hibernate  工程名:HibernateQuickStart

整个工程项目结构如下图:

 

一、导包

  笔者使用的是MySQL数据库,因此导入数据包如下图:

 二、编写实体类

  实体类就是与数据库里表对应的实体类,其编写有一定的规则:

1、提供私有成员变量和公有的get/set方法

2、提供空构造器:Hibernate反射需要使用该构造器

3、成员变量的类型尽量使用包装类:如果是long类型,则尽量使用Long类型

4、不能使用final关键字修饰实体类:主要用于hibernate延迟加载时创建代理对象,即该代理对象是实体类的子类,因此不能使用final修饰,延迟加载主要用于hibernate性能优化

5、必须提供用于生成主键OID的属性:如果不提供则不能使用Hibernate框架,hibernate是通过oid来区分是否为同一个对象

 1 package com.rocky.domain;
 2 
 3 public class User
 4 {
 5     private Integer uId;
 6     private String  uName;
 7     private Integer uAge;
 8     public User()
 9     {
10         super();
11     }
12     @Override
13     public String toString()
14     {
15         return "User [u_id=" + uId + ", uName=" + uName + ", uAge=" + uAge + "]";
16     }
17     public Integer getuId()
18     {
19         return uId;
20     }
21     public void setuId(Integer uId)
22     {
23         this.uId = uId;
24     }
25     public String getuName()
26     {
27         return uName;
28     }
29     public void setuName(String uName)
30     {
31         this.uName = uName;
32     }
33     public Integer getuAge()
34     {
35         return uAge;
36     }
37     public void setuAge(Integer uAge)
38     {
39         this.uAge = uAge;
40     }
41 }
View Code

三、编写ORM映射文件

  一个实体类对应于一个ORM映射文件,主要用于指定实体类与表的映射规则。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping package="com.rocky.domain">
 6     <!--指定实体类和表的对应关系  -->
 7     <class name="User" table="tb_user">
 8         <!--指定主键  -->
 9         <id name="uId">
10             <!--指定主键生成策略,assigned:代表生成自然主键,实际开发中我常使用native:根据配置选择主键  -->
11             <generator class="assigned"></generator>
12         </id>
13         <!--指定实体类属性和表的列的对应关系,如果不填写column属性则创建的表和实体属性名相同,
14         具体情况看公司表的设计和要求  -->
15         <property name="uName"></property>
16         <property name="uAge"></property>
17     </class>
18 </hibernate-mapping>
View Code

四、编写主配置文件

  一个项目工程只有一个核心配置文件,用于配置和数据连接的参数和引入ORM映射配置文件

 1 <?xml version='1.0' encoding='UTF-8'?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 5 
 6 <hibernate-configuration>
 7     <session-factory>
 8 
 9         <!--指定数据库的参数  -->
10         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
11         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
12         <property name="hibernate.connection.url">jdbc:mysql://192.168.100.100:3306/test</property>
13         <property name="hibernate.connection.username">root</property>
14         <property name="hibernate.connection.password">1</property>
15         
16         <!--指定hibernate是否显式SQL语句及其格式化  -->
17         <property name="hibernate.show_sql">true</property>
18         <property name="hibernate.format_sql">true</property>
19         
20         <!--指定表的生成方式-即是否由hibernate自动创建表,其取值为:create-drop、
21          create、validate、update-->
22         <property name="hibernate.hbm2ddl.auto">update</property>
23         
24         <!--引入 ORM配置文件 -->
25         <mapping resource="com/rocky/domain/User.hbm.xml"/>
26     </session-factory>
27 
28 </hibernate-configuration>
View Code

五、编写测试类

 1 package com.rocky.testdriver;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.Transaction;
 6 import org.hibernate.cfg.Configuration;
 7 
 8 import com.rocky.domain.User;
 9 
10 public class TestDriver
11 {
12 
13     public static void main(String[] args)
14     {
15         
16         //加载配置文件
17         Configuration cfg = new Configuration();
18         cfg.configure();
19         //创建会话工厂
20         SessionFactory factory = cfg.buildSessionFactory();
21         //获取非线程绑定会话
22         Session session = factory.openSession();
23         //开启事务
24         Transaction tx = session.beginTransaction();
25         //创建User对象
26         User user = new User();
27         user.setuId(1);
28         user.setuName("rocky");
29         user.setuAge(28);
30         
31         //将数据插入数据库
32         session.save(user);
33         
34         //提交事务
35         tx.commit();
36         //关闭会话
37         session.close();
38     }
39 
40 }
View Code

 

推荐阅读