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拓展功能↑
}