欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【ORM】【作业五】HQL检索(增删改查)

程序员文章站 2022-04-13 21:33:48
...

查询

前提准备:Ⅰ  继续利用之前搭建好的项目SSHDemo2(导完相应包,User.hbm.xml,hibernate.cfg.xml编写完毕)

                 Ⅱ  User类

                 Ⅲ  数据库

1)在src下建立一个包:zfg.hql.test

2)在包下建立一个类:HQLtest1.java

如图:

【ORM】【作业五】HQL检索(增删改查)

3)数据库准备(使用其中的user表)

【ORM】【作业五】HQL检索(增删改查)

(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();
	}

执行结果:

【ORM】【作业五】HQL检索(增删改查)

【ORM】【作业五】HQL检索(增删改查)

其中出现了两个问题:Ⅰ 输出问题 ,输出的是地址(解决方法:重写User类中的toString方法即可)

                                  Ⅱ 运行中产生的错误(已解决)

现在来解释一下这个错误:

错误展示:

【ORM】【作业五】HQL检索(增删改查)

详细文字: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();
	}

结果:控制台:

【ORM】【作业五】HQL检索(增删改查)

数据库:

【ORM】【作业五】HQL检索(增删改查)

(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();
	}

结果:控制台:

【ORM】【作业五】HQL检索(增删改查)

数据库:

【ORM】【作业五】HQL检索(增删改查)

(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();
	}

结果:控制台:

【ORM】【作业五】HQL检索(增删改查)

数据库:

【ORM】【作业五】HQL检索(增删改查)

相关标签: HQL hibernate