Hibernate自学

一、Hibernate

  是数据库访问层的框架,解决了数据库数据与对象的映射问题,是针对数据库提出的面相对象的解决方案。

二、主配置文件

  hibernate.cfg.xml:

<hibernate-configuration>
    <session-factory>----配置数据库连接参数
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.password">089024033</property>
        <property name="connection.url">jdbc:mysql:///dbfantasy?useUnicode=true&amp;characterEcoding=utf8</property>
        <property name="connection.username">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        -------hibernate框架参数
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
     <property name="hibernate.Current_session_content_class">thread</property>//  jta全局事务,getCurrentSession()时使用
        -------映射关系文件
        <mapping resource="entity/Person.hbm.xml"/>
        <mapping resource="entity/Department.hbm.xml"/>
        <mapping resource="entity/Emp.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

 三、映射关系文件

  创建实体类后配置该实体类的映射关系文件

<hibernate-mapping package="entity">
  ----------类与表对应
<class name="Person" table="person" lazy="false">
    -----------主键生成方式
<id name="id" type="integer" column="id"> <generator class="native"></generator> </id>
    -----------类属性对应到表字段 <property name="name" type="java.lang.String" >   <column name="NAME" length="30"/>     </property>
<property name="birth" type="date" column="BIRTH"></property>

    -----------一对多关联 <set name="cliampltnps" inverse="true">  <key>         <column name="AR_ID" not-null="true"> -------外键列名       </key>       <one-to-many class="xx.Cliampltnps" />
    </set>
    -------------多对一关联
    <many-to-one name="ar" class="xx.Ar" fetch="join/select" > 
      <column name="AR_ID" />
    </many-to-one>
</class> 
</hibernate-mapping>

四、获取Session执行hql操作

     Configuration con = new Configuration().configure();
        ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(con.getProperties()).buildServiceRegistry();
        SessionFactory sessionFactory = con.buildSessionFactory(sr);
        Session session = sessionFactory.openSession();// 每次获取的都是新的session,要手动关闭
     Session session = sessionFactory.getCurrentSession();// 每次获取的都是同一个session,commit或rollback后自动关闭,绑定在线程上的,需在cfg.xml中加配置
     // 执行增删改查
     session.save(obj)/.update(obj)/.delete(obj);
     session.get(E.class,pk);
     // 当session开启事务时,相当于setAutoCommit(false),操作会保存在内存中,当session关闭时才写入数据库
     Transcation tx = session.beginTranscation();
     ...
     tx.commit();
     session.close();

 五、HQL

  hibernate query language,对类名和类的属性名大小写敏感。

//使用hql查询时返回实体类:
List<Emp> list = session.createQuery(sql).list();  Emp emp = it.hext();  

//使用sql查询时需指定每一个返回字段:
List<Object[]> list = session.createSALQuery(sql).addScalar("name",Hibernate.String)...  .list();
//返回的每个元素都是字符串组成的数组;  
Object[] obj = it.next();

//分页查询:hibernate行数从0开始,设置起始页和条数
query.setFirstResult(FROM);    query.setMaxResults(PAGESIZES);

 

  

posted @ 2017-06-19 17:14  一叶依然  Views(215)  Comments(0)    收藏  举报