Spring data jpa批量插入和更新

http://blog.csdn.net/wangshfa/article/details/27323297

1public interface BatchDao<T> {
2    public void batchInsert(List<T> list);
3     
4    public void batchUpdate(List<T> list);
5}

 

1public interface ReceiptDao extends PagingAndSortingRepository<Receipt, Long>, BatchDao<Receipt> {
2     
3    // start回单录入
4    Page<Receipt> findByUserId(Long userId, Pageable pageable);
5 
6}

 

01import java.util.List;
02 
03import javax.persistence.EntityManager;
04import javax.persistence.PersistenceContext;
05 
06import org.hibernate.Query;
07import org.hibernate.ScrollableResults;
08import org.hibernate.Session;
09import org.springframework.transaction.annotation.Transactional;
10 
11import com.ygsoft.cxpt.dao.BatchDao;
12import com.ygsoft.util.dwz.Page;
13 
14/**
15 *
16 * @author <a href="mailto:ketayao@gmail.com">ketayao</a> Version 1.1.0
17 * @since 2012-8-27 上午10:55:41
18 */
19 
20public abstract class AbstractDao implements BatchDao{
21 
22    @PersistenceContext
23    protected EntityManager em;
24 
25    @Transactional
26    public void batchInsert(List list) {
27        for (int i = 0; i < list.size(); i++) {
28            em.persist(list.get(i));
29            if (i % 30 == 0) {
30                em.flush();
31                em.clear();
32            }
33        }
34    }
35     
36    @Transactional
37    public void batchUpdate(List list) {
38        for (int i = 0; i < list.size(); i++) {
39            em.merge(list.get(i));
40            if (i % 30 == 0) {
41                em.flush();
42                em.clear();
43            }
44        }
45    }
46 
47    /**
48     * Hibernate使用游标分页的一个通用查询分页方法
49     * 描述
50     * @param queryString
51     * @param parameters
52     * @param page
53     * @return
54     */
55    @SuppressWarnings("unchecked")
56    public List findPageByQuery(final String queryString,
57            final Object[] parameters, final Page page) {
58 
59        Session session = (Session) em.getDelegate();
60 
61        Query query = session.createQuery(queryString);
62 
63        // 判断有无条件参数的情况
64        if (parameters != null) {
65            for (int i = 0; i < parameters.length; i++) {
66                query.setParameter(i, parameters[i]);
67            }
68        }
69 
70        // 使用游标来得到总条数
71        ScrollableResults sr = query.scroll();
72        sr.last();
73        int totalCount = sr.getRowNumber();
74 
75        // 索引加1
76        int totalRec = totalCount + 1;
77        page.setTotalCount(totalRec);
78 
79        int startIndex = (page.getPageNum() - 1) * page.getNumPerPage();
80 
81        query.setFirstResult(startIndex);
82        query.setMaxResults(page.getNumPerPage());
83 
84        List reList = query.list();
85 
86        return reList;
87    }
88}

 

01import com.ygsoft.cxpt.entity.FmisItem;
02 
03/**
04 
05 * @author  <a href="mailto:ketayao@gmail.com">ketayao</a>
06 * Version  1.1.0
07 * @since   2012-9-7 下午5:28:58
08 */
09@Repository
10public class FmisItemDaoImpl extends AbstractDao<FmisItem> {
11 
12}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值