懵逼时候的致命伤害
先扯一下今天我在公司懵逼时候被一个说出来想碰死的很小很小的错误,就是使用mybatis框架查询一条记录,而且是根据唯一字段查询,这特么够简单了吧,凭我手速5分钟不到解决问题,但是在哪个不知名的阴沟里翻船了,整整用debug来来回回测了30分钟,别说我菜,这纯属是对框架的基础知识掌握不太好导致的,这里特意记录一下,也是为你们好,瞜一眼是福啊!
表结构:
实体类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | private String id; //主键 private String ownerName; //现机动车所有人 private Integer plateType; //号牌种类 private String licensePlate; //车牌号 private String vin; //VIN码 private String carColor; //车身颜色 private String model; //车辆品牌(车型) @DateTimeFormat (pattern= "yyyy-MM-dd" ) @JsonFormat (pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8" ) private Date registretionTime; //初次登记时间 private String registrationAddress; //登记住所详细地址 private String mobile; //车主联系电话 private String engineNumber; //发动机号码 private String ownerImgUrl; //车主信息图片 private Integer carStatus; //机动车状态 private Integer useType; //使用性质 private Integer mortgagerStatus; //抵押状态 |
翻船后的代码现场:
根据唯一字段查询某条记录:
1 | OwnerInfo owner = ownerInfoService.selectOwnerInfoByVIN(ownerInfo.getVin()); |
1 <select id="selectOwnerInfoByVIN" parameterType="java.lang.String" resultType="com.tgsit.cjd.model.OwnerInfo"> 2 SELECT * 6 FROM cgs_owner_info 7 <where> 8 <if test="vin != null and vin !=''"> 9 vin=#{vin,jdbcType=VARCHAR} 10 </if> 11 </where> 12 </select>
这时候你debug调试查看查询结果中的属性值,有的属性值是映射成功的,有的是映射不成功的,为什么?因为查询后的字段名称有的跟实体类中的属性名称不一致,没有映射成功导致的。
解决手段,再说一次狠简单:
<select id="selectOwnerInfoByVIN" parameterType="java.lang.String" resultType="com.tgsit.cjd.model.OwnerInfo"> SELECT id,owner_name ownerName,plate_type plateType,license_plate licensePlate,vin,car_color carColor,model, registration_time registretionTime,registration_address registrationAddress, mobile,engine_number engineNumber,owner_img_url ownerImgUrl, car_status carStatus,use_type useType,mortgager_status mortgagerStatus FROM cgs_owner_info <where> <if test="vin != null and vin !=''"> vin=#{vin,jdbcType=VARCHAR} </if> </where> </select>
就是把查询到的字段想要映射到实体类中,则必须给查询后的字段起别名,保证与实体类中的属性名一致即可。
分类:
Java框架
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?