DAO层关于Date类型数据的插入
老师,在讲解DAO层的测试时,我发现,实体类里的属性类型和数据表的数据类型不完全一样。都知道在java'实体类中的Date是java.util.Date类型的,数据库里的日期类型数据都是java.sql.Date类型的,可是在测试时我发现,
插入Date类型的时候,并没有进行数据类型转换,直接调用了DAO层接口的方法进行插入了,是说插入时候会自动将java.util.Date类型转化为java.sql.Date类型然后插入到数据库的?如果是这样的话,转换后的java.sql.Date类型是否遵循在数据库里定义的日期格式呢?
如果1假设城镇,那查询操作的话,从数据库里处取出的java.sql.Date日期数据,难道可以不用转换可以直接在代码中用java.util.Date类型来接收?这样直接打印出这个数据也是按数据表定义好的格式输出么?
为了避免JavaBean给基本数据类型自动赋默认值,本项目的基本数据类型改用它的包装类,如用Integer不用int,在插入时候,也发现没有转换而直接插入,这是否说明在数据插入和查询取出数据时,对于基本数据类型和其包装类都是自动拆箱和自动装箱的,不需要手动操作什么。
- 1234567891011121314151617
<
update
id
=
"updateShop"
parameterType
=
"com.imooc.o2o.entity.Shop"
>
update tb_shop
<
set
>
<
if
test
=
"shopName != null"
>shop_name=#{shopName},</
if
>
<
if
test
=
"shopDesc != null"
>shop_desc=#{shopDesc},</
if
>
<
if
test
=
"shopAddr != null"
>shop_addr=#{shopAddr},</
if
>
<
if
test
=
"phone != null"
>phone=#{phone},</
if
>
<
if
test
=
"shopImg != null"
>shop_img=#{shopImg},</
if
>
<
if
test
=
"priority != null"
>priority=#{priority},</
if
>
<
if
test
=
"lastEditTime != null"
>last_edit_time=#{lastEditTime},</
if
>
<
if
test
=
"enableStatus != null"
>enable_status=#{enableStatus},</
if
>
<
if
test
=
"advice != null"
>advice=#{advice},</
if
>
<
if
test
=
"area != null"
>area_id=#{area.areaId},</
if
>
<
if
test
=
"shopCategory != null"
>shop_category_id=#{shopCategory.shopCategoryId}</
if
>
</
set
>
where shop_id=#{shopId}
</
update
>
正在回答
同学你好。
1、从表层来看,当数据库的数据类型为DateTime的时候,使用MyBatis,无论是插入还是查询,直接使用util包下的Date都是可以的。
2、使用原生的jdbc来操作,直接使用util.date来接收DateTime的数据是会有问题的。
3、目前我们在官方文档中并没有找到相关的解释,没有确信的官方渠道解释是否转换。我们只能合理的推断一下,如果它底层是使用了jdbc,那么一定是需要做一些转换的。具体如何转换,不好定论。
4、自动拆装箱是java包装类的特性,在调用时是会自动拆箱装箱的。不需要额外操作。
祝学习愉快~
- 参与学习 人
- 提交作业 323 份
- 解答问题 8263 个
本阶段将带你学习主流框架SSM,以及SpringBoot ,打通成为Java工程师的最后一公里!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧