Mybatis Service层 通用类

2019-07-26  本文已影响0人  风吟空城

前言

因为相对比较简单,就不再做过多的陈述了,直接上代码。

BaseService 接口

package com.aircity.qing.base.service;

import java.io.Serializable;

/**
 * desc : Mybatis 事务通用封装类
 **/
public interface BaseService<T, ID extends Serializable> {

    /**
     * 删除
     * @param id 主键字段
     */
    int delete(ID id);

    /**
     * 新增
     * @param record 实体实例对象
     */
    int insert(T record);

    /**
     * 选择字段新增
     * @param record 实体实例对象
     */
    int insertSelective(T record);

    /**
     * 单一查询
     * @param id 主键
     */
    T selectOne(ID id);

    /**
     * 选择字段更新
     * @param record 实体实例对象
     */
    int updateSelective(T record);

    /**
     * 更新
     * @param record 实体实例对象
     */
    int update(T record);

}

BaseServiceImpl 实现类

package com.aircity.qing.base.service.impl;

import com.aircity.qing.base.service.BaseService;
import com.aircity.qing.user.service.impl.UserServiceImpl;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * desc : Mybatis dao层通用实现类
 **/
public class BaseServiceImpl<T, ID extends Serializable> implements BaseService<T, ID> {

    /** 删除方法名称 **/
    private final String DELETE_NAME = "deleteByPrimaryKey";

    /** 插入方法名称 **/
    private final String INSERT_NAME = "insert";

    /** 更新方法名称 **/
    private final String UPDATE_NAME = "updateByPrimaryKey";

    /** 查询单一实体方法名称 **/
    private final String SELECT_ONE_NAME = "selectByPrimaryKey";

    /** 选择字段插入方法名称 **/
    private final String INSERT_SELECT_NAME = "insertSelective";

    /** 选择字段更新方法名称 **/
    private final String UPDATE_SELECT_NAME = "updateByPrimaryKeySelective";

    /**
     * Mapper文件后缀名称
     */
    private final String MAPPER_SUFFIX = "Mapper";

    /**
     * statement执行时的分隔符
     */
    private final String SQL_SEPARATOR = ".";

    @Autowired
    private SqlSessionTemplate sqlSessionTemplate;

    /**
     * 获取Mapper文件的namespace
     */
    private String getMapperNameSpace(){
        ParameterizedType parameterizedType = (ParameterizedType) UserServiceImpl.class.getGenericSuperclass();
        Type[] types = parameterizedType.getActualTypeArguments();
        return types[0].toString() + this.MAPPER_SUFFIX;
    }

    /**
     * 获取statement的全文
     */
    private String getStatementName(String methodName){
        return this.getMapperNameSpace() + this.SQL_SEPARATOR + methodName;
    }

    /**
     * 删除
     * @param id 主键字段
     */
    public int delete(ID id){
        return this.sqlSessionTemplate.delete(this.getStatementName(this.DELETE_NAME), id);
    }

    /**
     * 新增
     * @param record 实体实例对象
     */
    public int insert(T record){
        return this.sqlSessionTemplate.insert(this.getStatementName(this.INSERT_NAME), record);
    }

    /**
     * 选择字段新增
     * @param record 实体实例对象
     */
    public int insertSelective(T record){
        return this.sqlSessionTemplate.insert(this.getStatementName(this.INSERT_SELECT_NAME), record);
    }

    /**
     * 单一查询
     * @param id 主键
     */
    public T selectOne(ID id){
        return this.sqlSessionTemplate.selectOne(this.getStatementName(this.SELECT_ONE_NAME), id);
    }

    /**
     * 选择字段更新
     * @param record 实体实例对象
     */
    public int updateSelective(T record){
        return this.sqlSessionTemplate.update(this.getStatementName(this.UPDATE_SELECT_NAME), record);
    }

    /**
     * 更新
     * @param record 实体实例对象
     */
    public int update(T record){
        return this.sqlSessionTemplate.update(this.getStatementName(this.UPDATE_NAME), record);
    }

}
上一篇下一篇

猜你喜欢

热点阅读