SQL和HQL占位符问题

来源:互联网 发布:业务数据分析师要求 编辑:程序博客网 时间:2024/06/06 12:21
  • 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)
1 0
原创粉丝点击