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操作