Hibernate学习笔记2

当明白了Hibernate的原理和它在系统中的位置之后,最为重要的就是应用对数据增、删、改、查操作,一一介绍,以作记录

使用spring + hibernate框架中,一般使用HibernateTemplate来使用Hibernatet

1.保存数据

    如果是继承HibernateDaoSupport来使用hibernate

    (1) HibernateTemplate.save()方法可以保存一条记录

    (2) HibernateTemplate.saveOrUpdate()方法可以根据ID判断记录是否存在,此时应该指定ID,否则作用同save()方法

    测试发现

   (3) HibernateTemplate.getSession().saveOrUpdate(user);

   (4) HibernateTemplate.getSession().save(user);

   这两种方法,都与HibernateDaoSupport.save()作用相同

   以上几种方法在执行之后,对象会被持久化到数据库,对象的标识(identifier)属性,一般是ID,会发生变化,如果字段属性为自动增长的话,对象的标识属性值就是新纪录的id值。

2.修改数据

    (1) HibernateDaoSupport.update()方法可以根据指定的id,更新纪录
     (2) Session.createQuery()或Session.createSQLQuery()也可以实现,并且可以指定多个条件

    createQuery()例如:    

Query query = this.getSession().createQuery("update User set password=? where name=? and address=?");
query.setString(0, "abcdefg");
query.setString(1, "xxxx");
query.setString(2, "BeiJing");
query.executeUpdate();

   createSQLQuery()用法例如:

Query query =  this.getSession().createSQLQuery("update user set password=? where name=? and address=?");
query.setString(0, "4H8)&$5<.");
query.setString(1, "xxxx");
query.setString(2, "BeiJing");
query.executeUpdate();

其实createQuery()里面使用的是HQL,而createSQLQuery()里面使用的SQL, 但有一次误操作在createSQLQuery()里面粘贴了HQL也可以正确执行,并实现了更新操作。

3.删除数据

 (1) HibernateTemplate..delete()方法可以按id删除一条记录,需要指定id

 (2) HibernateTemplate.getSession().delete();方法没有删除指定的记录虽然指定了id,很奇怪

使用createQuery(),用HQL

String hql="delete from User where name=?";
Query query = this.getSession().createQuery(hql);
query.setString(0, "CCC");
query.executeUpdate();
使用 createSQLQuery(),用SQL
String hql="delete from user where name=?";
Query query = this.getSession().createSQLQuery(hql);
query.setString(0, "DDDDD");
query.executeUpdate();

(3) bulkUpdate()

this.getHibernateTemplate().bulkUpdate("delete from User where name='user1'");

使用BulkUpdate()批量删除数据的实例:

final String[] names={"user2","user3","user4","user5"};
final String hql  = "delete from User where name in(:name)";
this.getHibernateTemplate().execute(new HibernateCallback(){
	public Object doInHibernate(Session session) throws HibernateException, SQLException {
		Query query = session.createQuery(hql);
		//query.setParameterList("ids", ids);
		query.setParameterList("name", names);
		int rcd = query.executeUpdate();
		System.out.println("删除的记录个数:"+rcd);
		return rcd;
	}
});
执行结果:

删除的记录个数:4

4.查询数据
其实查询是使用最多的操作,在hibernate里面有这些用法
(1) 最普通的用法HibernateTemplate.get()
      使用get()需要指定id,其实是根据ID来查找数据
      例如:      

getHibernateTemplate().get(User.class,uid);

(2) HibernateTemplate.find()
     find()方法使用HQL并且返回的是集合,例如

List<User> list = (List<User>)this.getHibernateTemplate().find(String.format("from User u where u.name='%s' ", name));
if (list.size()>0){				
	return list.get(0);
}

(3)HibernateTemplate.getSession().createQuery()
createQuery()里面使用HQL并且返回的是集合,例如

List<User> list = (List<User>)this.getSession().createQuery(String.format("from User u where u.name='%s'", name)).list();
if (list.size()>0){
	return list.get(0);
}
(4)HibernateTemplate.getSession().createSQLQuery()

createSQLQuery()里面是用普通SQL并且返回的是集合,用法1,例如

Query query = this.getSession().createSQLQuery(String.format("select * from user u where u.name='%s'", name)).addEntity(User.class); 
List<User> list1  = (List<User>)query.list();
if (list1.size()>0){
	return list1.get(0);
}
createSQLQuery()里面是用普通SQL 并且返回的是集合,用法2,例如
List<User> list = (List<User>)this.getSession().createSQLQuery(String.format("select * from user u where u.name='%s'", name)).addEntity(User.class).list();
if (list.size()>0){
	return list.get(0);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值