Hibernate Session 常用数据库操作API
[Object] get(class, key)
调用后直接查询数据库,如果一级缓存或二级缓存中存在数据,则从缓存中取。
[Object] load(class, key)
调用后先返回对象代理,当对象被使用时,从数据库或缓存中查找数据。
[Serializable] save(Object)
保存数据,同一个事务对同一个对象使用多次save,后面的save会用update语句操作。
void update(Object)
更新指定数据,对象必须是永久状态或托管状态,瞬时状态对象更新会抛异常。
void delete(Object)
删除指定数据,对象必须是永久状态或托管状态,瞬时状态不会异常但无意义。
void saveOrUpdate(Object)
判断数据是否存在,存在的话做更新操作,会先执行查询语句,再执行更新或插入语句,
主键不能自增,否则不能判断为重复,参数会从瞬时状态或托管状态变成永久状态。
[Object] merge(Object)
与saveOrUpdate相似,唯一不同的是参数对象不会变为永久状态,返回对象是永久状态。
------------------------------
session的创建
SessionFactory sessionFactory = new [Configuration/AnnotationConfiguration]()
.configure().buildSessionFactory();
Session session = sessionFactory.openSession(); // 永远都创建一个新session,资源消耗大,不推荐使用
Session session = sessionFactory.getCurrentSession(); // 获得当前线程的session,一个线程一个session,
// 无需关闭资,源推荐使用
Transaction trans = session.beginTransaction();
...
session.flash(); //刷新session缓存适用于更新操作后使用
trans.commit();
catch()... trans.rollback();
finally ... session.close(); // 使用getCurrentSession方法获得的session会自动关闭事务,无需手动关闭
------------------------------
SchemaExport 工具创建表
Configuration conf= new Configuration(); //XML
AnnotationConfiguration annConf = new AnnotationConfiguration(); //Annotation
// 指定要创建的实体类对应的表
conf/annConf.addClass(类.class);
conf.Configure(); // 加载配置定义的类
SchemaExport se = new SchemaExport(conf/annConf);
se.create(true/*是否打印dllSQL数据*/, true/*是否根据映射文件创建表*/);
[Object] get(class, key)
调用后直接查询数据库,如果一级缓存或二级缓存中存在数据,则从缓存中取。
[Object] load(class, key)
调用后先返回对象代理,当对象被使用时,从数据库或缓存中查找数据。
[Serializable] save(Object)
保存数据,同一个事务对同一个对象使用多次save,后面的save会用update语句操作。
void update(Object)
更新指定数据,对象必须是永久状态或托管状态,瞬时状态对象更新会抛异常。
void delete(Object)
删除指定数据,对象必须是永久状态或托管状态,瞬时状态不会异常但无意义。
void saveOrUpdate(Object)
判断数据是否存在,存在的话做更新操作,会先执行查询语句,再执行更新或插入语句,
主键不能自增,否则不能判断为重复,参数会从瞬时状态或托管状态变成永久状态。
[Object] merge(Object)
与saveOrUpdate相似,唯一不同的是参数对象不会变为永久状态,返回对象是永久状态。
------------------------------
session的创建
SessionFactory sessionFactory = new [Configuration/AnnotationConfiguration]()
.configure().buildSessionFactory();
Session session = sessionFactory.openSession(); // 永远都创建一个新session,资源消耗大,不推荐使用
Session session = sessionFactory.getCurrentSession(); // 获得当前线程的session,一个线程一个session,
// 无需关闭资,源推荐使用
Transaction trans = session.beginTransaction();
...
session.flash(); //刷新session缓存适用于更新操作后使用
trans.commit();
catch()... trans.rollback();
finally ... session.close(); // 使用getCurrentSession方法获得的session会自动关闭事务,无需手动关闭
------------------------------
SchemaExport 工具创建表
Configuration conf= new Configuration(); //XML
AnnotationConfiguration annConf = new AnnotationConfiguration(); //Annotation
// 指定要创建的实体类对应的表
conf/annConf.addClass(类.class);
conf.Configure(); // 加载配置定义的类
SchemaExport se = new SchemaExport(conf/annConf);
se.create(true/*是否打印dllSQL数据*/, true/*是否根据映射文件创建表*/);