Hibernate基础知识

2023-12-25 16:07:01 浏览数 (3)

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

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

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

代码语言:text复制
   <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&amp;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编写访问数据库的代码

代码语言:text复制
    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 人点赞