基于实际开发项目结构,搭建基于SpringBoot+Mybatis项目的基础Entity、Dao、Service。
1、基础实体类:Entity
基础实体类包含了:唯一主键,使用UUID、创建时间、更新时间、创建人、更新人、删除标记 1正常 2删除、分页页数、分页数量。其中创建人、更新人在项目线程通用用户管理后可在此设置(后续微博更新)。分页页数、分页数量配合整合分页组件使用。
public class BaseEntity { /** * 数据ID */ private String id ; /** * 创建时间 */ @JsonFormat(timezone = "GMT+8" ,pattern = "yyyy-MM-dd HH:mm:ss") private Date createDate ; /** * 更新时间 */ @JsonFormat(timezone = "GMT+8" ,pattern = "yyyy-MM-dd HH:mm:ss") private Date updateDate ; /** * 创建人 */ private String createBy ; /** * 更新人 */ private String updateBy ; /** * 删除标记 1正常 2删除 */ private Integer delFlag ; /** * 分页页数 查询使用 */ @JsonIgnore private int pageNum = 1; //默认值第一页 /** * 分页数量 查询使用 */ @JsonIgnore private int pageSize = 10; //默认10条数据分页 public String getId() { return id; } public void setId(String id) { this.id = id; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Date getUpdateDate() { return updateDate; } public void setUpdateDate(Date updateDate) { this.updateDate = updateDate; } public String getCreateBy() { return createBy; } public void setCreateBy(String createBy) { this.createBy = createBy; } public String getUpdateBy() { return updateBy; } public void setUpdateBy(String updateBy) { this.updateBy = updateBy; } public Integer getDelFlag() { return delFlag; } public void setDelFlag(Integer delFlag) { this.delFlag = delFlag; } public int getPageNum() { return pageNum; } public void setPageNum(int pageNum) { this.pageNum = pageNum; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public void preInsert(){ //添加之前执行 this.setCreateDate(new Date()); this.setId(IdGen.uuid()); this.setUpdateDate(new Date()); } public void preUpdate(){ //更新之前执行 this.setUpdateDate(new Date()); } } |
使用示例:
public class SysUser extends BaseEntity{ } |
2、基础Dao
基础泛型Dao实现的方法数据的增删查改。
public interface BaseDao <T> { /** * 根据ID获取单条数据 * @param id * @return */ public T get(String id); /** * 根据条件获取单条数据 * @param entity * @return */ public T getByEntity(T entity); /** * 根据条件获取多条数据 * @param entity * @return */ public List<T> getAllList(T entity); /** * 插入数据 * @param entity * @return */ public void insert(T entity); /** * 更新数据 * @param entity * @return */ public void update(T entity); /** * 删除数据 * @param entity * @return */ public void delete(T entity); } |
使用示例:(备注:SysUserDao需要mabatis的mapper.xml来与之对应,提供相关的sql语句)
public interface SysUserDao extends BaseDao<SysUser>{ } |
3、基础Service
基础Service是基于BaseDao、BaseEntity实现的服务层代码对数据的增删查改方法。注意此处Service是abstract
@Service public abstract class BaseService <D extends BaseDao<T>, T extends BaseEntity> { /** * 当前持久层对象 */ @Autowired(required = false) public D dao ; /** * 根据ID获取单条数据 * @param id * @return */ public T get(String id){ return dao.get(id); } /** * 根据条件获取单条数据 * @param entity * @return */ public T getByEntity(T entity){ return dao.getByEntity(entity); } /** * 根据条件获取多条数据 * @param entity * @return */ public List<T> getAllList(T entity){ return dao.getAllList(entity); } /** * 分页获取数据对象 * @param entity * @return */ public PageInfo<T> getPageList(T entity){ PageHelper.startPage(entity.getPageNum(),entity.getPageSize()); PageInfo<T> pageInfo = new PageInfo<T>(getAllList(entity)); return pageInfo; } /** * 插入数据 * @param entity * @return */ @Transactional public void insert(T entity){ entity.preInsert(); dao.insert(entity); } /** * 更新数据 * @param entity * @return */ @Transactional public void update(T entity){ entity.preUpdate(); dao.update(entity); } /** * 保存或更新方法 * @param entity */ @Transactional public void saveOrUpdate(T entity){ if(entity.getId() != null && !entity.getId().equals("")){ //更新 this.update(entity); }else { //新增 this.insert(entity); } } /** * 删除数据 * @param entity * @return */ @Transactional public void delete(T entity){ dao.delete(entity); } } |
使用示例:(备注:SysUserService中默认包含用户dao对象,且实现了对单表的增删改查方法)
@Service public class SysUserService extends BaseService<SysUserDao,SysUser>{ } |
后续微博持续更新整合新内容,记录包含实际项目使用到技术:线程通用用户管理(解耦代码)、二维码、WebSocket、消息队列、Redis缓存等等等等...