【ORM】【作业五】HQL检索(增删改查)
程序员文章站
2022-04-13 21:33:48
...
查询
前提准备:Ⅰ 继续利用之前搭建好的项目SSHDemo2(导完相应包,User.hbm.xml,hibernate.cfg.xml编写完毕)
Ⅱ User类
Ⅲ 数据库
1)在src下建立一个包:zfg.hql.test
2)在包下建立一个类:HQLtest1.java
如图:
3)数据库准备(使用其中的user表)
(1)查询代码
@Test
public void select() {
//获取Session,开启事务
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
//编写HQL
String hql = "from User as c where c.password='444'";
//创建Query对象
Query query = session.createQuery(hql);
//执行查询,获得结果
List<User> cs = query.list();
//遍历结果
for (User c : cs) {
System.out.println(c);
}
transaction.commit();
session.close();
}
执行结果:
其中出现了两个问题:Ⅰ 输出问题 ,输出的是地址(解决方法:重写User类中的toString方法即可)
Ⅱ 运行中产生的错误(已解决)
现在来解释一下这个错误:
错误展示:
详细文字:java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: user is not mapped [from user as c where c.password='444']
产生原因是这句代码出现了问题:String hql = "from user as c where c.password='444'";
通过查阅调试之后发现:hql语句中的user不是对应于数据库中的表名,而是JavaBean中对于的类User.java.故应该将第一个u改为大写U即可。
(2)add(HQL语句无法实现添加操作)
@Test
public void add() {
//获取Session,开启事务
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
User u = new User();
u.setUsername("zfggg");
u.setCellphone("18845");
u.setPassword("9604");
session.save(u);
transaction.commit();
session.close();
}
结果:控制台:
数据库:
(3)update
@Test
public void updata() {
//获取Session,开启事务
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
//编写HQL
String hql = "update User as c set c.username='bkbk' where c.password='444'";
//创建Query对象
Query query = session.createQuery(hql);
query.executeUpdate();
transaction.commit();
session.close();
}
结果:控制台:
数据库:
(4)delete
@Test
public void delete() {
//获取Session,开启事务
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
//编写HQL
String hql = "delete User as c where c.password='554'";
//创建Query对象
Query query = session.createQuery(hql);
query.executeUpdate();
transaction.commit();
session.close();
}
结果:控制台:
数据库: