Session内部缓存与批量更新

 -----------------------------------------------------dao代码--------------------------------------------------------------------------

 //保存用户
 public void save(List<User> users) {
  
  for(User user:users)
  {
   this.getHibernateTemplate().persist(user);//这里也可以使用save但要注意使用persist会生成一张hibernate_unique_key表,而save方法不会。

  }
  System.out.println("------------------------------");
 }


---------------------------------------------------------------User.hbm.xml-----------------------------------------------------------------------

<hibernate-mapping>
 
 <class  table="user" name="model.User">
  <!-- 配置二级缓存 -->
  <!--usage是缓存策略,read-only是user类是不会修改的,只读的。read-write是可以读写的-->
  <cache usage="read-write"/>
     
  <!-- unsaved-value="-1" 这个属性是用来判断是update或者save的。调用saveOrUpdate()方法时候用到 -->
  <id name="id" column="id">
   <generator class="hilo"></generator><!-- 这里主键生成方式不能用native,因为mysql会使用自增长,会立即更新数据库,就不会批量更新数据库所以使用高低位的主键策略-->
  </id>
  
  <property name="userName" column="userName" not-null="true"/>
  <property name="passWord" column="passWord" not-null="true"/>
  
 </class>

</hibernate-mapping>


--------------------------------------------------------hibernate生成的sql语句--------------------------------------------------------

------------------------------//这个本应该在insert语句之后执行,但是由于批量更新所以第一个执行了
Hibernate: 
    insert 
    into
        user
        (userName, passWord, id) 
    values
        (?, ?, ?)
Hibernate: 
    insert 
    into
        user
        (userName, passWord, id) 
    values
        (?, ?, ?)
Hibernate: 
    insert 
    into
        user
        (userName, passWord, id) 
    values
        (?, ?, ?)


-----------------------------------批量更新---------------------------------------------

public void update(){

    this.getHibernateTemplate.execute(new HibernateCallBack()

   {

public Object doInHibernate(Session session){

    Query query = session.createQuery("Update User u set u.userName=:username");

    query.setString("username","test1");

    query.executeUpdate();

    //把User表所有记录的userName更新为test1

}

   });

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值