sql和hql的區別


轉自: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) 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM