这个购票系统, 课程还可以, 如果预习过阿里开发手册的话, 听起来效果会更好。
后续的分享终端, 主要是因为后续课程的内容基本上是一个购票抢票系统的基于阿里开发手册规范的实践。
知道了本质之后, 这些分享就不再献丑了, 因为后续的内容, 我不可能写得比阿里开发手册更好。

当然, 关于这个系统的代码开发过程, 还是有得写的。 后续工作没那么忙的时候, 我会把这个t31项目的代码开发过程笔记整理好了之后, 逐一分享。
这里贴一段雪松老师的基础代码

实体基类

@Data
@JsonIgnoreProperties(value = {"handler"})
public abstract class BaseEntity implements Serializable {/*** 实体编号(唯⼀标识)*/@TableId(value = "`id`", type = IdType.AUTO)protected Long id;
}

dao(mapper)接口

public interface ICrudDao<T extends BaseEntity> extends BaseMapper<T> {/*** ⼀般要是⽤动态sql语句查询* @param entity* @return*/public List<T> selectByPage(T entity);
}

这里的dao接口, 我们继承了mybatis-plus的baseMapper所以包含了baseMapper的所有方法

serivce接口定义

public interface ICrudService<T extends BaseEntity> extends IService<T> {/*** 分⻚查询⽅法* @param entity* @param pageNum* @param pageSize* @return*/PageInfo<T> listPage(T entity, int pageNum, int pageSize);/*** 查询所有⽅法* @param entity* @return*/List<T> list(T entity);
}

继承了IService, 所以, 包含了IService的所有方法

service实现

/*** @Title: Service实现类基类* 因为Mybatis Plus ServiceImpl没有分⻚查询* - listPage:分⻚查询* - list:查询所有* @Author 雪松* @Date 2021/10/28 12:00*/
public class CrudServiceImpl<T extends BaseEntity> extends ServiceImpl<ICrudDao<T>, T> implements ICrudService<T> {@Overridepublic PageInfo<T> listPage(T entity, int pageNum, int pageSize) {return PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() ->{baseMapper.selectByPage(entity);});}@Overridepublic List<T> list(T entity) {return getBaseMapper().selectList(Wrappers.emptyWrapper());}
}

还有基础controller的实现

/*** @Title: 控制器基类,实现标准CRUD控制器逻辑* @Author 雪松* @Date 2021/10/28 11:57*/
public abstract class BaseController<S extends ICrudService<T>, T extends BaseEntity> {@Autowiredprotected S service;protected Logger log = LoggerFactory.getLogger(this.getClass());/*** 加载* *** @param id* @return* @throws Exception*/@ApiOperation(value = "加载", notes = "根据ID加载")@GetMapping("/edit/{id}")public T edit(@PathVariable Long id) throws Exception {T entity = service.getById(id);afterEdit(entity);return entity;}/*** 分⻚查询** @param entity* @param page* @param rows* @return*/@ApiOperation(value = "分⻚查询", notes = "分⻚查询")@PostMapping("/list-page")public PageInfo<T> listPage(T entity, @RequestParam(name = "page", defaultValue = "1", required = false) int page,@RequestParam(name = "rows", defaultValue = "10", required = false) int rows) {PageInfo<T> result = service.listPage(entity, page, rows);return result;}/*** 根据实体条件查询** @return*/@ApiOperation(value = "查询", notes = "根据实体条件查询")@RequestMapping(value = "/list", method = {RequestMethod.POST, RequestMethod.GET})public List<T> list(T entity) {List<T> 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<Long> ids) {ResponseBean rm = new ResponseBean();try {service.removeByIds(ids);} catch (Exception e) {e.printStackTrace();rm.setMsg("删除失败");rm.setSuccess(false);}return rm;}/*** 保存前执⾏** @param entity* @throws Exception*/public void beforeSave(T entity) throws Exception {}/*** 模板⽅法:在加载后执⾏** @param entity*/public void afterEdit(T entity) {}
}

至此我们的基础代码就已经完成, 如果我们有某个表需要做网站的CRUD代码的话 ,直接继承entity、dao、service、controller 就可以实现基本的增删改查功能。

那么我们要怎么用它呢?

我们在工程下创建个业务实现的springboot服务。比如用户表的处理。

用户表: id, user_name 其他就不说了

  1. 创建数据库对应的po对象:

User 继承自 baseEntity

@Data
@TableName("`user`")
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class User extends BaseEntity {@TableField("`user_name`")private String userName;
}
  1. 创建UserDao

    public interface UserDao extends ICrudDao<Menu> {//这里不加任何自定义方法先, 当然是可以任意扩展的
    }
    
  2. 创建 IUserService

    public interface IMenuService extends ICrudService<Menu> {//这里同样, 可以自己扩展
    }
    
  3. 实现IUserService接口 UserServiceImpl

    public class MenuServiceImpl extends CrudServiceImpl<Menu> implements IMenuService {//废话一下, 如果service接口有新增, 这里加上实现
    }
    
  4. 创建UserController

@RestController
@RequestMapping("/user")
public class UserController extends BaseController<IUserService, User> {//如果没有特殊要求, 这里不需要任何代码, 全部用BaseController里面的, 是不是超级简单
}
  1. 测试, 启动工程:

    UserController实现了哪些方法呢 ?

    /user/edit/{id}

    /user/list-page

    /list

    /save 等等……

这样我们的代码复用目的是不是就达到了呢??

开课吧t31-抢票系统分享中断的说明及项目后端基础代码。相关推荐

  1. SpringBoot实现12306自动抢票系统

    写在前面 前段时间在浏览开源社区的时候,不小心看到一个 12306抢票 系统,一下就被吸引住了,然后就动力歪念头?,过年终于不用找黄牛了,哇哈哈哈,写了差不多一个星期,终于可以全自动抢票了,中间遇到的 ...

  2. 用python写12306系统_Python实现12306火车票抢票系统

    Python实现12306火车票抢票系统 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  Python实现12306火车票抢票系统.txt ] (友情提示:右键点 ...

  3. 微信公众号抢票系统开发笔记

    本次组队小作业的开发项目是微信公众号的抢票系统.我负责的是管理员的一些后台操作以及公众号内通过点击按钮.回复文字可以实现的一些票务功能的后端开发. 以下是我在开发过程中遇到的问题.解决方法. 前期准备 ...

  4. 基于python的火车票订票系统的设计与实现_Python实现12306火车票抢票系统

    Python实现12306火车票抢票系统效果图如下所示: 具体代码如下所示: import urllib.request as request import http.cookiejar as coo ...

  5. 12306抢票系统——ER图及数据表

    12306自动抢票系统--ER图及数据表 1. 抢票系统ER图 数据表 2.抢票系统数据结构表 (1)列车表 Trains table 字段名 数据类型 说明 是否为主键 Train_id strin ...

  6. 基于python的12306自动抢票系统的设计与实现

    铁路售票系统12306网站作为一个广受人们的日常使用工具,受大极大的关注.铁路售票的管理者都主要考虑降低成本,提升售票服务满意度.一年一度的春运和节假日出行高峰期,给众多的出行群众者带来了极大的烦恼, ...

  7. SpringBoot整合RabbitMQ,实现单机抢票系统

    MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息. 消息 ...

  8. python抢票12306源码_Python实现12306火车票抢票系统

    Python实现12306火车票抢票系统效果图如下所示: 具体代码如下所示: import urllib.request as request import http.cookiejar as coo ...

  9. 12306抢票系统(框架+代码)- 持续更新

    文章目录 一.框架展示(后续将提供源码) 二.界面展示 三.过程及结果展示 12306抢票系统(登录功能-二维码+账号密码)---------- 点击跳转 一.框架展示(后续将提供源码)    首先在 ...

最新文章

  1. 程序员的数学3 线性代数_在编程大佬眼中,线性代数到底是什么样的?
  2. 如何处理 android 方法总数超过 65536 . the number of method references in a .dex file exceed 64k
  3. Java编程之URI
  4. jquery多维对象计算个数_多维尺度分析理论概述
  5. Excel太丑、敲代码太烦,这才是老板最喜欢看的神仙报表
  6. re.DOTALL --编写多行模式的正则表达式
  7. mysql恢复授权表登录_MySQL授权用户及密码恢复设置
  8. Adobe Acrobat Pro DC二次激活失败的解决途径
  9. 【Clickhouse】Clickhouse 表引擎之 Log系列
  10. java 获取工程编码格式_java 获取获取字符串编码格式
  11. 02-01 Python 安装与pip
  12. django 数据库交互2
  13. static、const、static const、const static成员的初始化问题
  14. 【作业报告】作业5 四则运算 测试与封装 5.1
  15. 宝塔 python项目管理器2.0 部署django项目 uwsgi
  16. c语言 公式编辑器,AxMath(公式计算编辑器)
  17. dw相对路径怎么改_文件的绝对路径与相对路径
  18. linux下内存如何释放,如何释放linux的内存
  19. 42表盘直径是从哪测量_手表尺寸怎么选择 手表尺寸怎么测量
  20. 一切都显得那么苍白无力

热门文章

  1. 抛开你的地图!体验精彩实用的网络虚拟城市!
  2. mybatis-plus 动态指定只查询某些字段
  3. Java 中的接口以及常见的 Cloneable 接口
  4. linux上连接ftp服务器,linux下lftp连接ftp服务器进行上传与下载的方法详解
  5. 跟学尚硅学习,趴的老师笔记仅供自己学习和复习无他用途-JavaSE复习笔记
  6. 发布留言板-添加留言
  7. MySQL数据库连接超时(wait_timeout)问题的处理
  8. 程序员如何写好技术简历?
  9. 航天员扫描二维码就可以在天舟三号内提货啦!
  10. 一位老工程师在谷歌工作十年后的总结:宁愿把团队交给别人带