博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
02hibernate_session
阅读量:7020 次
发布时间:2019-06-28

本文共 5616 字,大约阅读时间需要 18 分钟。

package com.bjsxt.hibernate;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.Transaction;
import junit.framework.TestCase;
public 
class SessionTest extends TestCase {
    
public 
void testHello1() {
        System.
out.println(
"
-----------SessionTest.Hello1()------------
");
        
//
throw new java.lang.RuntimeException();
    }
    
    
public 
void testHello2() {
        System.
out.println(
"
-----------SessionTest.testHello2()------------
");
        
        
//
this.assertEquals("hello", "hello111");
    }
    
    
public 
void testSave1() {
        Session session = 
null;
        Transaction tx = 
null;
        User user = 
null;
        
try {
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();
            
            
//
Transient瞬时状态
            user = 
new User();
            user.setName(
"
白龙马
");
            user.setPassword(
"
123
");
            user.setCreateTime(
new Date());
            user.setExpireTime(
new Date());
            
            
//
persistent持久状态,当属性发生改变的时候,hibernate会自动和数据库同步
            session.save(user);
//
发Hibernate: insert into User 
//
save执行后:让id=402881e538dc30fd0138dc3189490001
            
            user.setName(
"
猪八戒
");
            
//
发Hibernate: update User set,Hibernate怎么知道什么时候要发update语句呢?
            
//
它做的是数据版本也叫 脏数据检查
            
//
session.update(user);
            tx.commit();
        }
catch(Exception e) {
            e.printStackTrace();
            tx.rollback();
        }
finally {
            HibernateUtils.closeSession(session);
        }
        
        
//
detached状态
//
显著特点:a.没有被session管理,同时数据库中有相应的记录
        user.setName(
"
七仙女
");
        
try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
             
//
又变成了persistent状态
            session.update(user);
            session.getTransaction().commit();
//
commit后,发Hibernate: update User set XX ,此时数据库中记录被更新
        }
catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
finally {
            HibernateUtils.closeSession(session);
        }        
    }
    
    
public 
void testReadByGetMethod1() {
        Session session = 
null;
        
try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            
            
//
马上发出查询sql,加载User对象
            User user = (User)session.
get(User.
class
"
402881e538dc30fd0138dc3189490001
");
            System.
out.println(
"
user.name=
" + user.getName());
            
            
//
persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步
            user.setName(
"
白马王子
");
            session.getTransaction().commit();
        }
catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
finally {
            HibernateUtils.closeSession(session);
        }
    }
    
    
public 
void testReadByGetMethod2() {
        Session session = 
null;
        
try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            
            
//
采用get加载数据,如果数据库中不存在相应的数据,返回null
            
            User user = (User)session.
get(User.
class
"
asdfsafsdfdsf
");
            session.getTransaction().commit();
        }
catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
finally {
            HibernateUtils.closeSession(session);
        }
    }
    
    
public 
void testReadByLoadMethod1() {
        Session session = 
null;
        
try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            
            
//
不会发出查询sql,因为load方法实现了lazy(懒加载或延迟加载)
            
//
延迟加载:只有真正使用这个对象的时候,才加载(发出sql语句)
            
//
hibernate延迟加载实现原理是代理方式
            User user = (User)session.load(User.
class
"
402881e538dc33410138dc335ef30001
");
            System.
out.println(
"
user.name=
" + user.getName());
            
            
//
persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步
            user.setName(
"
白雪
");
            session.getTransaction().commit();
        }
catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
finally {
            HibernateUtils.closeSession(session);
        }
    }
    
    
public 
void testReadByLoadMethod2() {
        Session session = 
null;
        
try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            
            
//
采用load加载数据,如果数据库中没有相应的数据
            
//
那么抛出ObjectNotFoundException
            User user = (User)session.load(User.
class
"
55555555
");
            
            System.
out.println(user.getName());
            
            session.getTransaction().commit();
        }
catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
            
throw 
new java.lang.RuntimeException();
        }
finally {
            HibernateUtils.closeSession(session);
        }
    }
    
    
public 
void testUpdate1() {
        Session session = 
null;
        
try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            
            
//
手动构造的detached状态的对象
            User user = 
new User();
            user.setId(
"
402881e538dc33410138dc335ef30001
");
            user.setName(
"
刘德华
");
            
            session.update(user);
            session.getTransaction().commit();
        }
catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
finally {
            HibernateUtils.closeSession(session);
        }
    }    
    
    
public 
void testDelete1() {
        Session session = 
null;
        
try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            
//
            
//
手动构造的detached状态的对象
//
            User user = new User();
//
            user.setId("402880d01b9be8dc011b9be9b23d0001");
//
            user.setName("德华");
//
            session.delete(user);
            
            User user = (User)session.load(User.
class
"
402881e538dc33410138dc335ef30001
");
            session.delete(user);
            session.getTransaction().commit();
        }
catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
finally {
            HibernateUtils.closeSession(session);
        }
        
        
//
transient状态
    }    
    
}
-----------------------------------------------------
package com.bjsxt.hibernate;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import junit.framework.TestCase;
public 
class QueryTest extends TestCase {
public 
void testQuery() {
Session session = 
null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
Query query = session.createQuery(
"
from User
");
query.setFirstResult(
0);
//
注意第一条记录从0开始
query.setMaxResults(
4);
List userList = query.list();
for (Iterator iter=userList.iterator(); iter.hasNext();) {
User user = (User)iter.next();
System.
out.println(user.getId());
System.
out.println(user.getName());
}
session.getTransaction().commit();
}
catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}
finally {
HibernateUtils.closeSession(session);
}
}
}

 

转载于:https://www.cnblogs.com/alamps/archive/2012/07/31/2617211.html

你可能感兴趣的文章
【51nod1592】数列积
查看>>
NGUI 简单的背包系统
查看>>
利用ResultFilter实现asp.net mvc3 页面静态化
查看>>
day18 python之re模块与正则表达式
查看>>
进制转换的方法原理
查看>>
ethereumjs/ethereumjs-vm-4-tests
查看>>
图片压缩工具Thumbnailator的使用
查看>>
安装tensorflow
查看>>
LintCode_469 等价二叉树
查看>>
UVALive3261 UVA1640 POJ2282 HDU1663 ZOJ2392 The Counting Problem【进制】
查看>>
Mathematica开始学习,
查看>>
Gulp 简单的开发环境搭建
查看>>
linux基础-网络基础知识篇
查看>>
使用MulticastSocket实现多点广播
查看>>
RGBA与RGB
查看>>
网盘链接
查看>>
评论发布信息可插入QQ表情
查看>>
iOS,多媒体,地图相关
查看>>
[C++基础]008_类的构造函数和析构函数
查看>>
python之字符编码(二)
查看>>