BaseService和其实现类

开发工具与关键技术:Eclipse、java
作者:梁添荣
撰写时间:2020-05-08

在service层,我们经常会写基本的增删查改方法,但有很多模块都有类似的写法,所以,抽取常用的增删查改BaseService接口,再实现该接口为BaseServiceImpl,通过service层的实现类继承BaseServiceImpl,就有了各个增删查改的方法了,只要继承后按:shift+alt+s键,
选择Override…开头的选项,再选择对应的方法提取出来,提取出来后,在方法前加
Bean.set(“bean”),即可使用对应的方法,ps:bean指的是注解写的bean名,例:
@Service(“attClassesService”)
Bean名为attClassesService,

BaseService代码如下:
package com.gx.commom; import java.io.Serializable;
import java.util.List;
import com.gx.vo.SelectOption;

public interface BaseService <Model, PK extends Serializable>{

//==========ProjectUtil拓展功能↓
//ps:用到自己的vo类SelectOption;/**单表分页查询/模糊查询,like不为空或不是null,则是模糊查询*/
List<Model> selectSingleTableOrLike(PK startIndex,PK pageSize,String like);/**单表查询总条数,当like不为空或不是null,则是模糊查询*/
int totalRowsSingleTable(String like);/**连表分页查询/模糊查询,,当like不为空或不是null,则是模糊查询*/
List<Model> selectMultilistOrLike(PK startIndex,PK pageSize,String like);/**连表查询总条数,当like不为空或不是null,则是模糊查询*/
int totalRowsMultilist(String like);/**新增,若实体类record中属性的值null,则该属性会插入数据库*/
int insert(Model record);/**新增,若实体类record中属性的值null,则该属性不会插入数据库*/
int insertSelective(Model record);/**修改,若实体类record中属性的值null,则该属性会插入数据库*/
int updateByPrimaryKey(Model record);/**修改,若实体类record中属性的值null,则该属性不会插入数据库*/
int updateByPrimaryKeySelective(Model record);/**根据id删除*/
int deleteByKey(PK id);/**根据id查询*/
Model selectByKey(PK id);/**绑定下拉框*/
List<SelectOption> selectOption();/**条件查找用户*/
Model selectByName(String name);List<Model> selectSingleTable();

//==========ProjectUtil拓展功能↑
}

BaseServiceImpl代码如下:
package com.gx.commom.impl; import java.util.List;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;
import com.gx.commom.BaseService;
import com.gx.commom.MyBatisBaseDao; import com.gx.exception.MessageException; import com.gx.vo.SelectOption;
public abstract class BaseServiceImpl implements BaseService<T, Integer> {

//==========ProjectUtil拓展功能↓
/**说明:* 该功能时基于MyBatisBaseDao完成的,并用到自己的vo类SelectOption;* * 使用时请创建带有参数的对象,该参数必须是已经存在的mapper/dao名,* 并把该名的第一个字母改小写。*/protected ThreadLocal<String> bean = new ThreadLocal<String>();
private ThreadLocal<MyBatisBaseDao<T, Integer>> threadLocalBaseDao = new ThreadLocal<MyBatisBaseDao<T, Integer>>();
private MyBatisBaseDao<T, Integer> baseDao;private void getBean() {       if(bean.get()==null) {            throw new MessageException(403, "非法访问");      }WebApplicationContext act = ContextLoader.getCurrentWebApplicationContext();      baseDao =(MyBatisBaseDao<T, Integer>) act.getBean(bean.get());       //System.err.println("bean是多少:"+bean.get()+";对象是多少:"+baseDao);         threadLocalBaseDao.set(baseDao);
}/**单表分页查询/模糊查询,like不为空或不是null,则是模糊查询*/
@Override
public List<T> selectSingleTableOrLike(Integer startIndex, Integer pageSize, String like) {getBean();return threadLocalBaseDao.get().selectSingleTableByPage(startIndex, pageSize,like);
}/**获取单表查询的总条数*/
@Override
public int totalRowsSingleTable(String like) {getBean();return threadLocalBaseDao.get().totalRowsSingleTable(like);
}/**连表分页查询/模糊查询,,当like不为空或不是null,则是模糊查询*/
@Override
public List<T> selectMultilistOrLike(Integer startIndex, Integer pageSize, String like) {getBean();return threadLocalBaseDao.get().selectMultilist(startIndex, pageSize, like);
}/**获取多表查询的总条数*/
@Override
public int totalRowsMultilist(String like) {getBean();return threadLocalBaseDao.get().totalRowsMultilist(like);
}/**新增,若实体类record中属性的值null,则该属性会插入数据库*/
@Override
public int insert(T record) {getBean();return threadLocalBaseDao.get().insert(record);
}/**新增,若实体类record中属性的值null,则该属性不会插入数据库*/
@Override
public int insertSelective(T record) {getBean();return threadLocalBaseDao.get().insertSelective(record);
}/**修改,若实体类record中属性的值null,则该属性会插入数据库*/
@Override
public int updateByPrimaryKey(T record) {getBean();return threadLocalBaseDao.get().updateByPrimaryKey(record);
}/**修改,若实体类record中属性的值null,则该属性不会插入数据库*/
@Override
public int updateByPrimaryKeySelective(T record) {getBean();return threadLocalBaseDao.get().updateByPrimaryKeySelective(record);
}/**根据id删除*/
@Override
public int deleteByKey(Integer id) {getBean();return threadLocalBaseDao.get().deleteByPrimaryKey(id);
}/**根据id查询*/
@Override
public T selectByKey(Integer id) {getBean();return (T) threadLocalBaseDao.get().selectByPrimaryKey(id);
}/**绑定下拉框*/
@Override
public List<SelectOption> selectOption() {getBean();return threadLocalBaseDao.get().SelectOption();
}/**条件查找用户*/
@Override
public T selectByName(String name) {getBean();return threadLocalBaseDao.get().selectByName(name);
}/**单表查询所有*/
@Override
public List<T> selectSingleTable() {getBean();return threadLocalBaseDao.get().selectSingleTable();
}//==========ProjectUtil拓展功能↑

}

BaseService和其实现类相关推荐

  1. java 电商项目 搜索模块,SSH电商项目实战之十:商品类基本模块的搭建

    前面我们完成了与商品类别相关的业务逻辑,接下来我们开始做具体商品部分. 1. 数据库建表并映射Model 首先我们在数据库中新建一张表,然后使用逆向工程将表映射成Model类,表如下: SQL代码/* ...

  2. 如何使用Eclipse内存分析工具定位内存泄露

    本文以我司生产环境Java应用内存泄露为案例进行分析,讲解如何使用Eclipse的MAT分析定位问题 一. 背景 11月10号晚上8点收到报警邮件,一看是OOM 打开公司监控系统查看应用各项指标发现J ...

  3. 研发协同平台持续集成Jenkins作业设计演进

    源宝导读:Jenkins作为一个开源的持续集成工具,被大家广泛使用.本文将分享,Jenkins在明源云研发协同平台中的运用,以及在其作业设计方面的演进历程. 一.作业设计1.0 起初,为了尽快推出研发 ...

  4. Maven配置SpringMVC4+Spring4+Mybatis3环境

    一.添加依赖 1.新建maven的web项目后,在pom.xml添加依赖信息,对应的groupId .artifactId修改成自己新建的 <project xmlns="http:/ ...

  5. springboot泛型封装开发

    JDK1.5出来后,Java开始支持泛型开发,通过将父类声明为泛型,子类继承父类,子类就能拥有父类的方法,而不需要再写代码.泛型开发能使我们的代码开发提供了很大的简便,简化了我们的代码. 在sprin ...

  6. java听课笔记8面向对象(下)

    课程大纲 继承的基本概念 继承的限制 子类的实例化过程 方法的重写 super 关键字 继承的应用示例 final关键字 抽象类 接口 多态性 instanceof关键字 抽象类应用-模版方法模式 接 ...

  7. C#基础之Assembly

    一直以来,我们都在用C#编写程序,编写程序的时候,我们用到继承.多态.接口以及泛型,我们也都明白子类可以继承抽象类,并能够重写父类的抽象方法,可是大家是否想过,如下几个问题: 1.凡树必有根和叶,类的 ...

  8. MAVEN整合Spring+SpringMVC+Mybatis

    2016/1/20 14:47:28 原创,转载请注明出处 曾经看过<那些年我们一起追过的女孩>,片中有个比较经典的画面,至今记忆犹新,柯景腾多年后,做了一名作家,每天面对电脑码字,背后是 ...

  9. Spring 入门教程

    Spring 入门教程 1.参考资料 尚硅谷-Spring5框架最新版教程(idea版) 雷丰阳spring.springmvc.mybatis.spring一站式学习 项目地址:Oneby / sp ...

最新文章

  1. 一般人不清楚--博士群体的择偶标准是什么?
  2. 为什么判断 n 是否为质数只需除到开平方根就行了?(直接证明)
  3. Java并发学习之六——等待线程的终结
  4. python数字从大到小排列_Python练习题 005:三个数字由大到小排序输出
  5. 用蒙特卡洛求pi_蒙特卡洛算法(MCS)及其MATLAB实现
  6. CloudIDE:为开发者写代码开启“加速”模式
  7. 教育|一位女博士五年的艰难毕业历程
  8. Writing udev rules
  9. 黑马程序员全套Java教程_Java基础入门视频教程零基础自学Java必备教程视频讲义(3)
  10. 什么是模式识别,模式识别主要识别什么?
  11. ResultSet大数据量导致内存溢出
  12. python入门笔记
  13. cpu,cache,Ram,harddisk存储速度
  14. 项目管理:如何提高团队效率
  15. 怎样用c语言制作文件保险箱,开题(电子保险箱)技巧.doc
  16. so链接及动态加载原理分析
  17. 毕业设计 基于单片机的智能音响设计与实现 -物联网 嵌入式 stm32
  18. 数字IC/FPGA设计之——学习路径
  19. Android SQL的使用
  20. 【花雕动手做】有趣好玩的音乐可视化系列项目(31)--LCD1602液晶屏

热门文章

  1. Android主题切换功能
  2. flex布局交叉轴方向对齐方式详解
  3. redhat/CentOS6/7/8离线安装依赖包pcre-devel zlib zlib-devel openssl openssl-devel gcc gcc-c++等编译包
  4. 怎样在线将视频生成二维码?二维码在线制作工具使用教程
  5. 【数据库专题】“第一幕”——《狗叫江湖》之数据库系统概论(续集)【蒸滴很c】
  6. C++标准库类型vector介绍
  7. matlab中利用save保存.mat文件
  8. 操作系统 --经典同步问题之吸烟者问题读者-写者问题(七)
  9. 如何在Visio中插入公式的两种方法(WPS+Mathtype插入)
  10. FP-growth算法以及代码实现