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();
必要註解:
@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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.