這篇文章用於總結hibernate操作數據庫的各種方法
一、query方式
1、hibernate使用原生態的sql語句執行數據庫查詢
有些時候有些開發人員總覺得用hql語句不踏實,程序出現了錯誤,就猜測因為不是原生態的sql語句,數據庫不支持,因此情願選擇回到jdbc時代。這樣既耗時耗力,又破壞面向對象的編程。其實,hibernate已經考慮到這個問題,hibernate可以執行原生態的sql語句,正對每種數據庫,你可以寫對應的sql語句,然后用createSQLQuery(sql)即可。
/** * 本地sql的檢索方式,使用原生態的sql語句檢索 * */ Session session = this.getSession(); String sql = "select * from course where cid=:id"; Query query = session.createSQLQuery(sql);// 本地SQL檢索方式 query.setInteger("id", c_id); query.list();// 返回持久化的list
2、query執行查詢操作(基本方式,字符串連接方式生成hql語句)
query執行查詢操作,可以返回唯一對象或者是對象列表
(1)query返回對象列表
/** * hql的檢索方式,執行查詢數據庫操作,返回對象的列表 * 采用hql語句連接方式 */ Session session = this.getSession(); String hql = "select * from CourseDO where CId="+id+""; Query query = session.createQuery(hql);// 本地SQL檢索方式 query.list();// 返回持久化的list
(2)query返回唯一對象
/** * hql的檢索方式,執行查詢數據庫操作,返回唯一對象 * 采用hql語句連接方式 */ Session session = this.getSession(); String hql = "select * from CourseDO where CId="+id+""; Query query = session.createQuery(hql);// 本地SQL檢索方式 query.uniqueResult();// 返回持久化的list
3、query執行查詢操作
hql采用參數方式,其中參數綁定方式分為兩種:按照名字綁定,按照位置綁定
(1)hql參數綁定采用按照名字綁定
/** * hql的檢索方式,執行查詢數據庫操作,返回對象的列表 * * 參數綁定的形式分為按名字綁定,按位置綁定 此處是按照名字綁定 */ Session session = this.getSession(); String hql = "select * from CourseDO where CId=:id"; Query query = session.createQuery(hql);// 本地SQL檢索方式 query.setInteger("id", c_id);// 名字綁定參數 query.list();// 返回持久化對象的list列表
(2)hql參數綁定采用按照位置綁定
/** * hql的檢索方式,參數綁定的形式分為按名字綁定,按位置綁定 此處是按照位置綁定 */ String hql = "from CourseDO where CId=?"; Session session = this.getSession(); Query query = session.createQuery(hql); query.setParameter(0, c_id);// 位置綁定方式 query.uniqueResult();// 檢索單個對象,返回唯一值
4、query執行更新,刪除操作
利用query的executeUpdate()方法實現
/** * query執行更新,刪除等非查詢語句 * */ String hql = "delete from CourseDO where CId=? and Time=?"; Session session = this.getSession(); Query query = session.createQuery(hql); query.setParameter(0, c_id);// 位置綁定方式 query.setDate(1, new Date());// 位置綁定方式,設置為Date類型 query.executeUpdate();// 執行delete,update和insert into 語句
二、hibernate模版方法
利用hibernate模版方法執行hql語句非常簡單,但是有時候不是那么方便,可以自己選擇使用。
1、hibernateTemplate查詢數據庫
/** * 利用hibernate模版方法進行查詢,綁定參數形式 * */ String hql = "from CourseDO where CId=? and Date=?"; List<CourseDO> courseDOs = getHibernateTemplate().find(hql, c_id, new Date());
2、hibernateTemplate更新數據
/** * 利用hibernate模版方法進行更新,綁定參數形式 * */ List<CourseDO> courseDOs = getHibernateTemplate().update(courseDO);
3、hibernateTemplate插入數據
/** * 利用hibernate模版方法進行插入,綁定參數形式 * */ List<CourseDO> courseDOs = getHibernateTemplate().save(courseDO);
4、hibernateTemplate刪除數據
/** * 利用hibernate模版方法進行刪除,綁定參數形式 * */ List<CourseDO> courseDOs = getHibernateTemplate().delete(courseDO);