1. 程式人生 > >Hibernate5中的3中查詢語句(HQL、SQL、QBC)

Hibernate5中的3中查詢語句(HQL、SQL、QBC)

    User為類名,id userName,password為屬性;
    t_user為表名,t_id,t_username,t_password為表字段名
1、HQL語句:Hibernate的語句

    String hql = "form User where id=1 and userName=admin";
    //當User取了別名的情況語句中也可以用表的欄位名比如:
    String hql = "form User as uwhere t_id=1 and t_username=admin";
    //但是不能使用別名+表字段名,如:
    錯誤的寫法:String hql = "form User as u where u.t_id=1 and u.t_username=admin";
    List<User> list = session.createQuery(hql).list();

     HQL語句動態繫結引數:

  //查詢id大於5的所有使用者
    String hql ="form user where id>?"; 
    List<User> list = session.createQuery(hql).setInteger(0,5).list(); 
   //取別名,別名以":"開頭
    String hql ="form user where id>:myId";
    List <User> list = session.createQuery(hql).setInteger(“myId”,5).list(); 

    HQL分頁:

    firstResulr(0)代表起始行,MaxResult(3)代表一頁多少條資料

List<User> list = session.createQuery("from User").setFirstResult(0).setMaxResults(3).list();

   HQL投影查詢,查詢一個類的部分引數。

    User(id,userName,password,createTime),只查詢userName、password屬性的值,

    必須有一個只包含User(String userName, String password)的構造器

List<User> users = session.createQuery("select new User(userName,password) from User");

     (N+1問題)HQL的Iterate()(SQL不支援該方法)和list()方法的區別:

     語句:Select * from User

     iterate()方法 第一次會先查詢Select id from User把id查出來,在一個一個去查詢select * from User where id=?(先去session中檢視有沒有快取否則去資料庫查).相當於執行了select * from user where id=? n次 加上select id from User n+1次。

    list每次都會去資料庫查詢(只執行一次sql一次性全查出來);

    當需要多次查詢的時候 先使用list()查詢,此時所有資料放入session快取,之後用iterate()方法查詢(會去資料庫中查詢),可以提高效率。

2、SQL語句:原生的Sql語句SQL

//原生的sql語句
  String sql ="select t_id,t_username,t_password from t_user";
  List <User> list = session.createSQLQuery(sql).addEntity(User.class).list(); 


3、QBC語句Criteria標準查詢:純面向物件的,不需要寫sql語句。與查詢介面無關

List<User> list = session.createCriteria(User.class).list();