广告弹窗后台管理:
任务:
广告弹窗:
增:插入的开始事时间beginTime至少比当前时间早一个小时
删:逻辑删除,只修改状态isDelete的值为true
改:开始事件beginTime前一个小时前才能编辑(与增加时的限制是一样的)
查:按开始时间beginTime倒序
问题:
1:每次进行update操作是createTime会自动更新为当前时间
解决方案:将createTime的数据库数据类型改从timestamp为datetime
2:部分js方法不适用,框架自带的校验方法满足不了业务逻辑校验
解决方案:自定义校验方法
收获:
1:
<sql id="Base_Column_List" > advert_id,create_time,update_time,type,pic_path,target_url,begin_time,end_time,is_delete </sql>改为
<sql id="Base_Column_List" > ad.advert_id,ad.create_time,ad.update_time,ad.type,ad.pic_path,ad.target_url,ad.begin_time,ad.end_time,ad.is_delete </sql>目的是:方便以后做多表查询
2:
where 1=1 语句替华为
<where></where>标签
原因是:where 1=1 属于投机取巧的方式
3.
<insert id="add" parameterType="com.ibbpp.business.entity.AdvertHtml" useGeneratedKeys="true" keyProperty="advertId"> INSERT INTO advert_html(create_time,update_time,type,pic_path,target_url,begin_time,end_time,is_delete) VALUES(now(), now(),#{type},#{picPath},#{targetUrl},#{beginTime},#{endTime},false) </insert>改为
<insert id="add" parameterType="com.ibbpp.business.entity.AdvertHtml" useGeneratedKeys="true" keyProperty="advertId"> INSERT INTO advert_html(create_time,update_time,type,pic_path,target_url,begin_time,end_time,is_delete) VALUES(now(), now(),#{type,jdbcType=TINYINT},#{picPath,jdbcType=VARCHAR},#{targetUrl,jdbcType=VARCHAR},#{beginTime,jdbcType=TIMESTAMP},#{endTime,jdbcType=TIMESTAMP},false) </insert>原因是:忘了,但好像更规范一点
4:
<update id="update" parameterType="Object" >改为
<update id="update" parameterType="com.ibbpp.business.entity.AdvertHtml" >原因是:这样更为准确
5:
<insert id="add" parameterType="com.ibbpp.business.entity.AdvertHtml" useGeneratedKeys="true" keyProperty="advertId">主键利用数据源库自增
6:
业务逻辑处理都写在service层,不应该写在Controller层
7:
public class AdvertHtmlService extends BaseService<AdvertHtml>public class A<C> extends B<D>
此处的<C>为泛型申明,C则失去了对象的意义,不被识别为对象,<D>为泛型的使用,依然是个对象,会被识别为对象
8:
使用框架时对框架基类和js时,若需要新的方法,处理方式是:重写一个方法覆盖基类的方法,调用时调用自己的方法
9:
debug模式断点调试