ibatis用的2.5
数据库用的是postgreSQL。
系统里所有的表都有【登录人】和【登录时间】2个字段现在有个需求insert或update的时候都要在更新上面2个字段。
登录人就是session里的人的id。但是登录时间有个特殊的要求,就是有个java的配置property文件可以修改当前时间。
比如我改配置文件里时间为2008年08月09日。
那么相当于系统运行在该日期一样(穿越啊...)。
所以这时更新DB,【登录时间】则为上面日期的时间。
上面的需求java的代码已经完成。现请教大家的问题,我希望做一个共通点的方法,让大多数处理业务的开发者都不需要特别写代码就能完成以上需求。他们可以只需处理和各个业务有关的内容。
目前自己在想用自定义TypeHandle实现吗?行吗?
有其他办法吗? ibatis

解决方案 »

  1.   

    请问postgreSQL里有临时改变系统时间的功能吗?
    比如,简单修改下配置,使得那些取得当前时间的函数都根据设置来拿日期,而不是真正os的系统时间。
      

  2.   

    你在更新这个时间的时候是直接在数据库里面取时间不是在sql语句里面把时间传到数据库吗?
      

  3.   


    据我所知是没有的,数据库对于系统时间有比较严禁的要求,随意修改系统时间可能产生严重后果。倒是可以考虑触发器,根据配置表中的要求(比如时间修正毫秒数啥的),修改insert时某固定名称字段的值;虽然此类触发器可以用程序批量建,不过毕竟触发器增大处理开销,潜意识里不怎么推荐。
      

  4.   

    关于共性的,如果所有值对象关于时间和用户ID的命名都是相同的(甚至继承自一个公共基础值对象),那么用拦截器来对值对象进行设置似乎更好些。用户ID可以考虑在MVC的过滤器(比如你用于检查用户是否登录的那个过滤器)中就提前设置到线程上下文中。
      

  5.   

    其实就是利用 ThreadLocal 而已了。