Hibernate基本概念和CURD
一、开发流程
1、 由Domain objectàmappingàdb(官方推荐)。站在面向对象的角度
(1) Domain类
(2) 映射文件User.hbm.xml
(3) 表create table user();
2、 由DB开始,用工具生成mapping和Domain object(使用较多)。站在关系模型的基础上。
(1) 先把表建好
(2) 在生成Domain
(3) 映射文件User.hbm.xml
3、 由映射文件开始。
二、hibernate实现细节
1、 实体类对象的限制:
class User{
//添加一个有参数的构造方法
public User(int id,String name,Date birthday){
}
//无参构造,是必须的。
public User(){
}
}
反射机制
Hibernate Class clazz
实体类对象有什么样的限制?
(1) 默认的构造方法。(是必须的)
(2) 有无意义的标示符id(主键)(可选)
(3) 非final的,对懒加载有影响(可选)
2、 映射文件:
一个Java类在映射文件中用一对<class>标签表示,有多个Java类,那么久应该有多个<class>标签。
对于这些<class>标签来说,我们可以将它们放到一个映射文件中,也可以把它们放到多个映射文件中。
映射文件的名字通常用:实体类的类名.hbm.xml。这个做的优点:,非常清晰,可读性非常好,利于日后的维护。
3、 代码编写:
Session接口中的常用方法:
(1) save.persist保存数据,在不开启事务时,save()方法是产生了insert()语句,但由于没有提交事务,所以最终被回滚了。Persist()在事务外不会产生insert()语句。
(2)delete(),删除对象
(3)update(),更新对象,如果数据库中没有记录,会出现异常。
(4)get,根据ID查,会立刻访问数据库。
三、*对象状态:
(1)瞬时状态:自己New出来的对象就是瞬时状态。
User user=new User(); //user是一个瞬时对象,在数据库的表中是没有记录和该对象相对应的。和session没有关系。
user.setName(“ddd”);
user.setBirthday(new Date());
session.save(user);
(2) 持久状态:数据库表中有相应的记录是和这个对象相对应的,并且该对象是被session管理的。
(3) 脱管状态:数据库表中有一条记录和这个对象是相对应的,但是它和session没有任何关系。
session |
session save(user) |
commit() |
user |
user |
db |
user |
close() |
瞬时状态 |
持久状态 |
脱管状态 |