Hibernate学习之---Hibernate的批量处理

1.批量插入
    private void addUsers() throws Exception{
        Session session = HibernateUtil.currentSession();
        Transaction tx = session.beginTransaction();

        for(int i = 0;i < 10000;i++){
            User u1 = new User();
            u1.setName("xxxx" + i);
            u1.setAge(i);
            //在Session级别缓存User实例
            session.save(u1);

            if(i % 20 == 0){
                session.flush();
                session.clear();
            }
        }
        tx.commit();
        HibernateUtil.closeSession();

    }

上面的代码中当i % 20 == 0 时,手动将Session缓存的数据写入数据,并且清空Session缓存里的数据。除了要对Session级别的缓存进行处理外,还应该通过配置来关闭SessionFactory的二级缓存。

2.批量更新
`   private void updateUsers() throws Exception{
        Session session = HibernateUtil.currentSession();
        Transaction tx = session.beginTransaction();

        //查询出User表中的所有记录
        ScrollableResults users = session.createQuery("from User").setCacheMode(CacheMode.IGNORE).scroll(ScrollMode.FORWARD_ONLY);
        int count = 0;
        while(users.next()){
            User u = (User)users.get(0);
            u.setName("新用户名" + count);
            if(++count % 20 == 0){
                session.flush();
                session.clear();
            }

        }
        tx.commit();
        HibernateUtil.closeSession();

    }
3.DML风格的批量更新/删除

Hibernate提供的HQL语句也支持批量update和delete语法。
批量update和delete语句的语法格式如下:

update | delete from? <ClassName> [where where_conditions]
    String hql = "update User u set name = :newName";
    int updatedEntities = session.createQuery(hql).setString("newName","新名字").executeUpdate();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值