SQL和HQL占位符问题

  • 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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值