解决mybatis中字段重名的问题尝试和总结

1.多表查询时,当列id重名时,mybatis会默认使用查询出的第一个id列(另一个列被覆盖),为了区分同名的列,给列取一个别名。取完别名后找到对应的colume中也要做出修改。
查询时给列取别名(多表查询):
SELECT u.*,o.id as oid,CODE,total,user_id
FROM tb_order o,tb_user u
WHERE o.user_id = u.id
AND o.id = #{id}
映射的column也要对应查询时的别名:

<id property="id" column="oid" />
<result property="code" column="code" />
<result property="total" column="total" />

2.当对查询出来的数据有疑惑时,可以复制sql语句到navicat中查询,与真正的结果比较,因为mybatis的查询机制可能会不同,除非自己封装框架。以后遇到sql语句问题也一样。
3.还有的就是如果在配置文件中(xml,properties)eclipse给出了拼写警告可能会影响程序正常执行。可通过在eclipse下的Window–Preference输入spell,然后把第一个复选框“Enable spell checking“给去掉就可以了。

以上就是我在解决mybatis中字段重名的问题过程中的尝试和总结。

MyBatis ,可以通过动态 SQL 来处理传入的两个 List,一个用于动态选择要查询的字段,另一个用于重命名字段。 首先,需要在 MyBatis 的映射文件编写动态 SQL。假设有一个名为 `User` 的实体类,有两个字段 `id` 和 `name`,我们可以按照以下方式进行动态查询: ```xml <select id="getUserList" resultType="User"> SELECT <foreach collection="selectFields" item="field" separator=","> ${field} </foreach> FROM user </select> ``` 上述代码,`selectFields` 是传入的用于动态选择字段的 List。`${field}` 表示要选择的字段名。 接下来,我们可以通过传入的第二个 List 来实现动态重命名字段。在 MyBatis 的映射文件,可以使用 `<choose>` 和 `<when>` 标签来进行条件判断和重命名。 ```xml <select id="getUserList" resultType="User"> SELECT <foreach collection="selectFields" item="field" separator=","> <choose> <when test="renameFields.contains(field)"> ${renameMap[field]} AS ${renameMap[field]} </when> <otherwise> ${field} </otherwise> </choose> </foreach> FROM user </select> ``` 上述代码,`renameFields` 是传入的用于重命名字段的 List,`renameMap` 是一个 Map,其键为原始字段名,值为重命名后的字段名。`<when>` 标签用于判断是否需要重命名字段,如果需要,则使用 `${renameMap[field]}` 进行重命名。 最后,在 Java 代码调用 MyBatis 的方法时,传入两个 List,并将它们作为参数传递给 SQL。 ```java List<String> selectFields = Arrays.asList("id", "name"); List<String> renameFields = Arrays.asList("id"); Map<String, String> renameMap = new HashMap<>(); renameMap.put("id", "user_id"); List<User> userList = userDao.getUserList(selectFields, renameFields, renameMap); ``` 在上述示例,`getUserList` 方法接收三个参数:`selectFields`、`renameFields` 和 `renameMap`,并返回符合条件的 User 对象列表。 通过以上方式,我们可以在 MyBatis 实现传入两个 List 的动态字段选择和重命名。请根据实际需求进行相应的调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值