session API
来源:互联网 发布:stata mac 编辑:程序博客网 时间:2024/06/01 21:36
Hibernate API
http://docs.jboss.org/hibernate/core/3.2/api/
1、对象的三种状态
三种状态的区别在于:
有没有ID,ID在数据库中有没有,在内存中有没有(session缓存)
三种状态
Transient:内存中的一个对象,没有ID,缓存中也没有
Persistent:内存中有,缓存中有,数据库中有ID
Detached:内存中有,缓存中没有,数据库有ID
2、Session
管理一个数据库的任务单元,即管理数据库中的增删改查操作,
提交事务.
方法CRUD:save(),delete(),update(),saveOrUpdate(),load(),get(),clear().
session.beginTransaction();
session.save(Object obj);
session.getTransaction().commit();
session.close();
3、get()与load()的区别
l 查找时,都会优先从session的缓存中查找.
l 查找不存在对应记录时,表现不一样.load方法查找不到时不会报错,get查找不到时会报错.
l Load返回的是代理对象,等到真正要用到对象的内容时才发起SQL语句.get直接发起SQL语句从数据库中取出,不会延迟.
4、Update()方法
1 用来更新detached对象,更新完成之后成为persistent.
2 更新transient对象会报错. 更新自己设定id(前提是id在数据库中存在)的transient对象可以.3 持久化的对象只要设定不同字段就会发生更新
4 更新部分更改的字段(三种方法)
l XML设定property标签的update=true|false属性,
annotation设定@Column(updatable=false)属性,这种方式少用,不灵活.
l XML设定class标签的dynamic-update=”true”属性,
同一个session中可以,跨session不行.跨session时的实现方法不过可以用session的merge().merge方法会先从数据库load,将得到的和数据库中的进行对比,再update更改过的字段.
JPA1.0 Annotation没有对应的属性,Hibernate
l 使用HQL(EJBQL)(建议使用)
Session se = sessionFactory.openSession();se.beginTransaction();Query query = se.createQuery("update Users u set u.name='abcdef' where u.id='5'");query.executeUpdate();se.getTransaction().commit();
clear()方法:
清除session中的缓存.调用clear()方法会强制清除session缓存.不会与数据库打交道.
flush()方法:
当session的事务提交后,会强制进行从内存(session缓存)到数据库的同步.默认情况下是session的事务提交时才同步.不常用.
public class UsersTest {private static SessionFactory sessionFactory;@BeforeClasspublic static void beforeClass() {sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();}@AfterClasspublic static void afterClass() {sessionFactory.close();}@Testpublic void testUsersSave() {Users users = new Users();users.setName("xiaomi");users.setPassword("1234444"); Session session = sessionFactory.openSession();session.beginTransaction();session.save(users);session.getTransaction().commit();}@Testpublic void testUsersDelete() {Users users = new Users();users.setId(7);Session session = sessionFactory.openSession();session.beginTransaction();session.delete(users);session.getTransaction().commit();}@Testpublic void testLoad() {Session session = sessionFactory.openSession();session.beginTransaction();Users users = (Users) session.load(Users.class, 8);System.err.println(users.getName());session.getTransaction().commit(); }@Testpublic void testGet() { //从数据库中获取一条记录转换成对象Session session = sessionFactory.openSession();session.beginTransaction();Users users = (Users) session.get(Users.class, 8);System.err.println(users.getName());session.getTransaction().commit(); }@Testpublic void testUpdate1() { Session session = sessionFactory.openSession();session.beginTransaction();Users users = (Users) session.get(Users.class, 8);System.err.println(users.getName());session.getTransaction().commit(); users.setName("hhhhh");Session se = sessionFactory.openSession();se.beginTransaction();se.update(users);se.getTransaction().commit();}@Testpublic void testUpdate2() { Users users = new Users();users.setId(5);users.setName("haaaah");users.setPassword("11111"); Session se = sessionFactory.openSession();se.beginTransaction();se.update(users);se.getTransaction().commit();}@Testpublic void testUpdate3() { Session se = sessionFactory.openSession();se.beginTransaction();Query query = se.createQuery("update Users u set u.name='abcdef' where u.id='5'");query.executeUpdate();se.getTransaction().commit();}@Testpublic void testSChemaExport(){ //生成建表语句new SchemaExport(new AnnotationConfiguration().configure()).create(true, false);} }
- session API
- Hibernate Session Api
- Interface Session API
- Hibernate session API
- session【in servlet api】
- Hibernate Session API
- Session API说明
- Session介绍、API、生命周期、应用
- 8、Spring Session-API文档
- WTSRegisterSessionNotification() API to receive session switch notification
- session原理及生命周期和一些api
- web api中使用session的方法
- Android API Guides---Session Initiation Protocol
- TensorFlow源代码学习--1 Session API reference
- Hibernate绑定session以及api的使用
- FreeSwitch LUA API ——Non-Session API
- Struts2引用Servlet API中的对象,request、response或session
- Struts2引用Servlet API中的对象,request、response或session
- 树的基本操作
- C++临时对象销毁时间
- hadoop学习【12】——hadoop杂谈之我的理解
- linux 设置网络API --- 开/关网卡、设置/获取Mac地址
- 公顷、平方米、亩
- session API
- String类的compareTo()和compareToIgnoreCase()
- 自省
- 乘电梯(DP)
- Component Development (组件开发)
- [讲课]2-11 数组的基本用法
- 研究block中的数据调用情况
- 《Linux驱动基础篇》- Linux内核I/O模型
- linux抓包