全面介绍Hibernate持久化类
本文向大家介绍Hibernate持久化类,可能好多人还不了解Hibernate持久化类,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西。
Hibernate持久化类使用的是JavaBean的风格,为要被访问的属性提供了一套get和set方法,这两个方法也叫做Hibernate持久化类的访问方法.记得曾经在接触JavaBean 的时候我很迷糊,总觉得提供这两个方法,倒不如把Bean的属性设置public,然后直接调用对象.属性,这样来的方便.但是后来,有一个这样的需求, 就是一个人名字可以被查看,但是不可以修改.这个时候如果用set方法的话,只需要把set方法的修饰符换为private就OK了.如果是用对象.属性的形式调用就麻烦了。
而且最重要的一个有点是JavaBean的风格可以简化Hibernate通过JAVA反射机制来获得Hibernate持久化类的访问方法的过程,至于JAVA的反射机制我也是了解一些皮毛.据说很深奥.有兴趣的朋友可以Google一下.有一点值得注意,就是JAVA应用程序不能访问JavaBean持久化类的private类型的get,set方法.而Hibernate没有这个限制,可以访问所有的级别.包括private default,protected,public.
Java有8种基本类型:byte,short,char,int,long,float,double,boolean,还有8种与之对应的包装类型,Byte,Short,Character,Integer,Long,Float,Double,Boolean包装类型就是把基本类型包装成对象的意思.基本类型于包装类型之间可以方便的转换,例如:
int i = 0; Integer ie = new Integer(i); //基本类型转换成包装类型 i = ie.intValue(); //包装类型转化成基本类型
注意,直接转换也是可以的.例如i = ie; JAVA会自动把包装类型转换成基本类型.或者ie = i; JAVA会自动把基本类型转换成包装类型.在Hibernate持久化类中,既可以把属性定义为基本类型,也可以定义为包装类型,他们对应的Hibernate映射类型int和Integer都对应int类型,这个表示不是很明显,在用JAVA对象类型字符串举例String,数据库是varhcar(50),在hibernate的*.hbm.xml 映射文件里一律写为string。
其实使用基本类型或者包装类型来定义Hibernate持久化类中的属性是各有优缺点的.基本类型就是使用方便,简单,在需要数字运算的时候直接可以运算.而包装类型就要麻烦的先转换成基本类型,然后在进行运算,但是包装类型的优点在于能表达null值,每一个包装类型的对象创建的时候默认值都是null类型的.而基本类型是不可以表达null的,它们的默认值是0.为什么要表达null值呢.因为SQL中.所有类型的数据,默认值都是 null的。
当进入insert的时候,没有复值的属性,默认值就是null,所以说JAVA的包装类型和数据库之间的对应关系更直接.这里建议Hibernate的OID设置为包装类型,其他的属性就根据业务需要和个人习惯来定吧.
Hibernate在初始化阶段会根据映射文件的信息,为所有的Hibernate持久化类预定义insert语句,update语句where ID,delete语句where ID,select语句where ID,这里所说的语句就是标准的SQL增,删,改,查.语句,参数用?代表JDBC PreparedStatement中的参数,这里就不举例了.这些SQL语句都存放在SessionFactory的缓存中,当执行Session的 save(),update(),delete(),load()方法时,将会从SessionFactory的缓存中读取这些预定义的SQL语句,在把具体的参数值绑定到SQL语句中,这就是Hibernate的基本原理.在默认的情况下这些语句表达的是所有的字段.当然Hibernate还允许我们在映射文件里控制insert和update语句的内容。