寒假实习(二)


最近开始上手参与一个已经搭建起来的项目。
新增需求,需要从下至上添加代码。即model,dao,xml,service,serviceimpl,controller层都需要添加一个新的板块。

此次想要记录的主要集中在实体类和dao层与xml文件的调用过程中发现的一些问题以及解决办法。

实体类的属性命名问题

由于数据库中的属性都是大写的,中间还带有_,刚开始写的时候直接把数据库中的属性名照着抄了下来,然后写get、set方法,但是发现有报错。问题在于实体类中的属性应该使用Java规范的书写方法,即驼峰写法,属性的首字母不能大写。java实体类的属性名首字母不能大写,不然el表达式无法取值。
具体的问题
参考链接:https://www.cnblogs.com/superman-21/p/14077356.html

这个算是个前辈的经验,直接告诉我了,避开了这个坑。
在这里插入图片描述

DAO层调用xml文件的问题

还有一个问题是dao层与xml文件的调用问题。使用xml写SQL、写动态SQL的相关问题可以参考其他文章。

众所周知,dao层是用来访问数据库的,而访问数据库就需要使用SQL。最普通的高级SQL的书写在实际工程中似乎并不常见,取而代之的是使用注解或者xml的形式来书写SQL。此次工程主要使用xml书写动态SQL的形式,来实现对数据库的访问。

因为实体类的属性由于上面所阐述的原因,实体类的私有属性与实际数据库中的列名并不完全相同,导致xml中对实体类进行的SQL操作无法匹配到数据库的对应列,最终SQL报错无法执行。
(神通数据库中表的属性)

为了解决这个问题,需要使用在xml中手动定义resultMap
在 mybatis 中, resultMap 节点定义了结果集和结果对象(JavaBean)之间的映射规则

在这里插入图片描述
参考链接:resultMap的用法以及关联结果集映射_正在努力的陈序员的博客-CSDN博客_resultmap

此处举了两个例子,把数据库前两个列名与实体类的两个属性对应起来,在执行SQL的时候就可以让其知道数据库中的列名与实体类的属性名的映射关系,进而顺利执行SQL语句。

这个问题还有另一种解决方法,不使用resultMap。在写的SQL语句以select column as properties形式出现。Column就写数据库中的真实列名,as后面跟实体类所对应的属性名。
例:

<select resultType="SysDbInfo" id="findById">
    select
           DB_NAME as dbName
    from sys_dbinfo where id=#{id}
</select>

很显然,这种方法不太适合较大的工程。每一个列后面都需要跟上as+属性,编写时比较麻烦,所以大部分工程使用的是第一种方法,即手动定义resultMap,编写属性名与列名的映射关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值