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()方法

用来更新detached对象,更新完成之后成为persistent.

更新transient对象会报错更新自己设定id(前提是id在数据库中存在)transient对象可以.

持久化的对象只要设定不同字段就会发生更新

4 更新部分更改的字段(三种方法)

l  XML设定property标签的update=true|false属性,

annotation设定@Column(updatable=false)属性,这种方式少用,不灵活.

l  XML设定class标签的dynamic-update=”true”属性,

同一个session中可以,session不行.session时的实现方法不过可以用sessionmerge().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);} }











0 0
原创粉丝点击