这个购票系统, 课程还可以, 如果预习过阿里开发手册的话, 听起来效果会更好。
后续的分享终端, 主要是因为后续课程的内容基本上是一个购票抢票系统的基于阿里开发手册规范的实践。
知道了本质之后, 这些分享就不再献丑了, 因为后续的内容, 我不可能写得比阿里开发手册更好。
当然, 关于这个系统的代码开发过程, 还是有得写的。 后续工作没那么忙的时候, 我会把这个t31项目的代码开发过程笔记整理好了之后, 逐一分享。
这里贴一段雪松老师的基础代码
实体基类
@Data
@JsonIgnoreProperties(value = {"handler"})
public abstract class BaseEntity implements Serializable {
@TableId(value = "`id`", type = IdType.AUTO)
protected Long id;
}
dao(mapper)接口
public interface ICrudDaoextends BaseMapper { public List selectByPage(T entity); }
这里的dao接口, 我们继承了mybatis-plus的baseMapper所以包含了baseMapper的所有方法
serivce接口定义
public interface ICrudServiceextends IService { PageInfo listPage(T entity, int pageNum, int pageSize); List list(T entity); }
继承了IService, 所以, 包含了IService的所有方法
service实现
public class CrudServiceImplextends ServiceImpl , T> implements ICrudService { @Override public PageInfo listPage(T entity, int pageNum, int pageSize) { return PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> { baseMapper.selectByPage(entity); }); } @Override public List list(T entity) { return getBaseMapper().selectList(Wrappers.emptyWrapper()); } }
还有基础controller的实现
public abstract class BaseController, T extends BaseEntity> { @Autowired protected S service; protected Logger log = LoggerFactory.getLogger(this.getClass()); @ApiOperation(value = "加载", notes = "根据ID加载") @GetMapping("/edit/{id}") public T edit(@PathVariable Long id) throws Exception { T entity = service.getById(id); afterEdit(entity); return entity; } @ApiOperation(value = "分⻚查询", notes = "分⻚查询") @PostMapping("/list-page") public PageInfolistPage(T entity, @RequestParam(name = "page", defaultValue = "1", required = false) int page, @RequestParam(name = "rows", defaultValue = "10", required = false) int rows) { PageInfo result = service.listPage(entity, page, rows); return result; } @ApiOperation(value = "查询", notes = "根据实体条件查询") @RequestMapping(value = "/list", method = {RequestMethod.POST, RequestMethod.GET}) public List list(T entity) { List list = service.list(entity); return list; } @ApiOperation(value = "保存", notes = "ID存在修改,不存在添加") @PostMapping("/save") public ResponseBean save(T entity) throws Exception { ResponseBean rm = new ResponseBean(); try { //保存前处理实体类 beforeSave(entity); service.saveOrUpdate(entity); rm.setModel(entity); } catch (Exception e) { e.printStackTrace(); rm.setSuccess(false); rm.setMsg("保存失败"); } return rm; } @ApiOperation(value = "删除", notes = "根据ID删除") @GetMapping("/delete/{id}") public ResponseBean delete(@PathVariable Long id) throws Exception { ResponseBean rm = new ResponseBean(); try { service.removeById(id); rm.setModel(null); } catch (Exception e) { e.printStackTrace(); rm.setSuccess(false); rm.setMsg("保存失败"); } return rm; } @ApiOperation(value = "删除", notes = "批量删除") @RequestMapping(value = "/delete", method = {RequestMethod.POST, RequestMethod.GET}) public ResponseBean delete(@RequestParam List ids) { ResponseBean rm = new ResponseBean(); try { service.removeByIds(ids); } catch (Exception e) { e.printStackTrace(); rm.setMsg("删除失败"); rm.setSuccess(false); } return rm; } public void beforeSave(T entity) throws Exception { } public void afterEdit(T entity) { } }
至此我们的基础代码就已经完成, 如果我们有某个表需要做网站的CRUD代码的话 ,直接继承entity、dao、service、controller 就可以实现基本的增删改查功能。
那么我们要怎么用它呢?
我们在工程下创建个业务实现的springboot服务。比如用户表的处理。
用户表: id, user_name 其他就不说了
- 创建数据库对应的po对象:
User 继承自 baseEntity
@Data
@TableName("`user`")
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class User extends BaseEntity {
@TableField("`user_name`")
private String userName;
}
-
创建UserDao
public interface UserDao extends ICrudDao
-
创建 IUserService
public interface IMenuService extends ICrudService
-
实现IUserService接口 UserServiceImpl
public class MenuServiceImpl extends CrudServiceImpl
-
创建UserController
@RestController
@RequestMapping("/user")
public class UserController extends BaseController {
//如果没有特殊要求, 这里不需要任何代码, 全部用BaseController里面的, 是不是超级简单
}
-
测试, 启动工程:
UserController实现了哪些方法呢 ?
/user/edit/{id}
/user/list-page
/list
/save 等等……
这样我们的代码复用目的是不是就达到了呢??



