使用註解的配置:
-------------------------------------------------------------------------
使用基本註解保存無關聯實體:
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();
}
}