從上一篇中已經大體介紹了Hibernate而且有了一個快速入門案例的基礎了,….本博文主要講解Hibernate APIphp
咱們看看快速入門案例的代碼用到了什麼對象吧,而後一個一個講解java
public static void main(String[] args) { //建立對象 User user = new User(); user.setPassword("123"); user.setCellphone("122222"); user.setUsername("nihao"); //獲取加載配置管理類 Configuration configuration = new Configuration(); //不給參數就默認加載hibernate.cfg.xml文件, configuration.configure(); //建立Session工廠對象 SessionFactory factory = configuration.buildSessionFactory(); //獲得Session對象 Session session = factory.openSession(); //使用Hibernate操做數據庫,都要開啓事務,獲得事務對象 Transaction transaction = session.getTransaction(); //開啓事務 transaction.begin(); //把對象添加到數據庫中 session.save(user); //提交事務 transaction.commit(); //關閉Session session.close(); }
配置管理類:主要管理配置文件的一個類sql
它擁有一個子類AnnotationConfiguration,也就是說:咱們可使用註解來代替XML配置文件來配置相對應的信息數據庫
configure()方法用於加載配置文件markdown
buildSessionFactory()用於建立Session工廠session
SessionFactory–>Session的工廠,也能夠說表明了hibernate.cfg.xml這個文件…hibernate.cfg.xml的就有<session-factory>
這麼一個節點ui
建立一個Session對象spa
建立Session對象或取出Session對象hibernate
Session是Hibernate最重要的對象,Session維護了一個鏈接(Connection),只要使用Hibernate操做數據庫,都須要用到Session對象code
一般咱們在DAO層中都會有如下的方法,Session也爲咱們提供了對應的方法來實現!
public interface IEmployeeDao { void save(Employee emp); void update(Employee emp); Employee findById(Serializable id); List<Employee> getAll(); List<Employee> getAll(String employeeName); List<Employee> getAll(int index, int count); void delete(Serializable id); }
咱們在快速入門中使用到了save(Objcet o)方法,調用了這個方法就把對象保存在數據庫之中了。Session對象還提供着其餘的方法來進行對數據庫的更新
咱們來使用一下update()方法吧….既然是更新操做了,那麼確定須要設置主鍵的,不設置主鍵,數據庫怎麼知道你要更新什麼。將id爲1的記錄修改爲以下:
user.setId(1); user.setPassword("qwer"); user.setCellphone("1111"); user.setUsername("zhongfucheng");
經過主鍵來查詢數據庫的記錄,從而返回一個JavaBean對象
User重寫toString()來看一下效果:
User user1 = (User) session.get(User.class, 1); System.out.println(user1);
HQL:hibernate query language 即hibernate提供的面向對象的查詢語言
SQL:Struct query language 結構化查詢語言
HQL是面向對象的查詢語言,能夠用來查詢所有的數據!
Query query = session.createQuery("FROM User"); List list = query.list(); System.out.println(list);
固然啦,它也能夠傳遞參數進去查詢
Query query = session.createQuery("FROM User WHERE id=?"); //這裏的?號是從0開始的,並不像JDBC從1開始的! query.setParameter(0, user.getId()); List list = query.list(); System.out.println(list);
QBC查詢: query by criteria 徹底面向對象的查詢
從上面的HQL查詢,咱們就能夠發現:HQL查詢是須要SQL的基礎的,由於仍是要寫少部分的SQL代碼….QBC查詢就是徹底的面向對象查詢…可是呢,咱們用得比較少
咱們來看一下怎麼使用吧:
//建立關於user對象的criteria對象 Criteria criteria = session.createCriteria(User.class); //添加條件 criteria.add(Restrictions.eq("id", 1)); //查詢所有數據 List list = criteria.list(); System.out.println(list);
有的時候,若是SQL是很是複雜的,咱們不能靠HQL查詢來實現功能的話,咱們就須要使用原生的SQL來進行復雜查詢了!
可是呢,它有一個缺陷:它是不能跨平臺的…所以咱們在主配置文件中已經配置了數據庫的「方言「了。
咱們來簡單使用一下把:
//將全部的記錄封裝成User對象存進List集合中 SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM user").addEntity(User.class); List list = sqlQuery.list(); System.out.println(list);
開啓事務,返回的是一個事務對象….Hibernate規定全部的數據庫操做都必須在事務環境下進行,不然報錯!