Hibernate3

Hibernate的註解開發:
 必要註解:
  @Entity  描述一個實體類
  @Table(name="表名",catalog="數據庫名") 描述類與表的對應,name可以省略,那麼表名和類名相同,catalog可以省   略,那麼會去核心配置文件查找
  @ID 聲明主鍵
  @GenerateValue  聲明主鍵生成策略 默認native
  @GenerateValue(strategy=GenerationType.IDENTITY) //主鍵生成策略是identity,可設置auto,sequence
  @Column(name="列名",length= ,nullable=true) 屬性對應列註解,可以省略,會自動生成,名稱爲屬性名,類型對象屬   性類型,默認長度255
  @Temoral(TemoralType.TIMESTAMP) 定義日期類型,data:年月日,time:時分秒,timestamp:年月日時分秒
 定義好註解後,要在覈心配置文件配置:
  <mapping class="類的全路徑"/>
  如何設置UUID類型主鍵生成策略:
   @ID
   @GenericGenerator(name="定義名稱", strategy="uuid")
   @GenerateValue(generator="定義名稱")
  如何這隻屬性不在表中映射:
   @Transient
 上述註解可以定義在其對於的getXXX方法上[***]

 一對多(多對一):
  一:
   @OneToMany(targetEntity=多.class,mappedBy="多中一的引用名") -->mappedBy:直接外鍵有對方維護
  多:
   @ManyToOner(targetEntity=一.class)
   @JoinColume(name="外鍵名稱")
  註解級聯操作:
   JPA註解:
    @OneToMany(targetEntity=多.class,mappedBy="多中一的引用名",cascade=CascadeType.ALL)
   Hibernate註解:
    @Cascade(CascadeType.SAVE_UPDATE)
   孤兒註解:
    OneToMany(targetEntity=多.class,mappedBy="多中一的引用名",orphanRemoval=true)


 多對多:
  不維護外鍵的一方:
   @ManyToMany(targetEntity=另.class,mappedBy="另中該引用名稱")
  維護外鍵的一方:
   @ManyToMany(targetEntity=另.class)
   @JoinTable(name="中間表的名稱", joinColumes={@JoinCulomn(name="維護外鍵的表的主鍵的中間名的名    稱",referencedColumnName="維護外鍵表的主鍵名稱")},
    inverseJoinColumn={@JoinColum=(name="不維護外鍵的表的主鍵在中間表的名        稱",referencedColumnName="不維護外鍵表的主鍵名稱")}
     -->referencedColumnName可以省略
 多對多謹慎操作級聯刪除.


 一對一:
  外鍵映射:【****】
  不維護外鍵的一方:
   @OneToOne(targetEntity=另.class,mappedBy="另中該的引用名稱")
  維護主鍵的一方:
   @OneToOne(targetEntity=另.class)
   @JoinColum(name=外鍵名稱")
  主鍵映射:
   設置主鍵的一方:
    @OneToOne
    @PrimaryKeyColumn
   參考主鍵的一方:
    @OneToOne
    @PrimaryKeyColumn
  主鍵設置:
   @ID
   @GenericGenerator(name="自定義名稱",strategy="foreign",parameters={
   @Paramter(name="property",value="另在該的引用名稱")})
   @GenerateValue(generator="自定義名稱")




Hibernate的檢索方式:
 1、導航對象圖檢索,根據已加載的對象導航到其他對象,鏈式編程
 2、OID檢索,根據對象的OID檢索
 3、HQL檢索【*****】
 4、QBC檢索,使用QBC(Query by Criteria)APL來檢索,該API封裝了基於字符串形式的查詢語句,提供的更加的面向對象的查  詢接口
 5、本地SQL檢索

HQL:
 HQL基本步驟:
  1、獲得Session
  2、編寫HQL
  3、通過session.createQuery(hql)創建一個Query對象
  4、爲Query對象設置參數
  5、執行list()或uniqueResult()
 HQL:完整語句
  select/update/delete...from...where...group by...having...order by...asc/desc
 基本檢索:
  session.createQuery("from 類名").list(); -->關鍵字不區分大小寫,類名區分大小寫
 排序檢索:
  session.createQuery("from 類名 order by 根據排序屬性名 desc/asc").list();
 條件檢索:
  Query query = session.createQuery("from 類名 where 條件");
  query.setParameter(位置/名稱,參數);
  query.list();
 分頁檢索:
  Query query = session.createQuery("from 類名");
  query.setFirstResult(起始值);
  query.setMaxResults(每頁顯示記錄數);
  query.list();
 聚合分組檢索:
  session.createQuery("select count(*) from 類名").list();

  session.createQuery("select 類名.屬性名.屬性,聚合函數 from 類名 group by 類名.屬性名.屬性").list();
 投影檢索:
  session.createQuery("select 屬性名 from 類名").list();
  提供所有查詢的屬性的有參構造
  session.createQuery("select new 類名(屬性名,屬性名,...) from 類名").list();
 命名檢索:
  在指定類上加註解:
  @NamedQuery(name="命名",query="HQL語句")
  查詢:
  Query query = session.getNamedQuery(命名");
  如果HQL語句中引用了類型:
  query.setEntity("引用的名稱",引用對象)
  query.list();

QBC:
 QBC基本步驟:
  1、獲得Session
  2、通過session.createCriteria()獲得Criteria對象
  3、通過Criterion設置條件,通過Restrictions類提供靜態方法
  4、通過Criteria的add方法添加查詢條件
  5、調用list()或uniqueResult()
 基本檢索:
  Criteria criteria = session.createCriteria(類名.class);
  criteria.list();
 排序檢索:
  Criteria criteria = session.createCriteria(類.class);
  criteria.addOrder(org.hibernate.criterion.Order.asc/desc("排序條件"));
  criteria.list();
 條件檢索:
  Criteria criteria = session.createCriteria(類.class);
  Criterion criterion = Restrictions.like/lt/gt/le/ge/eq("屬性名","條件");
  如果只有一個條件:
   criteria.add(criterion);
  如果有多個條件:
   LogicalExpression logical = Restrictions.and(criterion1,criterion2,...);
   criteria.add(logical);
   criteria.list();
 分頁檢索:
  Criteria criteria = session.createCriteria(類.class);
  criteria.setFirstResult(起始值);
  criteria.setMaxResults(每頁顯示記錄數);
  criteria.list();
 分組聚合檢索:
  Criteria criteria = session.createCriteria(類.class);
  Object count = criteria.setProjection(Prodections.rowCount()).uniqueResult();


 criteria.setProjection(Projections.projectionList().add(Projections.sum("")).add(Projections.groupProperty("")));
  criteria.list();
 離線條件檢索:
  一般會在web層獲得DetacheCriteria對象
  DetachedCriteria detache = DetachedCriteria.forClass(類.class);
  detahce.add(Restrictions.like/eq/..("屬性名","條件");
  在DAO層
  Criteria criteria = detache.getExecutableCriteria(session);
  criteria.list();

本地SQL:
 命名檢索:
 在指定類上添加註解:
 @SqlResultSetMapping(name = "自定義mapping", entities = { @EntityResult(entityClass = 指定類.class, fields = {
 @FieldResult(name = "屬性名", column = "字段名"), @FieldResult(name = "屬性名", column = "字段名") }) })
 @NamedNativeQuery(name=自定義名稱",query="SQL",resultSetMapping="自定義mapping")
 session.getNamedQuery("自定義名稱").list();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章