写一个从数据库里取数据的方法
查询的话,不会牵扯到修改数据库,所以不用打开事务
查询的话,不会牵扯到修改数据库,所以不用打开事务
static User getUser(int id){
Session s=null;
Transaction tx=null;
try{
s.HibernateUtil.getSession();
Class userClass=User.class;
User user=(User)s.get(userClass,id);
return user;
}finally{
if(s!=null)
s.close();
}
}
-------------------------------------------------
Class userClass=User.class;
User user=(User)s.get(userClass,id);
这里区分一下类和实例: 类是图纸,实例就是根据图纸建的大楼
比如User是图纸,user是大楼
在Java中什么都是对象,所以,图纸(User)也算一个对象。
那么,怎么来描述User这个对象呢?
比如,String,User都是图纸,在Java中图纸叫做Class
Session s=null;
Transaction tx=null;
try{
s.HibernateUtil.getSession();
Class userClass=User.class;
User user=(User)s.get(userClass,id);
return user;
}finally{
if(s!=null)
s.close();
}
}
-------------------------------------------------
Class userClass=User.class;
User user=(User)s.get(userClass,id);
这里区分一下类和实例: 类是图纸,实例就是根据图纸建的大楼
比如User是图纸,user是大楼
在Java中什么都是对象,所以,图纸(User)也算一个对象。
那么,怎么来描述User这个对象呢?
比如,String,User都是图纸,在Java中图纸叫做Class
怎么得到Class的实例userClass? 这个实例不是我们构
造出来的,是由Java虚拟机构造出来的:User.class
造出来的,是由Java虚拟机构造出来的:User.class
虚拟机将在将Class加入到内存里边,它就会构造出这样
一个实例出来
User.class 的.class相当于一个静态成员(Object提供)
一个实例出来
User.class 的.class相当于一个静态成员(Object提供)
这个属性的赋值,是虚拟机在装载这个类之后,构造出这
个实例。赋值到userClass对象
个实例。赋值到userClass对象
Class包括的信息:类名,类的方法,类的属性,类的继承,
实现了哪些接口
实现了哪些接口
反射所能办到的,都是通过class来办到的。
可以拿到它的一构造方法来构造一个对象,也可以拿到它
的一个普通方法来调用它,都是可以的。
可以拿到它的一构造方法来构造一个对象,也可以拿到它
的一个普通方法来调用它,都是可以的。
-------------------------------------------------
User user=(User)s.get(userClass,id);
User user=(User)s.get(userClass,id);
Hibernate要通过这个get方法拿到映射文件
它能完成所有的操作,都是依据映射文件来办到的。
它能完成所有的操作,都是依据映射文件来办到的。
把类的信息给它以后,它知道是哪一个类以后,然后找到
相应的映射文件,关联到数据表,就可以对类和表之间进
行映射和处理。
相应的映射文件,关联到数据表,就可以对类和表之间进
行映射和处理。
-----------------------------------------------
Hibernate工作的依据就是映射文件,所以我们需要知道
它是怎样的定义这个映射文件的
Hibernate工作的依据就是映射文件,所以我们需要知道
它是怎样的定义这个映射文件的
public static void main(String[] args){
User user=new User();
user.setBirthday(new Date());
user.setName("name");
addUser(user);
System.out.println("id:"+ user.getId());
User user=new User();
user.setBirthday(new Date());
user.setName("name");
addUser(user);
System.out.println("id:"+ user.getId());
User u=getUser(user.getId());
System.out.println("name:"+ u.getName());
}
运行结果: id:1
name:name
System.out.println("name:"+ u.getName());
}
运行结果: id:1
name:name
static User getUser(int id){
Session s=null;
Transaction tx=null;
try{
s.HibernateUtil.getSession();
Class userClass=User.class;
User user=(User)s.get(userClass,id);
return user;
}finally{
if(s!=null)
s.close();
}
}
-------------------------------------------------
为了看到sql语句可以在 hibernate.cfg.xml中添加属性
<property name="show_sql">true</property>
为了看到sql语句可以在 hibernate.cfg.xml中添加属性
<property name="show_sql">true</property>
hibernate-3.2.5\hibernate-3.2\etc\hibernate.properties
下,可查到hibernate的属性
下,可查到hibernate的属性
------------------------------------------------
get:
User user=(User)s.get(userClass,id);
更多方法可以看源码session.class
get:
User user=(User)s.get(userClass,id);
更多方法可以看源码session.class
------------------------------------------------
load:
User user=(User)s.load(userClass,id);
load 不会去访问数据库(懒加载),当第一次使用时
才会去访问数据库
load的user对象是永远不会为空的,它自己new出
了一个User的子类
load:
User user=(User)s.load(userClass,id);
load 不会去访问数据库(懒加载),当第一次使用时
才会去访问数据库
load的user对象是永远不会为空的,它自己new出
了一个User的子类
------------------------------------------------
merge:
将对象和数据进行一次更新
merge:
将对象和数据进行一次更新
------------------------------------------------
presist:
跟save的效果是一样的
区别:当未开启事务,save会插入数据,然后回滚
而persist直接不插入
------------------------------------------------
refresh:
相当于重新读取一次
presist:
跟save的效果是一样的
区别:当未开启事务,save会插入数据,然后回滚
而persist直接不插入
------------------------------------------------
refresh:
相当于重新读取一次
------------------------------------------------
-Session的几个主要方法
1.save,persist保存数据,persist在事务外不会产生 insert语句。
2.delete,删除对象
3.update,更新对象,如果数据库中没有记录,会出现异常。
4.get,根据ID查,会立刻访问数据库。
5.Load,根据ID查(返回的是代理,不会立即访问数据库)
6.saveOrUpdate,merge(根据ID和version的值来确定是save或
update),调用merge你的对象还是托管的。
7.lock(把对象变成持久对象,但不会同步对象的状态)。
1.save,persist保存数据,persist在事务外不会产生 insert语句。
2.delete,删除对象
3.update,更新对象,如果数据库中没有记录,会出现异常。
4.get,根据ID查,会立刻访问数据库。
5.Load,根据ID查(返回的是代理,不会立即访问数据库)
6.saveOrUpdate,merge(根据ID和version的值来确定是save或
update),调用merge你的对象还是托管的。
7.lock(把对象变成持久对象,但不会同步对象的状态)。