Hibernate初步
来源:互联网 发布:vue.js 数据绑定 编辑:程序博客网 时间:2024/05/01 21:23
一 综述
1 Session的创建
步骤 :
(1) 初始化Hibernate配置管理器 Configuration
根据传入或默认的配置文件 hibernate.cfg.xml , 或者 hibernate.properties ,来创建并初始化一个实例 。
Configuration config=new Configuration().configure();
(2)通过Configuration类创建Session的f工厂类SessionFactory
SessionFactory sessionFactory=config.buildSessionFactory();
(3)通过SessionFactory得到session的实例
Session session=sessionFactory.openSession();
二 hibernate 基础定义
1 Configuration
负责管理hibernate的配置信息,Hibernate运行时获得一些底层信息,几个关键属性包括:
(1) 数据库 URL
(2) 数据库用户
(3) 数据库用户密码
(4) 数据库jdbc驱动类
(5) 数据库适配器(dialect) ,用于对特定的数据库提供支持,其中包含了对特定数据库进行实现。如hibernate数据类型到数据库类型的映 射。
当我们调用:
Configuration config=new Configuration().configure(); 一般在创建SessionFactory时需要该类。
Hibernate会自动在CLASSPATH中搜索hibernate.cfg.xml ,并加载进内存,作为后继操作的配置。
2 SessionFactory
该类负责创建session实例,保存了对应当前数据库配置的所有映射关系,同时也负责维护当前的二级缓存和StatementPool,创建SessionFactory代价是昂贵的。
3 Session
该类是hibernate操作的基础,相当于JDBC 与JDBC Cnnection ,Session作为Hibernate的持久化管理器核心,提供了众多支持持久化的方法,通过这些对象我们可以透明的完成CRUD 。
(1) 利用Query接口:
String hql = "from User user where user.username like ? " ;
Query query = session.createQuery(hql) ;
query.setParameter(0, "duming") ;
List list = query.list() ;
Iterator iter = list.iterator() ;
while(iter.hasNext()){
User user = (User) iter.next() ;
System.out.println("name:" + user.getUsername());
System.out.println("password:" + user.getPassword());
}
(2)criteria 查询接口
四 hibernate O/R映射
1 实体映射技术
该技术作为类和表之间的纽带,在ORM技术中占有重要的位置。对于hibernate用户而言,映射关系更多的体现在配置文件的维护之中。
该部分分为以下3种方面:
(1) 介绍hibernate中类表映射,字段属性之间的映射。
(2) 介绍自定义数据类型,该偶记属性之间的映射。
(3) 围绕实体映射中实体粒度,层次的设计思路进行探讨。
2 实体映射基础
a) 表名类名之间的映射
<class name="cn.bupt.duming.vo.User" table="user" catalog="login">
<generator-class = "native">
表示主键生成方式由数据库本身负责。generator 表示主键的生成方式。
b) 主键映射
<id name="username" type="java.lang.String">
<column name="username" length="50" />
</id>
c) 字段映射
<property name="password" type="java.lang.String">
<column name="password" length="50" />
</property>
通过以上配置binernate.hbm.xml ,我们就完成了实体类与数据库表之间的映射。从而能够完成增删改查的操作。
3 hibernate 还提供了一种与实体类型无关的映射模式:动态模型 , 即通过通用的集合类型来对数据库进行操作。
最简单的是通过hashMap 的键值对,来记录数据库中的 属性值/属性名。
实例如下:
<class entity-name="DynamicUserMap" table="user" catalog="login">
动态模型中不存在特定的实体类,我们通过增加一个字段entity-name,用以指定实体名,然后借助这个实体名,我们进行MAP类的持久化。
实例代码如下:
Map userMap = new HashMap();
userMap.put("username" , "duming2" ) ;
userMap.put("password", "lk") ;
Transaction tx = session.beginTransaction() ;
session.save("DynamicUserMap" , userMap) ;
tx.commit() ;
4 高级实体映射机制:
UserType 和CompositeUserType 接口是hibernate中提供的实现自定义类型的接口。
5 符合主键
hibernate 只用composite-id 对库表进行操作 , 映射主键为:
<class name="cn.bupt.duming.vo.Student" table="student" catalog="login">
<composite-id>
<key-property name="firstname" type="java.lang.String">
<column name="firstname" length="50" />
</key-property>
<key-property name="lastname" type="java.lang.String">
<column name="lastname" length="50" />
</key-property>
</composite-id>
<property name="address" type="java.lang.String">
<column name="address" length="50" />
</property>
(2)VO类实现:
需要重载 equals 方法, 和 hashCode 方法。
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if(!(obj instanceof Student)){
return false ;
}
Student rhs = (Student) obj ;
return new EqualsBuilder()
.append(this.firstname , rhs.firstname)
.append(this.lastname , rhs.lastname).isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder(-528253723 , -475504089)
.append(super.hashCode())
.append(this.firstname)
.append(this.lastname)
.toHashCode() ;
}
(3) 测试代码
Student student = new Student() ;
student.setFirstname("du") ;
student.setLastname("ming") ;
student = (Student) session.load(Student.class, student) ;
- Hibernate初步
- Hibernate 初步
- Hibernate初步
- hibernate 初步
- hibernate 初步
- Hibernate 二级缓存初步理解
- Hibernate-Annotation初步
- Hibernate-Annotation初步
- Hibernate初步步骤
- Hibernate自学:初步了解
- Hibernate初步部署
- hibernate+struts2初步设想
- 初步体验Hibernate
- hibernate初步学习
- spring hibernate初步
- 1、hibernate初步
- Hibernate 初步入门
- Hibernate的初步体验。
- C#连接Oracle数据库的简单应用
- asp.net客户端或服务端验证方式
- 分页
- ubuntu中找回mysql5.0遗失的root密码
- 优秀程序员应该有的习惯
- Hibernate初步
- WINDOWS SOCKET 重叠I/O 事件对象
- Distinct
- PTZ云台开发过程中PELCO-D、PELCO-P协议遇到的问题
- table border边框线虚线 隔行换色onmouse效果 div换色
- 如何在未加入域的机器上使用集成认证来登陆SQL Server
- 转://我被副手架空
- Top
- .Net 开源框架