一. 實體類的編寫規則
1.實體類里面的屬性都是私有的
2. 私有屬性使用公開的set和get方法操作
3.要求實體類有屬性作為唯一值
4.實體類屬性建議不使用基本數據類型,使用基本數據類型對應的包裝類
二. Hibernate主鍵生成策略 : 1. native (主要使用的) 2. uuid 3. 等等
<hibernate-mapping>
<class name="com.company.User" table="user">
<id name="uid" column="did">
<!--設置數據表id增長策略-->
/*
* class 屬性: 1. native 是主鍵自增長
2. uuid 是生成唯一的uuid值
*/
<generator class="native"></generator>
</id>
</class>
</hibernate-mapping>
注: 使用native值時, 實體類中的uid屬性是 int 型
使用uuid時, 實體類中的uid屬性必須是String型
三.實體類操作
- 添加操作: 調用session里面的save方法實現;
public void AddTest(){
SessionFactory sessionFactory =null;
Session session = null;
Transaction tx = null;
try {
// 加載配置文件
Configuration cfg = new Configuration();
cfg.configure();
// 創建SessionFactory對象
sessionFactory = cfg.buildSessionFactory();
// 創建Session對象
session = sessionFactory.openSession();
tx = session.beginTransaction(); //開啟事務
// 添加操作
User user = new User();
user.setUsername("xiaoMing");
user.setPassword("123456");
user.setAddress("塔上小學");
session.save(user); //添加數據的方法
tx.commit(); // 關閉事務
}catch (Exception e){
//出現異常的話,做回滾操作
tx.rollback();
}finally {
session.close();
sessionFactory.close();
}
}
- 根據id做查詢操作: 調用session的get方法;
public void SearchTest(){
SessionFactory sessionFactory =null;
Session session = null;
Transaction tx = null;
try {
Configuration cfg = new Configuration();
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction(); //開啟事務
/**
* 查詢操作
*
* 使用get方法做查詢操作: 參數1: 實體類的Class 參數2: id值
*/
session.get(User.class,1);
tx.commit();
session.close();
sessionFactory.close();
}catch (Exception e){
//出現異常的話,做回滾操作
tx.rollback();
}finally {
session.close();
sessionFactory.close();
}
}
3.修改操作: 先查詢,再修改值;
public void UpdateTest(){
SessionFactory sessionFactory =null;
Session session = null;
Transaction tx = null;
try {
Configuration cfg = new Configuration();
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction(); //開啟事務
/**
* 修改操作
*
* 使用update方法做查詢操作
*/
User user = session.get(User.class,1); //查詢
user.setPassword("xiaoHong"); //使用set方法修改
session.update(user); // 更新數據
tx.commit();
session.close();
sessionFactory.close();
}catch (Exception e){
//出現異常的話,做回滾操作
tx.rollback();
}finally {
session.close();
sessionFactory.close();
}
}
- 刪除操作: 先查詢再刪除
public void DeleteTest(){
SessionFactory sessionFactory =null;
Session session = null;
Transaction tx = null;
try {
Configuration cfg = new Configuration();
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction(); //開啟事務
/**
* 修改操作
*
* 使用update方法做查詢操作
*/
User user = session.get(User.class,1); //查詢
session.delete(user); // 更新數據
tx.commit();
session.close();
sessionFactory.close();
}catch (Exception e){
//出現異常的話,做回滾操作
tx.rollback();
}finally {
session.close();
sessionFactory.close();
}
}
四.實體類對象狀態
1. 瞬時態: 對象里面沒有id值,對象與session沒有關聯
2.持久態: 對象里面有id值,對象與session關聯
3.托管態: 對象有id值,對象與session 沒有關聯
五. Hibernate的API使用
- Query 對象
1.使用query對象,不需要寫sql語句,但是寫hql語句
2.區別: 使用sql操作表和表字段,使用hql操作實體類和屬性
3.查詢所有hql語句: from 實體類名稱
實例:
//創建Query對象
Query query = session.createQuery("from User");
//調用Query對象里面的方法得到結果
List<User> list = query.list();
//遍歷Listfor (User user :
list) {
System.out.println(user);
}
2.Criteria 對象
1. 使用這個對象進行查詢操作時不需要寫語句,直接調方法實現
2.實現過程: (1)創建criteria 對象
(2) 調用對象里面的方法得到結果
實例:
//創建Criteria對象
Criteria criteria = session.createCriteria(User.class); (此方法官方已廢棄)
List<User> list = criteria.list();
3.SQLQuery 對象
1.使用SQLQuery對象時,調用底層sql實現
實例:
//創建SQLQuery 對象(此對象方法都已經廢棄)
SQLQuery sqlQuery = session.createSQLQuery("select * from t_user");
sqlQuery.addEntity(User.class);
List<User> list = sqlQuery.list();