基于spring注解,泛型的使用

本文介绍了一个名为BaseService的抽象类,该类提供了一系列用于数据库操作的方法,包括通过主键ID查询、新增、修改和删除数据。通过注入SQLSession,实现了与数据库的交互,确保了操作的通用性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


/**
 * Service基类,所有Service均继承该类
 *
 */
public abstract class BaseService<T> {

    /* 所有子类直接通过该SQLSession操作数据库 */
    @Resource(name = "sqlSession")
    protected SqlSession sqlSession;

    protected Class<T> clazz;

    protected  String DOMAIN_NAME;

    /* 用于记录日志 */
    protected Logger logger=null ;

    @SuppressWarnings("unchecked")
    @PostConstruct
    public void postConstruct(){ 
        try {
            Type type= this.getClass().getGenericSuperclass();
            ParameterizedType parameterizedType=(ParameterizedType) type;
            clazz= (Class<T>) parameterizedType.getActualTypeArguments()[0];
            DOMAIN_NAME =clazz.getName();
        } catch (Exception e) {
            e.printStackTrace();
            clazz=null;
        }
        logger = LoggerFactory.getLogger(this.getClass());
    }



    // base根据主键ID查询方法
    @Transactional(readOnly = true)
    public T getByID(Long id)throws Exception {
        try {
            return sqlSession.selectOne(DOMAIN_NAME + ".selectByPrimaryKey", id);
        } catch (Exception e) {
            logger.error("根据{}获取{}发生错误:{}", id, DOMAIN_NAME,e.getMessage(), e);

            throw e;
        }
    }

    // base新增方法
    @Transactional
    public void saveBase(T entity) throws Exception{
        try {
            sqlSession.insert(DOMAIN_NAME+".insertSelective",entity);
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }

    // base修改方法
    @Transactional
    public int updateBase(T entity) throws Exception{
        try{
            return sqlSession.update(DOMAIN_NAME+".updateByPrimaryKeySelective",entity);
        }catch(Exception e){
            logger.error(DOMAIN_NAME+"修改时发生错误:{}", e.getMessage(), e);
            throw e;
        }
    }

    // base删除方法
    @Transactional
    public void deleteBase(Long id) throws Exception {
        try {
            sqlSession.delete(DOMAIN_NAME + ".deleteByPrimaryKey", id);
        } catch (Exception e) {
            logger.error(DOMAIN_NAME+"删除时发生错误:{}", e.getMessage(), e);

            throw e;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值