0
点赞
收藏
分享

微信扫一扫

Hibernate基础知识


Hibernate是对java领域的一款开源的ORM框架技术


Hibernate对JDBC进行了非常轻量级的对象封装



创建Hibernate的配置XML文件(固定格式)


<session-factory>



<property name="connection.uername">root</property>



<property name="connection.password">root</property>



<property name="connection.driver_class">com.mysql.jdbc.Driver</property>



<property name="connection.url">jdbc:mysql:///hibernate?useUnicode=true&characterEncoding=UTF-8</property>



<property name="dialect">org.hibernate.dialect.MySQLDialect</property>





<property name="show_sql">true</property>



<property name="format_sql">true</property>



<property name="hbm2ddl.auto">create|</property>




<mapping resource="Student.hbm.xml"/>



</session-factory>



同过Hibernate API编写访问数据库的代码

init(){



Configuration config=new Configuration().configure();//创建配置对象



SweviceRegistry serviceRegistry=new ServiceRegistryBuilder().applaySettings(config.getProperties()).buildServiceRegistry();//创建服务注册对象



SessionFactory sessionFactory=config.buildSessionFactory(serviceRegistry);//创建回话工厂对象



Session session=sessionFactory.openSession();//会话对象



transaction=session.beginTrasaction();//打开事务



}





destroy(){



transaction.commit();//提交事务



session.close();//关闭会话



sessionFactory.close();//关闭会话工厂




}








save() delete(S) update(S) get(Students.class,1) createQuery()



Session详解


如何获得session对象? 


1)openSession(session.close()手动关闭)


2)getCurrectSession(自动关闭)


注意: 如果使用getCurrectionSession需要在hibernate.cfg.xml文件中进行配置


  如果是本地事务(jdbc事务)


  <propertyname="hibernate.currect_session_context_class">thread</property>


  如果是全局事务(jta事务)


<propertyname="hibernate.currect_session_context_class">jta</property>






映射xml文件



<id>//充当主键功能



name="PropertyName"



type=""



column=""



length=""



<genterator class=""/>//主键生成策略 //assigned由java程序手工赋值



</id>







实体类中的某个属性属于用户自定义的类的对象


<property  name="sname"  type="java.util.String">



<column name="SNAME">



</property>



<component name="address" class="Address">



<property name="postcode" column="POSTCODE"></property>



<property name="phone" column="PHONES"></property>



<property name="address" column="ADDRESS"></property>



</component>



</component>


get与load的区别


在不考虑缓存的情况下,get方法会在调用以后返回一个持久化对象


load返回一个代理对象,在使用对象属性的时候才会发出sql语句


当查询的数据库中不存在时候,get返回null,load抛出异常


<!--配置单向的一对多关联关系-->



<set name="属性名称" table="对应数据库中表的名字">



<!--指定关联的外键列-->



<key coiumn="gid"></key>



<one-to-many class="com.imooc.entity.Student">



</set>





<!--配置多对一的关联关系-->



<many-to-one name="grade" class="com.imooc.entity.Grade" column="gid"> </many>





必须在XML中指定映射文件


<mapping  resource="com/imooc/entity/Grade.hbm.xml"/>













HibernateUtil工具类

package until;





import javax.imageio.spi.ServiceRegistry;





import org.hibernate.Session;




import org.hibernate.SessionFactory;




import org.hibernate.boot.registry.StandardServiceRegistry;




import org.hibernate.boot.registry.StandardServiceRegistryBuilder;




import org.hibernate.cfg.Configuration;






public class HibernateUtil {




private static SessionFactory sessionFactory;




private static Session session;




static{




Configuration config=new Configuration().configure();//创建配置对象




StandardServiceRegistryBuilder ssrb=newStandardServiceRegistryBuilder().applySettings(config.getProperties());




StandardServiceRegistry ssr=ssrb.build();




sessionFactory=config.buildSessionFactory(ssr);





}





//获得回话工厂对象




public static SessionFactory getSessionFacory(){




return sessionFactory;




}





//获得Session对象




public static Session getSession(){




return (Session) sessionFactory.openSession();




}





//关闭Session




public static void closeSession(Session session){




if(session!=null){




session.close();




}




}





}


 


需要在一中创建一个多的Map对象  Map<Student> students=new HashMap<Student>();



<!-- 配置一对多关联关系 -->




<set name="一对多中一中Map属性的名称" table="一对多中多类对应的表的名称">




<key column="一对多中一中的主键的column"></key>




<one-to-many class="com.imooc.entity.Student一对多中多类的全名"/>




</set>






<!-- 配置一对多关联关系 -->




<set name="students" table="student">




<key column="gid"></key>




<one-to-many class="com.imooc.entity.Student"/>




</set>




多对一中需要在多中创建一个多的对象   private Grade  grade;  (javabean原则) 


<!-- 配置多对一关联关系 -->




<many-to-one name="grade" class="com.imooc.entity.Grade" column="gid" cascade="all"></many-to-one>





<!-- 配置多对一关联关系 -->




<many-to-one name="多对一中一对象的属性的名称" class="一对象的类的全名" column="外键的列名" cascade="all"></many-to-one>



举报

相关推荐

0 条评论