您的位置:首页 > 编程语言 > Java开发

java spring 简单封装出自己的DAO Service实现

2016-07-16 15:26 671 查看
package com.jade.basung.bss.module.common;

import com.jade.framework.base.criterion.Criteria;
import com.jade.framework.base.util.PagingList;
import com.jade.basung.bss.BaseException;

/**
* dao层公共接口
*
* @date 15/8/28 下午5:23
* @version 1.0
*/
public interface IBaseDao<M extends java.io.Serializable, PK extends java.io.Serializable>
{
/**
* 增加方法 - 通用
* @param model 通用对象模型
* @throws BaseException
*/
void add(M model) throws BaseException;

/**
* 更新方法 - 通用
* @param model 通用对象模型
* @throws BaseException
*/
void update(M model) throws BaseException;

/**
* 删除指定对象 - 通用
* @param model 通用对象模型
* @throws BaseException
*/
void delete(M model) throws BaseException;

/**
* 根据id查找指定对象
* @param model 通用对象模型
* @param id 指定的id
* @return 通用对象
*/
M get(Class<M> model, PK id);

/**
* 根据Criteria查询符合条件的信息
* @param clazz 类名称
* @param criteria Criteria对象
* @return
*/
PagingList<M> listall(Class<M> clazz, Criteria criteria);
}

package com.jade.basung.bss.module.common;

import com.jade.framework.base.criterion.Criteria;
import com.jade.framework.base.util.PagingList;
import com.jade.basung.bss.BaseException;

/**
* 数据管理层通用接口
*
* @version 1.0
* @date 15/8/28 下午5:24
*/
public interface IBaseManager<M extends java.io.Serializable, PK extends java.io.Serializable>
{
/**
* 增加方法 - 通用
* @param model 通用对象模型
* @throws BaseException
*/
void add(M model) throws BaseException;

/**
* 更新方法 - 通用
* @param model 通用对象模型
* @throws BaseException
*/
void update(M model) throws BaseException;

/**
* 删除指定对象 - 通用
* @param ids 要删除对象的id,可多个
* @throws BaseException
*/
void delete(Class<M> clazz, PK... ids) throws BaseException;

/**
* 根据id查找指定对象
* @param model 通用对象模型
* @param id 指定的id
* @return 通用对象
*/
M get(Class<M> model, PK id);

/**
* 根据Criteria查询符合条件的信息
* @param clazz 类名
* @param criteria Criteria对象
* @return
*/
PagingList<M> listall(Class<M> clazz, Criteria criteria);
}

package com.jade.basung.bss.module.common.impl;

import java.util.Date;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TemporalType;

import com.jade.framework.base.criterion.Criteria;
import com.jade.framework.base.criterion.sql.SqlUtils;
import com.jade.framework.base.util.PagingList;
import com.jade.basung.bss.BaseException;
import com.jade.basung.bss.module.common.IBaseDao;

/**
* dao层公共接口实现
*
* @date 15/8/28 下午5:46
* @version 1.0
*/
@Named("bss_baseDao")
public class BaseDao<M extends java.io.Serializable, PK extends java.io.Serializable> implements IBaseDao<M,PK>
{
@PersistenceContext (unitName = "default")
private EntityManager entityManager;

public void add(M model) throws BaseException
{
entityManager.persist(model);
}

public void update(M model) throws BaseException
{
entityManager.merge(model);
}

public void delete(M model) throws BaseException
{
entityManager.remove(model);
}

public M get(Class<M> model,PK id)
{
return entityManager.find(model, id);
}

public PagingList<M> listall(Class<M> clazz, Criteria criteria)
{
String sql = "SELECT "+clazz.getSimpleName().toLowerCase()+" FROM "+clazz.getSimpleName()+" "+clazz.getSimpleName().toLowerCase()+" ";
return SqlUtils.sqlQuery(sql, entityManager, criteria);
}

/**
* 执行insert,update,delete批处理语句  未能全部实现-待定
*/
protected int execteBulk(final String hql, final Object... paramlist) {
Query query = entityManager.createQuery(hql);
setParameters(query, paramlist);
Object result = query.executeUpdate();
return result == null ? 0 : ((Integer) result).intValue();
}

protected int execteNativeBulk(final String natvieSQL, final Object... paramlist) {
Query query = entityManager.createNativeQuery(natvieSQL);
setParameters(query, paramlist);
Object result = query.executeUpdate();
return result == null ? 0 : ((Integer) result).intValue();
}

protected void setParameters(Query query, Object[] paramlist) {
if (paramlist != null) {
for (int i = 0; i < paramlist.length; i++) {
if(paramlist[i] instanceof Date) {
query.setParameter(i, (Date)paramlist[i], TemporalType.TIMESTAMP);
} else {
query.setParameter(i, paramlist[i]);
}
}
}
}
}

package com.jade.basung.bss.module.common.impl;

import javax.ejb.TransactionAttribute;
import javax.inject.Named;

import com.jade.framework.base.criterion.Criteria;
import com.jade.framework.base.util.PagingList;
import com.jade.basung.bss.BaseException;
import com.jade.basung.bss.module.common.IBaseDao;
import com.jade.basung.bss.module.common.IBaseManager;
import org.springframework.transaction.annotation.Transactional;

/**
* 通用数据管理接口实现
*
* @date 15/8/28 下午7:29
* @version 1.0
*/
@Named("bss_baseManager")
public abstract class BaseManagerImpl<M extends java.io.Serializable, PK extends java.io.Serializable> implements IBaseManager<M,PK>
{
public IBaseDao<M, PK> baseDao;

public abstract void setBaseDao(IBaseDao<M, PK> baseDao);

@TransactionAttribute
@Transactional (rollbackFor = Exception.class)
public void add(M model) throws BaseException
{
baseDao.add(model);
}

@TransactionAttribute
@Transactional (rollbackFor = Exception.class)
public void update(M model) throws BaseException
{
baseDao.update(model);
}

@TransactionAttribute
@Transactional (rollbackFor = Exception.class)
public void delete(Class<M> clazz, PK... ids) throws BaseException
{
for (PK id : ids) {
M model = baseDao.get(clazz, id);
if (model != null) {
baseDao.delete(model);
}
}
}

public M get(Class<M> clazz,PK id)
{
return baseDao.get(clazz, id);
}

public PagingList<M> listall(Class<M> clazz, Criteria criteria)
{
return baseDao.listall(clazz, criteria);
}
}

先封装一套通用的 DAO Service  然后对应的Dao  Service 业务逻辑再继承公用的接口 

下面是具体的使用场景

package com.jade.basung.opration.collect;

import com.jade.basung.bss.module.common.IBaseDao;

/**
* 收藏数据访问接口
*
* @date 15/11/23 上午11:51
* @version 1.0
*/
public interface CollectDao extends IBaseDao<Collect, Long>
{
}


package com.jade.basung.opration.collect.impl;

import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import com.jade.basung.bss.module.common.impl.BaseDao;
import com.jade.basung.opration.collect.Collect;
import com.jade.basung.opration.collect.CollectDao;

/**
* 收藏数据访问接口实现
*
* @date 15/11/23 下午3:11
* @version 1.0
*/
@Named("ld_collectDao")
public class JpaCollectDao extends BaseDao<Collect, Long> implements CollectDao
{
@PersistenceContext (unitName="default")
private EntityManager entityManager;
}

package com.jade.basung.opration.collect;

import com.jade.basung.bss.BaseException;
import com.jade.basung.bss.module.common.IBaseManager;
import com.jade.basung.opration.OprationException;

/**
* 收藏管理访问接口
*
* @date 15/11/23 上午11:51
* @version 1.0
*/
public interface CollectManager extends IBaseManager<Collect, Long>
{
public void addCollect(Collect collect)
throws OprationException, BaseException;

public void delCollect(Long... ids)
throws OprationException, BaseException;
}

package com.jade.basung.opration.collect.impl;

import javax.ejb.TransactionAttribute;
import javax.inject.Inject;
import javax.inject.Named;

import com.jade.basung.bss.BaseException;
import com.jade.basung.bss.module.common.IBaseDao;
import com.jade.basung.bss.module.common.impl.BaseManagerImpl;
import com.jade.basung.commodities.goods.GoodsDao;
import com.jade.basung.opration.OprationException;
import com.jade.basung.opration.collect.Collect;
import com.jade.basung.opration.collect.CollectDao;
import com.jade.basung.opration.collect.CollectManager;
import com.jade.basung.opration.collect.Enum.CollectType;
import com.jade.basung.opration.comment.Comment;
import com.jade.basung.opration.news.NewsDao;
import org.springframework.transaction.annotation.Transactional;

/**
* 收藏管理访问接口实现
*
* @date 15/11/23 下午3:09
* @version 1.0
*/
@Named("ld_collectManager")
public class CollectManagerImpl extends BaseManagerImpl<Collect, Long> implements CollectManager
{
private CollectDao collectDao;
private GoodsDao goodsDao;
private NewsDao newsDao;

@Override @Inject
public void setBaseDao(@Named("ld_collectDao")IBaseDao<Collect, Long> baseDao)
{
this.baseDao = baseDao;
this.collectDao = (CollectDao)baseDao;
}

@Inject
public void setGoodsDao(@Named("ld_goodsDao")GoodsDao goodsDao)
{
this.goodsDao = goodsDao;
}

@Inject
public void setNewsDao(@Named("ld_newsDao")NewsDao newsDao)
{
this.newsDao = newsDao;
}

@TransactionAttribute
@Transactional (rollbackFor = Exception.class)
public void addCollect(Collect collect) throws BaseException, OprationException
{
collectDao.add(collect); //增加收藏

if (CollectType.Goods == collect.getType()) {
goodsDao.collectsCount(collect.getRelId(), 1);
} else if(CollectType.News == collect.getType()){
newsDao.collectsCount(collect.getRelId(), 1);
}
}

@TransactionAttribute
@Transactional (rollbackFor = Exception.class)
public void delCollect(Long... ids) throws OprationException, BaseException
{
for (Long id: ids) {
Collect collect = collectDao.get(Collect.class, id);
if (null == collect) {
throw new OprationException("err.jade.operation.collect.collect_no_exist");
}

if (CollectType.Goods == collect.getType()) {
goodsDao.collectsCount(collect.getRelId(), -1);
} else if(CollectType.News == collect.getType()){
newsDao.collectsCount(collect.getRelId(), -1);
}
collectDao.delete(collect);
}
}
}


spring 依赖注入  继承父类接口  子类重写父类抽象方法   父类引用指向子类对象(接口父类 A=new  子类实现 B)   然后是  spring jpa   @TransactionAttribute 事务回滚 简单的底层封装完毕

本人亲测可用    (PS:——请勿无脑拷贝我的代码,程序编码人员应该有自己的思想,而不是重复代码生产工具)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息