Hibernate开发流程——基本概念和CURD
一、开发流程
(1) Domain类
(2)映射文件User.hbm.xml
(3)表create table user();
1、 由Domain object->mapping->db.(官方推荐)
2、 由DB开始,用工具生成mapping和Domain object。
3、 由映射文件开始。
二、
1、 Domain Object限制(实体类对象限制)
(1) 默认的构造方法(必须的)。
(2) 有无意义的标示符id(主键)(可选)
(3) 非final的,对懒加载有影响(可选)
Domain Java Object(User)
public class User{
private int id;
private String name;
private Date birthday;
//getter setter...
}
2、映射文件
一个java类在映射文件中用一对<class>标签表示。如果有多个java类,那就应该有多个<class>标签。这些<class>标签可以放到一个映射文件,可以许多到多个映射文件
3、代码编写
工具类HibernateUtil
static{
Configuration cfg=new Configuration();
cfg.configure();
sessionFactory=cfg.buildSessionFactory();
}
Session接口中的常用方法
1、hbm.xml
<?xml version="1.0"?>
<hibernate-mapping package=“cn.itcast.domain">
<class name="User" table="user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="birthday”/>
</class>
</hibernate-mapping>
三、
Session的几个主要方法
1、save,persist保存数据,在不开启事务时,save()方法是产生了insert语句并执行,但由于没有提交事务,所以最终被回滚了。Persist()在事务外不会产生insert语句。
2、delete,删除对象
3、update,更新对象,如果数据库中没有记录,会出现异常。
4、get,根据ID查,会立刻访问数据库。
5、Load,根据ID查,(返回的是代理,不会立即访问数据库)。
6、saveOrUpdate,merge(根据ID和version的值来确定是save或update),调用merge你的对象还是脱管的。
7、lock(把对象变成持久对象,但不会同步对象的状态)。
(1)瞬时状态:自己new出来的对象就是瞬时状态 User user=new User(); //user是一个瞬时对象,数据库的表中没有记录和该对象相对应
Session.save(user);
(2)持久状态:数据库表中有记录和这个对象相对应的,并且被session管理
(3)脱管状态:数据库表中有一条记录和对像相对应,但它和session没有关系了
1、初始化代码(只做一次)
Configuration cfg = new Configuration();
cfg.configure(“config.cfg.xml”);
也可以通过cfg.setProperty设置属性。
SessionFactory sessionFactory = cfg.buildSessionFactory()
2、模板代码
Session session = null;Transaction tx = null;
try{
session = sessionFactory.openSession();
tx = session.beginTransaction();
//…你的代码save,delete,update,get…
tx.commit();
}catch(Exception e){
if(tx !=null)tx.rollback();throw e;
}finally{
if(session != null)session.close();
}