Hibernate註解

使用註解的配置:




-------------------------------------------------------------------------
使用基本註解保存無關聯實體:


public class Test_1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.創建session
Session session = HibernateSessionFactory.getSession();
// 2.創建事務
Transaction tx = session.beginTransaction();
// 3.進行操作
//使用基本註解保存無關聯實體
Author author=new Author("19號","123");
try {
session.save(author);
tx.commit();
} catch (Exception e) {
// TODO: handle exception
tx.rollback();
}
// 4.關閉session
session.close();
}

}

使用註解方式保存關聯實體:


public class Test_2 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.創建session
Session session = HibernateSessionFactory.getSession();
// 2.創建事務
Transaction tx = session.beginTransaction();
// 3.進行操作
// 使用註解方式保存關聯實體
Author author = new Author("龜仙人", "123");
Blog blog = new Blog("好色");
blog.setAuthor(author);
try {
session.save(blog);
tx.commit();
} catch (Exception e) {
// TODO: handle exception
tx.rollback();
}
// 4.關閉session
session.close();

}

}

註解的方式是把配置文件寫在實體裏了,其它基本類似


-------------------------------------------------------------------------------------------------

@Id——聲明瞭該實體的標識屬性,該屬性對應表中的主鍵
@Id
private Long id;

@Column——聲明瞭屬性到列的映射
@Column(name="addr")
private String address
name 可選,列名(默認值是屬性名)
unique 可選,是否在該列上設置唯一約束(默認值false)
nullable 可選,是否設置該列的值可以爲空(默認值false)
insertable 可選,該列是否作爲生成的insert語句中的一個列(默認值true)
updatable 可選,該列是否作爲生成的update語句中的一個列(默認值true)
@GeneratedValue——聲明瞭主鍵的生成策略,該註解的strategy屬性指定了主鍵生成策略,默認值爲GenerationType.AUTO
GenerationType.AUTO ,自動選擇最適合底層數據庫的主鍵生成策略
GenerationType.IDENTITY, 對於MySQL、SQL Server這樣的數據庫選擇自增長的註解生成策略
GenerationType.SEQUENCE,對於Oracle這樣的數據庫,選擇使用基於sequence的主鍵生成策略,它與@SequenceGenerator共同使用

@ManyToOne屬性說明

屬 性 是否必需 說 明
cascade 指定對關聯實體所採用的級聯策略,該級聯策略支持如下五個屬性值:
CascadeType.ALL:將所有的持久化操作都級聯到關聯實體
CascadeType.PERSIST:將persist操作級聯到關聯實體
CascadeType.MERGE:將merge操作級聯到關聯實體
CascadeType.REFRESH:將refresh操作級聯到關聯實體
CascadeType.REMOVE:將remove操作級聯到關聯實體
fetch 指定抓取關聯實體時的抓取策略,該屬性支持以下兩個屬性值:
FetchType.EAGER:抓取實體時,立即抓取關聯實體,這是默認值
FetchType.LAZY:抓取實體時,延遲抓取關聯實體,等到真正用到關聯實體時纔去抓取
targetEntity 該屬性指定關聯實體的類名。在默認情況下,系統將通過反射來判斷關聯實體的類名。


@JoinColumn屬性說明

屬 性 是否必需 說 明
name 指定該外鍵列的列名
inserttable 指定該列是否包含在insert語句的列表中,默認值爲true
updatetable 指定該列是否包含在update語句的列表中,默認值爲true
nulltable 指定該列是否允許爲null,默認值爲true
unique 指定是否爲該列增加唯一約束


@JoinTable屬性說明
屬 性 是否必需 說 明
name 指定連接表的表名
joinColumns 該屬性可以接受多個@JoinColumn,用於配置連接表中外鍵列的列信息,這些外鍵列參照當前實體的主鍵列
inverseJoinColumns 該屬性可以接受多個@JoinColumn,用於配置連接表中外鍵列的列信息,這些外鍵列參照當前實體的關聯實體的主鍵列

--------------------------------------------------------------------------------


HQL支持的運算符
運算類型 HQL運算符 含 義
比較運算 = 等於
<> 不等於
> 大於
>= 大於等於
< 小於
<= 小於等於
is null 爲空
is not null 不爲空
範圍運算 in 等於列表中的某一個值
not in 不等於列表中的任意一個值
between 值1 and 值2 大於等於值1且小於等於值2
not between值1 and 值2 小於值1或大於值2
字符串模式匹配 like 字符串模式匹配
邏輯運算 and 邏輯與
or 邏輯或
not 邏輯非


HQL查詢:
public class Test_3 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.創建session
Session session = HibernateSessionFactory.getSession();
// 2.創建事務
Transaction tx = session.beginTransaction();
// 3.進行操作
//HQL查詢
String hql=" from Blog b where b.id=:id ";
Query query=session.createQuery(hql);
query.setInteger("id", 1);
List<Blog> list= query.list();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getTitle());
}
// 4.關閉session
session.close();
}

}


HQL刪除:
public class Test_4 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.創建session
Session session = HibernateSessionFactory.getSession();
// 2.創建事務
Transaction tx = session.beginTransaction();
// 3.進行操作
//HQL刪除
String hql=" delete Blog b where b.id=42 ";
Query query=session.createQuery(hql);
query.executeUpdate();
tx.commit();
System.out.println("刪除完成");
// 4.關閉session
session.close();
}

}

HQL更新:
public class Test_5 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.創建session
Session session = HibernateSessionFactory.getSession();
// 2.創建事務
Transaction tx = session.beginTransaction();
// 3.進行操作
//HQL更新
String hql=" update Blog b set b.type='動漫' where b.title='美食論' ";
Query query=session.createQuery(hql);
query.executeUpdate();
tx.commit();
System.out.println("更新完成");
// 4.關閉session
session.close();

}

}

HQL排序:
public class Test_6 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.創建session
Session session = HibernateSessionFactory.getSession();
// 2.創建事務
Transaction tx = session.beginTransaction();
// 3.進行操作
//HQL排序
String hql=" from Blog b order by author_id";
Query query=session.createQuery(hql);
List<Blog> list= query.list();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getTitle());
};
// 4.關閉session
session.close();

}

}


HQL分組:

public class Test_7 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.創建session
Session session = HibernateSessionFactory.getSession();
// 2.創建事務
Transaction tx = session.beginTransaction();
// 3.進行操作
//HQL分組
String hql="select type,count(*) from Blog b group by b.type";
Query query=session.createQuery(hql);
List<Object[]> list= query.list();
for (int i = 0; i < list.size(); i++) {
Object[] obj=list.get(i);
System.out.println("類型:"+obj[0]);
System.out.println("數量:"+obj[1]);
};
// 4.關閉session
session.close();

}

}


public class Test_8 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.創建session
Session session = HibernateSessionFactory.getSession();
// 2.創建事務
Transaction tx = session.beginTransaction();
// 3.進行操作
//HQL分組 查詢作者的博客數量
String hql="select author,count(*) from Blog b group by b.author";
Query query=session.createQuery(hql);
List<Object[]> list= query.list();
for (int i = 0; i < list.size(); i++) {
Object[] obj=list.get(i);
System.out.println("作者:"+((Author)obj[0]).getUsername());
System.out.println("數量:"+obj[1]);
};
// 4.關閉session
session.close();

}

}
分頁:
public class Test_9 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.創建session
Session session = HibernateSessionFactory.getSession();
// 2.創建事務
Transaction tx = session.beginTransaction();
// 3.進行操作
// HQL分頁
// int page=1; //當前頁數
int count = 3; // 數量
String hql = " from Blog ";
Query query = session.createQuery(hql);
for (int page = 1; page <= 4; page++) {
System.out.println("第" + page + "頁:");
List<Blog> list = query.setFirstResult((page - 1) * count)
.setMaxResults(count).list();
for (int i = 0; i < list.size(); i++) {
System.out.println("作者:" + list.get(i).getTitle());
};
}
// 4.關閉session
session.close();
}

}

聯合查詢:

public class Test_1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.創建session
Session session = HibernateSessionFactory.getSession();
// 2.創建事務
Transaction tx = session.beginTransaction();
// 3.進行操作
//HQL聯合查詢
String hql=" from Author a inner join a.blogs";
Query query=session.createQuery(hql);
List<Object[]> obj= query.list();
for (int i = 0; i < obj.size(); i++) {
System.out.print("作者:"+((Author)obj.get(i)[0]).getUsername());
System.out.print("博客:"+((Blog)obj.get(i)[1]).getTitle()+"\n");
};
// 4.關閉session
session.close();
}

}

子查詢:

public class Test_2 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.創建session
Session session = HibernateSessionFactory.getSession();
// 2.創建事務
Transaction tx = session.beginTransaction();
// 3.進行操作
//HQL子查詢
String hql=" from Author a where (select count(*) from a.blogs )=2 ";
Query query=session.createQuery(hql);
List<Author> obj= query.list();
for (int i = 0; i < obj.size(); i++) {
System.out.println("作者:"+obj.get(i).getUsername());
};
// 4.關閉session
session.close();

}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章