直接进入主题
整体项目结构图如下:
前台:主要为html页面,目前主流的前端框架有react、vue、angular等;
中台:接口层、路由层,比如微服务的路由、mvn的controller;
后台:主要为service层以及以下的层次。
项目主要分为三个工程模块,APP与WEB为war类型工程模块,SERVICE为jar类型模块,主要提供底层服务实现。APP与WEB都依赖SERVICE模块。项目代码模块分类如下:
这里主要是考虑到APP项目与WEB项目分别部署到不同的两个容器中,通过nginx进行代理,从而将APP与WEB进行解耦,避免一处出现异常(内存溢出、洪峰等),导致另外一处也不能正常访问的情况出现。
这些只是目前的设想,公司项目组正在探索中,如有趟过雷的,或者有更好的建议的,谢谢批评指正。
项目中涉及到的一些设想:
为了减少coding量,从而封装了controller、service、dao的公共操作;例如page、list、insert、update、delete、get等常用操作。同时利用代码生成器也可以生成相应代码,包括页面;
注:需要所有的表都包含:id、create_by、create_dt、update_by、update_dt、status、remark、sort等统一字段(其实也未尝不可)。
controller(接口层):继承【CrudController】
@Api(description = "用户管理") @RestController @RequestMapping(value = "/users",name = "用户管理") public class UserController extends CrudController<UserService,UserDao, User> { }
CrudController:
/** * 基础controller * @author GMarshal */ public abstract class CrudController<S extends CrudService<D,T>, D extends ICrudDao<T>, T extends BaseEntity<T>> extends BaseController{ @Autowired protected S service; @ApiOperation(value = "分页列出") @RequestMapping(value = "page",method = RequestMethod.POST) @IgnoreSecurity public Response page(Page<T> page,T t) { page.setEntity(t); return new Response().success(service.findPage(page)); } @ApiOperation(value = "新建对象") @RequestMapping(value = "insert",method = RequestMethod.POST) @IgnoreSecurity public Response insert(T t) { return new Response().success(service.save(t)); } @ApiOperation(value = "获取详情") @RequestMapping(value = "get",method = RequestMethod.GET) @IgnoreSecurity public Response get(String id) { return new Response().success(service.get(id)); } @ApiOperation(value = "更新全部") @RequestMapping(value = "update",method = RequestMethod.POST) @IgnoreSecurity public Response update(T t) { return new Response().success(service.save(t)); } @ApiOperation(value = "更新部分") @RequestMapping(value = "updateS",method = RequestMethod.POST) @IgnoreSecurity public Response updatePatch(T t) { return new Response().success(service.save(t)); } @ApiOperation(value = "删除对象") @RequestMapping(value = "delete",method = RequestMethod.POST) @IgnoreSecurity public Response delete(String id) { return new Response().success(service.delete(id)); } }
service:继承【CrudService】
@Service @Transactional(readOnly = true) public class UserService extends CrudService<UserDao, User> {}
CrudService:
/** * Service基类 * @author GMarshal */ @Transactional(readOnly = true) public abstract class CrudService<D extends ICrudDao<T>, T extends BaseEntity<T>> extends BaseService { /** * 持久层对象 */ @Autowired protected D dao; /** * 获取单条数据 * @param id * @return */ public T get(String id) { return dao.get(id); } /** * 获取单条数据 * @param entity * @return */ public T get(T entity) { return dao.get(entity); } /** * 查询列表数据 * @param entity * @return */ public List<T> findList(T entity) { return dao.findList(entity); } /** * 查询总数 * @return */ public int count(Page<T> page) { return dao.count(page); } /** * 查询分页数据 * @param page * @return */ public Page findPage(Page<T> page) { page.setTotal(dao.count(page)); page.setList(dao.findPage(page)); return page; } /** * 保存数据(插入或更新) * @param entity */ @Transactional(readOnly = false) public int save(T entity) { if (entity.getIsNewId()) { entity.preInsert(entity.getCreateBy()); return dao.insert(entity); } else { entity.preUpdate(entity.getUpdateBy()); return dao.update(entity); } } /** * 删除数据 * @param id */ @Transactional(readOnly = false) public int delete(String id) { return dao.delete(id); } }
dao:继承【CrudDao】
@MyBatisDao public interface UserDao extends ICrudDao<User> {}
CrudDao:
/** * DAO支持类实现 * @author GMarshal * @param <T> */ public interface ICrudDao<T> extends IBaseDao { /** * 获取单条数据 * @param id * @return */ public T get(String id); /** * 获取单条数据 * @param entity * @return */ public T get(T entity); /** * 查询数据列表 * @param entity * @return */ public List<T> findList(T entity); /** * 查询总数 * @return */ public int count(@Param("page") Page<T> page); /** * 查询分页数据 * @param page * @return */ public List<T> findPage(@Param("page") Page<T> page); /** * 插入数据 * @param entity * @return */ public int insert(T entity); /** * 更新数据 * @param entity * @return */ public int update(T entity); /** * 删除数据 * @param id * @return */ public int delete(String id);
谢谢各位,这么忙,还能看完。
素花漫楼,
演舞寄愁,
零落成伤,
伴水长流。
各位,再见!