Hibernate 增删改查

准备

Hibernate持久化对象支持三种对象状态。

瞬态:内存中的没有与Session关联的对象。

持久化:与Session关联的对象,对它所做的操作会自动同步到数据库中。

托管:以前与Session关联过,但Session又关闭了。

Serializable org.hibernate.Session. save(Object object)
新增一行。返回生成的主键,因此需要立即执行。通常这样用: 
int id=(int) sess.save(pojo);
void org.hibernate.Session. persist(Object object)
新增一行。延迟执行。此外与save()方法没有区别。
批量增加时可以用下面的代码:
public static void writeToTable(Set<OrderCheckPojo> set) {
		long beginTime = System.currentTimeMillis();
		Session sess = DaoUtil.sf.openSession();
		Transaction tr = sess.beginTransaction();
		int id;
		int i = 0;
		for (OrderCheckPojo pojo : set) {
			if (i++ % 100 == 0) { // 每100条刷新并写入数据库
				sess.flush();
				sess.clear();
			}
			id = (int) sess.save(pojo);
		}
		tr.commit();
		sess.close();
		logger.info("bufferSet.size():" + set.size() + ".And store them cost "
				+ (System.currentTimeMillis() - beginTime) + " milliseconds。");
	}

void org.hibernate.Session. delete(Object object)
从数据库中删除实体。需要实体为持久化状态。
也可以执行hql语句,见下面的例子:
Session sess=DaoBase.sf.openSession();
Transaction ts=sess.beginTransaction();
//注意executeUpdate()函数
int n=sess.createQuery("delete CounterPojo as t where t.source='online'").executeUpdate();
System.out.println("deleted rows:"+n);
ts.commit();
sess.close();

通过主键得到持久化对象
Object org.hibernate.Session. get(Class clazz, Serializable id)
根据指定的id返回数据库中的一行。若不存在返回null。立即执行。
Object org.hibernate.Session. load(Class theClass, Serializable id)
根据指定的id返回数据库中的一行。若不存在会抛异常。延迟执行。
通过get()或load()方法得到的就是持久化对象,对它们调用setter()方法就会 自动同步到数据库中。

通过where条件得到持久化对象
如hql="update Student as t set name='Tom' where t.name='tom' ";

hql代表hibernate查询语句,与sql相比,没有了最开始的select XXX ,得到的总是完整的对象。

hql="from Student"或hql="from Student as s"
等价于"select * from Student"
hql="from Student as s where s.name like 'tom%'"
等价于"select * from Student as s where s.name like 'tom%'"
hql="from Student as s order by s.name ASC,s.age DESC"
等价于"select * from Student as s order by s.name ASC,s.age DESC"
in 查询

批量where查询可用in查询来提升效率,为了不让一次查询花费太多时间,可以批量in 查询。

比如我想做10000次查询,就可以每100个放到 in (set)后面的集合中,执行100次查询。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值