美文网首页
Mybatis Service层 通用类

Mybatis Service层 通用类

作者: 风吟空城 | 来源:发表于2019-07-26 15:32 被阅读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);
        }
    
    }
    

    相关文章

      网友评论

          本文标题:Mybatis Service层 通用类

          本文链接:https://www.haomeiwen.com/subject/vdhdrctx.html