GenericDao类
package com.yufei.core.generic;
import java.util.List;
import org.apache.ibatis.annotations.Select;
/**
* 所有自定义Dao的顶级接口, 封装常用的增删查改操作,
* 可以通过Mybatis Generator Maven 插件自动生成Dao,
* 也可以手动编码,然后继承GenericDao 即可.
* <p/>
* Model : 代表数据库中的表 映射的Java对象类型
* PK :代表对象的主键类型
*
* @author StarZou
* @since 2014年6月9日 下午6:14:06
*/
public interface GenericDao<Model, PK> {
/**
* 插入对象
*
* @param model 对象
*/
int insertSelective(Model model);
/**
* 更新对象
*
* @param model 对象
*/
int updateByPrimaryKeySelective(Model model);
/**
* 更新对象
*
* @param model 对象
*/
int updateByPrimaryKey(Model model);
/**
* 通过主键, 删除对象
*
* @param id 主键
*/
int deleteByPrimaryKey(PK id);
/**
* 通过主键, 查询对象
*
* @param id 主键
* @return
*/
Model selectByPrimaryKey(PK id);
/**
* 查询所有记录
* @return
*/
List<Model> selectByExample();
/**
* 获取新增主键值
* @return
*/
@Select("SELECT @@IDENTITY")
long getLastInsertID();
}
GenericService
package com.yufei.core.generic;
import java.util.List;
/**
* 所有自定义Service的顶级接口,封装常用的增删查改操作
* <p/>
* Model : 代表数据库中的表 映射的Java对象类型
* PK :代表对象的主键类型
*
* @author StarZou
* @since 2014年6月9日 下午6:14:06
*/
public interface GenericService<Model, PK> {
/**
* 插入对象
*
* @param model 对象
*/
int insertSelective(Model model);
/**
* 更新对象
*
* @param model 对象
*/
int updateSelective(Model model);
/**
* 通过主键, 删除对象
*
* @param id 主键
*/
int delete(PK id);
/**
* 通过主键, 查询对象
*
* @param id 主键
* @return model 对象
*/
Model selectById(PK id);
/**
* 查询单个对象
*
* @return 对象
*/
Model selectOne();
/**
* 查询所有对象
*
* @return 对象集合
*/
List<Model> selectAllList();
/**
* 获取新增记录主键(Mysql)
* @return
*/
long getLastInsertID();
}
GenericServiceImpl
package com.yufei.core.generic;
import java.util.List;
import com.yufei.core.util.DateUtil;
import com.yufei.core.util.PageData;
import com.yufei.core.util.ReflectUtil;
import com.yufei.erp.basis.model.my.MySysDeptPerson;
/**
* GenericService的实现类, 其他的自定义 ServiceImpl, 继承自它,可以获得常用的增删查改操作,
* 未实现的方法有 子类各自实现
* <p/>
* Model : 代表数据库中的表 映射的Java对象类型
* PK :代表对象的主键类型
*
* @author StarZou
* @since 2014年6月9日 下午6:14:06
*/
public abstract class GenericServiceImpl<Model, PK> implements GenericService<Model, PK> {
/**
* 定义成抽象方法,由子类实现,完成dao的注入
*
* @return GenericDao实现类
*/
public abstract GenericDao<Model, PK> getDao();
/**
* 插入对象
*
* @param model 对象
*/
public int insertSelective(Model model) {
return getDao().insertSelective(model);
}
/**
* 更新对象
*
* @param model 对象
*/
public int updateSelective(Model model) {
return getDao().updateByPrimaryKeySelective(model);
}
/**
* 更新对象
*
* @param model 对象
*/
public int update(Model model) {
return getDao().updateByPrimaryKey(model);
}
/**
* 通过主键, 删除对象
*
* @param id 主键
*/
public int delete(PK id) {
return getDao().deleteByPrimaryKey(id);
}
/**
* 通过主键, 查询对象
*
* @param id 主键
* @return
*/
public Model selectById(PK id) {
return getDao().selectByPrimaryKey(id);
}
@Override
public Model selectOne() {
return null;
}
@Override
public List<Model> selectAllList() {
return getDao().selectByExample();
}
@Override
public long getLastInsertID() {
return getDao().getLastInsertID();
}
/**
* 【新增】记录赋值
* @param model
* @param paramMap
*/
public void setRecordCreateInfo(Object model, PageData pd) {
// 获取当前登陆用户信息
MySysDeptPerson userinfo = (MySysDeptPerson) pd.getSession("userInfo");
// 反射设定model中指定参数
ReflectUtil.setModelValue(model, "createdate", DateUtil.getTime()); //创建日期
ReflectUtil.setModelValue(model, "createuser", userinfo.getUsername()); //创建人用户名
}
/**
* 【修改】记录赋值
* @param model
* @param paramMap
*/
public void setRecordModifyInfo(Object model, PageData pd) {
// 获取当前登录用户信息
MySysDeptPerson userinfo = (MySysDeptPerson) pd.getSession("userInfo");
// 反射设定model中指定参数
ReflectUtil.setModelValue(model, "modifyuser", userinfo.getUsername()); //修改人用户名
ReflectUtil.setModelValue(model, "modifydate", DateUtil.getTime()); //修改日期
}
}
使用实例:
@Service
public class RoleServiceImpl extends GenericServiceImpl<VSysRole, Integer> implements RoleService
public interface SysRoleMapper extends GenericDao<SysRole, Integer>