Hibernate学习笔记3

来源:互联网 发布:江宁区政府网络问政 编辑:程序博客网 时间:2024/06/06 15:00
今天从16:24开始学习:
1.刚刚由于软件崩溃了两次,我都无语了,但是没办法!


学习了session中的一些方法,重要的是get()方法,是用来获取数据库中的一些记录的,以后也要经常用到。我们这里就来讲一个例子,带大家做一下,看看如何在数据库中获取一个记录。
















2.在Base.java中:
由于查询是不需要用到事务的,所以我们在这把有关的事务删除:
package cn.itcast.hibernate;


import java.sql.Date;


import org.hibernate.Hibernate;
import org.hibernate.Transaction;
import org.hibernate.classic.Session;


import cn.itcast.hibernate.docmain.User;


public class Base {


public static void main(String[] args) {



Session s=HibernateUtil.getSession();//拿到一个session
Transaction tx=s.beginTransaction();//获取一个事务
User user=new User();
user.setName("name");
user.setBirthday(new Date(0));
s.save(user);
s.close();
System.out.println("end");
    
}
static User getUser(int id)
{
Session s=null;

try{
s=Hibernate.Util.getSession();
  }finally{
if(s!=null)
{
s.close();
}
}
}


}
























3.然后在try方法中:
try{
s=Hibernate.Util.getSession();
User user=(User)s.get(UserClass, id);//利用get方法来获取一个数据,参数是id,当然这个方法是session里面的,获取User.class
return user;






上面是使用session里面的get方法来获取一个对象,参数有这个对象和id。
返回user,但是要注意一些强制类型转换,转为user类型的。














那么这个userclass从何而来呢?
try{
s=Hibernate.Util.getSession();
Class userClass=UserClass;
User user=(User)s.get(userClass, id);//利用get方法来获取一个数据,参数是id,当然这个方法是session里面的,获取User.class
return user;














这个User.class是虚拟机在装载的时候会构造出这个对象。


那么以后呢,我们就可以通过这种方法来拿到这个对象,那么这个Class怎么来描述它呢?




























4.那么hibernate需要这样一个参数:userClass干什么呢?
其实它是需要它找映射文件,我们知道映射文件是hibernate运行时候的核心。它能够完成所以的操作呢,都是依照这个映射文件来完成的。那把这个userClass类的信息给hibernate之后,它就知道要要找的是哪一个类。






哪一个类呢,那么它就怎么去找这个映射文件呢?






我们来看它怎么找到这个类:
这个包名+类名是唯一的是吧,它确定了这个类的名字之后,就可以通过包名+类名来确定它对应的是哪一个映射文件,我们最终是要获得这个映射文件。通过这个映射文件我们就可以知道我们要找的是哪一个表。






那么通过这种方式呢,我们就可以查一条记录出来。
































5.那么我们再来详细看看session中的这些方法:


*save(),perist()方法是用来保存数据的,perist()方法在事务外不会产生insert语句。
*delete(),用来删除对象
*update(),用来更新对象
*get(),根据id来查询,会立刻访问数据库。
*lock(),把对象变成持久对象
















6.现在我们来看看这个方法:
save or update,merge(根据id和version的值来确定是save或update),调用merge,你的对象还是托管的。






那么这个托管是什么意思呢,我们来解释一下:


对于hibernate来说呢,这个对象,也就是这个user对象对于hibernate来说会处于三种状态:


瞬时状态:数据库中没有数库与之对应,超过作用域会被垃圾回收器回收,一般是new出来且与session无关的对象。


持久状态:数据库中有对象与之相对应,当前与session有关联,并且相关联的session没有关闭,且事务没有提交。持久对象状态发生变化,hibernate能够检测到。




托管状态:数据库中有记录和它对应。但是它和session没有关联了。托管对象发生变化,hibernate能够检测到。
























7.我们来画一个图看看:
算了,今天下午就先学到这里。




今天下午由于在宿舍自习,所以效率有点低下,而且word软件崩溃了,所以出现了一些尴尬,不过我还是坚持学习了下来。这个知识点明天再复习一下,晚上就开始复习知识点了!










                             今天下午自习了1小时10分钟
比平时少了20分钟,出于上午有事,没教室,下午起来太晚,算了,下次要注意,自习时间最少1个半小时!
       
                             !学到了视频05的02:00处



原创粉丝点击