hibernate的批量更新、批量删除

hibernate的批处理API:session.createQuery(hql).executeUpdate(),如果有参数则在执行之前设置参数。

批量更新示例:

@Test
	public void testBatchUpdate() {
		String hql = "update Employee set name=:name , age=:age where id>:minId and id<:maxId";
		session.createQuery(hql).setString("name", "zhangsan").setInteger("age", 18).setInteger("minId", 10)
				.setInteger("maxId", 100).executeUpdate();
	}
批量删除示例:

@Test
	public void testBatchDelete() {
		String hql = "delete  Department where id>:minId";
		session.createQuery(hql).setInteger("minId", 20).executeUpdate();
	}

session.createQuery(hql).executeUpdate()方法只会产生一条sql语句,update语句或是delete语句,只操作一次数据库,效率大大提升。

此外,不能用此方法进行批量插入,只能用原生的jdbc操作:

@Test
	public void testBatchInsert() {
		session.doWork(new Work() {

			@Override
			public void execute(Connection conn) throws SQLException {
				// 原生jdbc操作
				System.out.println(conn);
				String sql = "insert into tb_employee (name,age) values ('a',18),('b',18),('c',18),('d',18),('e',18),('f',18),('g',18),('h',18),('i',18),('j',18),('k',18),('l',18),('m',18),('n',18)";
				PreparedStatement ps = conn.prepareStatement(sql);
				ps.execute();
			}

		});
	}
利用session.doWork()方法,这样也只会产生一条insert语句,进行批量插入操作。注意,方法里的conn对象类型是c3p0.jar包中的代理Connection类型,跟Hibernate没关系。

或者一点都不用Hibernae的API,全部用原生API,略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值