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)
作者:习惯沉淀
如果文中有误或对本文有不同的见解,欢迎在评论区留言。
如果觉得文章对你有帮助,请点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
扫码关注一线码农的学习见闻与思考。
回复"大数据","微服务","架构师","面试总结",获取更多学习资源!