java 用于常见crud操作的示例数据访问对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 用于常见crud操作的示例数据访问对象相关的知识,希望对你有一定的参考价值。

package com.project.dao;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.persistence.TypedQuery;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

@Repository
@Transactional
public class GenericDao<T> {

	@Autowired
	protected EntityManager entityManager;

	public void save(T entity) {

		entityManager.persist(entity);
	}

	public void saveAll(List<T> entities) {

		entities.forEach(entity->entityManager.persist(entity));
	}

	public void update(T entity) {

		entityManager.merge(entity);
	}

	public void delete(T entity) {

		if (entityManager.contains(entity))
			entityManager.remove(entity);
		else
			entityManager.remove(entityManager.merge(entity));
	}

	public T findById(Class<T> clazz, long id) {
		return entityManager.find(clazz, id);
	}
	
	public <A> A referTo(Class<A> clazz, long id) {
		return entityManager.getReference(clazz, id);
	}
	
	public <A> List<A> referToAll(Class<A> clazz, List<Long> ids){
		List<A> ref = new ArrayList<A>();
		ids.forEach(id->ref.add(entityManager.getReference(clazz, id)));
		return ref;
	}

	@SuppressWarnings("unchecked")
	public List<T> findAll(Class<T> clazz, Integer offset, Integer limit) {

		Query query = entityManager.createQuery("from " + clazz.getName());
		if (offset != null)
			query.setFirstResult(offset);
		if (limit != null)
			query.setMaxResults(limit);

		return query.getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<T> findAll(Class<T> clazz) {

		return entityManager.createQuery("from " + clazz.getName()).getResultList();
	}
	
	public <A> Long count(Class<A> clazz) {
		String clazzName = clazz.getName();
		TypedQuery<Long> query = entityManager.createQuery(
				"SELECT COUNT(*) FROM " + clazzName + " entity", Long.class
				); 
		return (Long) query.getSingleResult();
	}
}

以上是关于java 用于常见crud操作的示例数据访问对象的主要内容,如果未能解决你的问题,请参考以下文章

如何仅使用 java 和 jdbc(无 ORM)为基本的 crud 操作实现通用 DAO?

一个简单的CRUD示例:使用PHP+MySQL

自动生成用于数据库 crud 操作的 html 表单

JavaJDBC常见操作

Java数据访问对象模式

ORM对象关系映射之使用GreenDAO进行CRUD操作