开篇
做项目的时候我有一个需求是实现年龄自动变化。在尽可能考虑性能和可移植性的情况下,我想出了以下几种方案。
存储过程
我脑子里第一个想到的解决方案是用存储过程。而又因为我用的数据库是MySQL,我恍然想起阿里巴巴Java开发手册中写的:
【强制】禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。
MySQL对存储过程的优化和支持比PostgreSQL, Oracle, MSSQL差多了。
不过在服务器压力较小的情况下,存储过程在兼顾效率和开发成本的要求下还是有可取之处的。
存储过程这个方案就被毙掉了。
定时更新
我想到的第二个方案就是服务器在每天凌晨4点的时候,用JDBC连接数据库,进行扫描后对年龄列进行更新。
这个方法虽然性能不大好,但是还是有一定的可行性的。
查询时更新
既然数据库中的内容都是通过访问接口来得知的,那为什么不在查询的时候判断并更新年龄值呢?
话不多说,给代码:
public APIResult findById(Long id) {
if (id == null) {
//APIResult是我自定义的返回结果类
return APIResult.newResult(ResultCode.BadRequest, "params invalid", null);
}
//MybatisGenerator中提供的搜索条件AnimalExample
AnimalExample example = new AnimalExample(