Hibernate快速入门实例
Hibernate工程项目创建基本步骤:导包(Hibernate依赖包、SQL驱动包)、编写实体类、编写ORM映射配置文件、编写核心配置文件、编写测试驱动。
项目工程代码已经上传到GitHub:https://github.com/wanyouxian/Hibernate 工程名:
整个工程项目结构如下图:
一、导包
笔者使用的是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 }
三、编写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>
四、编写主配置文件
一个项目工程只有一个核心配置文件,用于配置和数据连接的参数和引入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>
五、编写测试类
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 }