发表于: 2018-02-11 15:46:52
2 671
今天完成的事情:
1.报错updateStudent不支持返回值为对象。看了下在.xml文件中标签<update>没有resultType属性,所以在dao层中设置方法返回值类型为void。
2.完善更新信息的操作。这里的条件是通过主键id定位要更新信息的行位置。因此需要给作为传值参数的对象的id赋值,另外表格中的创建时间不能更新,相应的更新时间就需要更新为当前操作的时间了。
之前做的时候是新增了一个包含id参数,不包含创建时间、更新时间的构造方法。并把StudentMapper.xml文件中对应于更新时间的列的<if test="created_at!=null">created_at=#{created_at},</if>删除掉。这样的话,在进行更新操作的时候就不会对信息的created_at列进行改动了。同时在方法中用student.set(System.currentTimeMillis());对传值对象的更新时间进行实时赋值。这样就实现了通过id定位,更新对象信息,保留信息创建信息并记录更新时间的操作。
但是现在总结起来,之前做的有有些问题。首先,没有必要新增一个添加了id参数的构造方法,完全可以使用于insert一样的构造方法,因为作为定位条件的id,可以通过setId()的方法进行赋值。第二个是update操作中没有必要删除关于created_at的if标签,因为里面有判断条件,只要是空值trim方法就会判断不操作。第三个是没有返回值。
3.主键自增,insert返回主键的两种方式。
对主键自增的表,在插入时不需要主键,而是在插入过程自动获取一个自增的主键,有两种方式得到被操作记录的主键值:
<insert id="insert" parameterType="user" useGeneratedKeys="true" keyProperty="id">
insert into user(name, age,password) values (#{name},#{age},#{password})
</insert>
或
<insert id="insert" parameterType="user">
<selectKey resultType="java.lang.Short" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID() AS id
</selectKey>
insert into user(name, age,password) values (#{name},#{age},#{password})
</insert>
在插入操作完成之后,参数对象user的id属性就已经被赋值了,再在逻辑层利用user.getId()就可以获取主键值。
明天的计划
回家过年。
遇到的问题:
返回值的问题,在dao层中定义方法的返回值为boolean时,它的实现类中默认返回值为false。
收获:
1.insert操作中返回主键的方法。
2.service层调用dao层是通过对象的多态性为接口进行实例化,从而调用被子类覆写过的方法,在这些覆写过的方法中定义了调用dao的逻辑。
评论