轉自:https://blog.csdn.net/lxf512666/article/details/52820368
hql是面向對象查詢,格式:from + 類名 + 類對象 + where + 對象的屬性
sql是面向數據庫表查詢,格式:from + 表名 + where + 表中字段
在hibernate中使用原生sql查詢
例如:
public User login(User user) throws Exception { String sql = "select id,name,password,phone,address,email,regDate" + " from user as u where u.name = ? and u.password = ?"; Session session = sessionFactory.openSession(); SQLQuery sqlQuery = session.createSQLQuery(sql); sqlQuery.setString(0, user.getName()); sqlQuery.setString(1, user.getPassword()); sqlQuery.addEntity(User.class); Object obj = sqlQuery.uniqueResult(); session.close(); if (obj == null) return null; return (User) obj; }
在hibernate中使用hql查詢
例如:
public void modifyUserById(User user) { Session session = HibernateSessionFactory.getSession(); Transaction transaction = session.beginTransaction(); String hql = "update User as u set u.userName = ? ,u.passWord = ? ,u.sex = ? where u.id = ? "; Query query = session.createQuery(hql); query.setCacheable(false); query.setString(0, user.getUserName()); query.setString(1, user.getPassWord()); query.setString(2, user.getSex()); query.setString(3, user.getId()); System.out.println("執行了啊" + user.getUserName() + user.getId()); query.executeUpdate(); transaction.commit(); session.flush(); session.close(); }
注意:在hibernate中占位符“?”填充參數下表從 0開始。
JDBC填充時占位符從1開始。
hibernate中給參數起別名方法填充
List users = session.createQuery(“select u.id, u.name
from User u where u.name
like :myname and u.id=:myid”).setParameter(“myname”, “%張%”).setParameter(“myid”, 1) .list();
定義命名參數固定格式: :+參數名稱(即:myid ),賦值時,直接寫參數名即可: setParameter(“myid”, 1)