`

补充知识 Session接口及get、load、persist方法

阅读更多

在Base类中加入以下代码实现get方法
package cn.itcast.hibernate;
import java.util.Date;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import cn.itcast.hibernate.domain.User;
import org.hibernate.Transaction;
public class Base {

    public static void main(String[] args) {
        
        User user = new User();
        user.setBirthday(new Date());
        user.setName("name");
        addUser(user);    
        
        User u = getUser(user.getId());
        System.out.println("name:"+u.getName());
    }
    
     static User getUser(int id){
         Session s = null ;
         try{
             s = HibernateUtil.getSession();
             Class userClass = User.class;
             User user = (User)s.get(User.class,id);
             return user ;
         }finally {
             if(s !=null)
                 s.close();
         }
     }
    
        static void addUser(User user){
            Session s = null ;
            Transaction tx = null ;
            try{
                s = HibernateUtil.getSession();
                tx = s.beginTransaction();
                s.save(user);
                tx.commit();
            }catch(HibernateException e){
                if(tx !=null)
                    tx.rollback();
                throw e ;
            }finally {
                if(s !=null)
                    s.close();
            }
        }
        
}

 

对get方法参数User.class的理解:
由于Session可以管理多个数据库表所对应的多个实体对象。如果要查询id为1的实体对象,Session.get方法需要知道去哪个数据库表中查询id为1的记录,所以。除了给get方法传递所要查询的实体对象的id值外,还必须给get方法传递实体对象的类型,get方法才能知道去哪个数据库表中进行查询。
控制台显示结果: name:name

在配置文件hibernate.cfg.xml文件中加入
<property name="show_sql">true</property>
可显示所执行的sql语句

 

load方法
懒加载 并不马上访问数据库 只有第一次应用时才访问数据库 load方法的返回对象永远不可能为空

 

package cn.itcast.hibernate;
import java.util.Date;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import cn.itcast.hibernate.domain.User;
import org.hibernate.Transaction;
public class Base {

    public static void main(String[] args) {
        
        User user = new User();
        user.setBirthday(new Date());
        user.setName("name");
        addUser(user);    
        
        User u = getUser(user.getId());
        System.out.println("name:"+u.getName());
    }
    
     static User getUser(int id){
         Session s = null ;
         try{
             s = HibernateUtil.getSession();
             Class userClass = User.class;
             //User user = (User)s.get(User.class,id);
             User user1 = (User)s.load(User.class,id);
             System.out.println("name:"+user1.getName());
             System.out.println(user1.getClass().getName());
             return user1 ;
         }finally {
             if(s !=null)
                 s.close();
         }
     }
    
        static void addUser(User user){
            Session s = null ;
            Transaction tx = null ;
            try{
                s = HibernateUtil.getSession();
                tx = s.beginTransaction();
                s.save(user);
                tx.commit();
            }catch(HibernateException e){
                if(tx !=null)
                    tx.rollback();
                throw e ;
            }finally {
                if(s !=null)
                    s.close();
            }
        }
        
}

 

 

总结
save与persist方法的区别:在没有开启事务的时候
save方法会把数据插入到数据,之后又回滚,删掉数据。而persist方法根本就不执行插入。

总结Session的几个主要方法:
1 save,persist保存数据,persist在事务外不会产生insert语句,persist方法在没开启事务根本不会产生insert 语句,sava方法会产生sql语句,但是如果没有开启事务,会回滚事务,不会插入数据
2.delete,删除对象;
3.update,更新对象,如果数据库中没有记录,会出现异常;
4.get,根据id查,会立刻访问数据库。
5.load,根据id查(返回的是代理,不会立即访问数据库)
6.saveOrUpdate,merge(根据id和version的值来确定是save或update),调用merge你的对象还是托管的。
7.lock()把对象变成持久对象,但不会同步对象的状态

 

分享到:
评论

相关推荐

    04_传智播客hibernate教程_Session接口及getloadpersist方法

    本教程聚焦于Hibernate中的Session接口以及get、load、persist这三个常用的方法,它们是 Hibernate 实现对象-关系映射(ORM)的核心组件。 首先,我们来理解Session接口。Session在Hibernate中扮演着数据库连接的...

    传智播客李勇hibernate源码1-20课

    04_Session接口及get|load|persist方法 05_实体对象的三种状态与saveOrUpdate方法 06_完善HibernateUtil类及hql查询入门 07_实体类或属性名与数据库关键字冲突问题 10_使用Hibernate完成CRUD实验的步骤说明 11_...

    Hibernate的Session的javadoc

    通过Session的get()或load()方法获取的对象默认处于此状态。 - **游离状态(Detached)**:对象曾经是持久化的,但当前未与任何Session关联。对象在游离状态下可以被重新持久化。 2. **对象持久化操作**: - **...

    hibernate session生命周期示例

    - **加载和检索**:使用`get()`或`load()`方法可以加载一个实体,如果对象存在于数据库,Hibernate将返回一个对应的代理对象。 - **保存和插入**:`save()`方法用于将瞬时对象转换为持久化对象,而`persist()`方法...

    java框架方面面试题

    接下来是关于Hibernate中Session的load和get方法的区别。load方法设计用来获取数据,如果没有找到符合条件的数据记录,会抛出异常;而get方法会返回null,表示没有找到数据。load方法返回的是一个代理对象,而get...

    hibernate登录小例子

    - **Create**:创建新用户时,使用`Session.save()`或`Session.persist()`方法将实体持久化到数据库。 - **Read**:在登录时,使用`Session.get()`或`Session.load()`方法根据用户名查询用户对象。 - **Update**:...

    hibernate实现增删改查

    3. **修改**:首先,通过Session的get或load方法获取要更新的对象,然后修改对象的属性,最后调用Session的update方法,如`session.update(user)`。这将同步数据库中的记录。 4. **查询**:使用Session的...

    hibernate整理

    1. **增加(Create)**:使用`Session.save()`或`Session.persist()`方法可以将新对象保存到数据库。例如,如果有一个User对象,可以调用`session.save(user)`来创建新的用户记录。 2. **删除(Delete)**:删除...

    Hibernate之API初识及增删改查实现案例hibernate003

    - **读取(Read)**:通过`Session.get()`、`Session.load()`或Criteria查询获取数据库中的对象。 - **更新(Update)**:对持久化对象的属性进行修改后,调用`Session.update()`或`Session.saveOrUpdate()`来更新...

    一个简单的Hibernate泛型Dao的实现 ---- 20160624

    通常会使用`Session.get()`或`Session.load()`方法。 5. `findAll()`:获取所有实体对象的列表,可能使用`Session.createQuery()`来执行SQL的`SELECT * FROM table`语句。 这些方法的实现依赖于Hibernate的Session...

    hibernate api

    2. 读取(Read):`Session.get()`或`Session.load()`根据ID获取对象,`Query`或`Criteria` API进行复杂查询。 3. 更新(Update):修改持久态对象后,Hibernate会在事务提交时自动更新数据库,也可用`Session....

    Hiberbate增删改查(分页)的例子简单的

    2. 读取(Read):使用 Session 的 get() 或 load() 方法获取数据库中的对象。get() 直接返回对象,而 load() 返回代理对象,延迟加载实体的属性。 3. 更新(Update):调用 Session 的 update() 或 merge() 方法可...

    hibernate增删改查

    删除操作通常分为两步:首先,通过Session的get()或load()方法获取对象;然后,调用Session的delete()方法删除该对象。例如: ```java User user = (User) session.get(User.class, userId); session.delete(user); ...

    JAVA面试问题及标准答案.docx

    关于Session的load()和get()方法,两者都可以用于获取数据库中的对象。get()方法如果找不到匹配的记录会返回null,而load()则会抛出异常。load()返回的是对象的代理,get()直接返回对象。此外,load()默认会尝试从二...

    Hibernate实例代码,含常用方法

    - **Read**:通过`Session.get()`或`Session.load()`获取指定ID的对象,或者使用`Session.createQuery()`或`Session.createCriteria()`进行查询操作。 - **Update**:对已存在的对象进行修改后,调用`Session....

    hibernate示例

    - **读取(Read)**:通过`Session.get()`或`Session.load()`获取对象,或者使用`Query`或`Criteria`进行复杂查询。例如: ```java Session session = sessionFactory.openSession(); MyEntity entity = (MyEntity) ...

    Java面试题全集(下)

    4. Hibernate的Session方法:Hibernate中的Session提供了多种方法来处理数据库操作,包括load()和get()方法。load()方法在找不到记录时会抛出异常,它返回的是一个实体类的代理对象;而get()方法在找不到记录时返回...

    Hibernate入门

    使用`Session.save()`或`Session.persist()`方法,可以将Java对象持久化到数据库。Hibernate会自动执行INSERT语句。 #### - 读取(Read) 通过`Session.get()`或`Session.load()`获取对象,或者使用`Session....

    java框架面试题

    #### 四、Hibernate中Session的load和get方法 **1. load与get的区别** - **load**方法假设指定ID的实体一定存在于数据库中,返回的是代理对象。如果没有找到对应的实体,则抛出异常。 - **get**方法直接返回实体...

    hibernate-初次操作具体步骤共4页.pdf.zip

    - **Read**:通过`Session.get()`或`Session.load()`获取已有对象,`Session.createQuery()`或`Session.createSQLQuery()`执行HQL(Hibernate Query Language)查询。 - **Update**:更新对象属性后,使用`Session...

Global site tag (gtag.js) - Google Analytics