Hibernate学习笔记hibernate入门
Posted tangjiean
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate学习笔记hibernate入门相关的知识,希望对你有一定的参考价值。
1.Hibernate是什么
Hibernate是一个轻量级的ORMapping对象。主要用来实现Java和数据库表之间的映射,除此之外还提供数据查询和数据获取的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间,解放编程人员95%的任务。
以下是Hibernate的特征(对应规则):
(1).类和表的对应
(2).类的属性和表的字段对应
(3).类的实例和表中的具体一条记录对应
(4).一个类对应多个表,一个表也可以对应多个类
(5).DB中的表可以没有主键,但是Object中必须设置主键字段
(6).DB中表与表之间的映射成Object之间的关系
(7).Object中属性个数以及属性名称可以和DB中表的字段数目以及字段名称不一致
Object和DB的工作原理:
2.Hibernate有什么
Hibernate将应用层从底层的JDBC/JTA API中抽象出来,而让Hibernate去处理
Hibernate体系结构
·SessionFactory:针对单个数据库映射关系经过编译后的内存镜像,是线程安全的的(不可变),它是生成Session的工厂。
·Session:表示应用程序层与持久存储层之间的交互操作的一个单线程对象,此对象声明周期很短,隐藏了JDBC的连接,也是Transaction工厂。
·Transaction:应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。它通过抽象将应用程序从底层具体的JDBC,JTA,CORBA事物隔离开。
·ConnectionProvider:生成JDBC连接的工厂(有数据库连接池的作用),通过抽象将应用从底层的DataSource或者DriverManager隔离开,供开发者使用。
·TransactionFactory:生成Transaction的工厂,供开发者使用。
3.Hibernate入门:Hello World
我们将完成以下的四个操作:Object,数据库表,两种配置文件,客户端程序调用Hibernate接口。
第一步:创建工程,将hibernate-release中lib下的required下面的包全部jar包以及slf4j-log4j12-1.5.8.jar,log4j-1.2.16.jar以及JDBC驱动包导入工程下的lib目录
第二步: Object类,有一下几个字段:uuid,userId,name,age
1 package com.hb; 2 3 public class UserModel 4 private String uuid; 5 private String userId; 6 private String name; 7 private int age; 8 public UserModel() 9 // TODO Auto-generated constructor stub 10 11 public String getUuid() 12 return uuid; 13 14 public void setUuid(String uuid) 15 this.uuid = uuid; 16 17 public String getUserId() 18 return userId; 19 20 public void setUserId(String userId) 21 this.userId = userId; 22 23 public String getName() 24 return name; 25 26 public void setName(String name) 27 this.name = name; 28 29 public int getAge() 30 return age; 31 32 public void setAge(int age) 33 this.age = age; 34 35
第三步:创建数据库的表(使用的是mysql数据库)
第四步:配置***.cfg.xml文件
(1).缺省的名字是hibernate.cfg.xml
(2).将文件存放到classe跟s目录下,开发中将其存放在src的根目录下即可。
(3).主要配置以下的四个部分:
1.与DB的连接
2.可选的配置
3.资源文件配置
4.二级缓存
(4).配置如下:
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 在执行数据查询时,是否显示sql语句 --> <property name="hibernate.show_sql">true</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/test</property> <property name="connection.username">root</property> <property name="connection.password">tangjie</property> <property name="connection.pool_size">2</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <!-- 添加影射文件 --> <mapping resource="com/hb/UserModel.hbm.xml" /> </session-factory> </hibernate-configuration>
第五步:配置***.hbm.xml
(1).与被描述的类同名,如:UserModel.hbm.xml
(2).存放位置与所描述类存放在同一文件夹下
(3).主要有如下四部分配置:
1.类和表的映射
2.主键的映射
3.类的属性和DB字段的映射
4.关系的映射
5.配置如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC '-//Hibernate/Hibernate Mapping DTD 3.0//EN' 'http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd'> <hibernate-mapping> <class name="cn.javass.h4.hello.UserModel" table="tbl_user"> <id name="uuid"> <generator class="assigned" /> </id> <property name="userId"></property> <property name="name"></property> <property name="age"></property> </class> </hibernate-mapping>
第六步:编写客户端类
1 package com.hb; 2 3 import org.hibernate.Session; 4 import org.hibernate.SessionFactory; 5 import org.hibernate.Transaction; 6 import org.hibernate.cfg.Configuration; 7 8 public class Client 9 10 public static void main(String[] args) 11 // 读取hibernate.cfg.xml文件,创建Session工厂 12 SessionFactory sf = new Configuration().configure() 13 .buildSessionFactory(); 14 15 Session s = null; 16 Transaction t = null; 17 18 try 19 // 准备数据 20 UserModel um = new UserModel(); 21 um.setUuid("1"); 22 um.setUserId("id1"); 23 um.setName("name1"); 24 um.setAge(1); 25 // 获得session对象 26 s = sf.openSession(); 27 t = s.beginTransaction(); 28 s.save(um); 29 t.commit(); 30 catch (Exception err) 31 t.rollback(); 32 err.printStackTrace(); 33 finally 34 s.close(); 35 36 37
运行结果如图所示:
到这里,我们完成了第一个Hibernate的案例,学会最基础的用法。后续学习笔记会持续更新...
·
以上是关于Hibernate学习笔记hibernate入门的主要内容,如果未能解决你的问题,请参考以下文章