resultMap中两张表id字段相同,数据查询异常解决
2017-11-21 16:11
309 查看
最近,在学习MyBatis 关联数据查询时,遇到了问题。
User表在本例子中存储文章作者的相关信息。User表的详细设计如下:
Article表存储了文章的相关内容。Article表的详细设计如下:
对应的实体类:
package com.test.mybatis.pojo;
public class User {
private int id;
private String name;
private int age;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
需要注意的是,Article持有的是User的引用,而不是userid。
MyBatis配置如下:
<resultMap type="Article" id="userArticleList">
<id column="id" property="id"/>
<result column="title" property="title"/>
<result column="content" property="content"/>
<association property="user" javaType="User">
<id column="id" property="id" />
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="address" property="address"/>
</association>
</resultMap>
<select id="queryArticlesByUser" parameterType="int" resultMap="userArticleList">
select user.id, user.name, user.age, user.address, article.id, article.title, article.content
from user, article where user.id = article.userid and user.id = #{id}
</select>在Test中,传递User的id为1,只能查询到一条数据,而直接在命令行执行SQL语句,却能够查询到四条数据。
两张表中的id字段名相同,导致无法正常映射。解决办法是为列起别名。
<resultMap type="Article" id="userArticleList">
<id column="id" property="id"/>
<result column="title" property="title"/>
<result column="content" property="content"/>
<association property="user" javaType="User">
<!-- 别名uid -->
<id column="uid" property="id" />
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="address" property="address"/>
</association>
</resultMap>
<select id="queryArticlesByUser" parameterType="int" resultMap="userArticleList">
select user.id uid, user.name, user.age, user.address, article.id, article.title, article.content
from user, article where user.id = article.userid and user.id = #{id}
</select>这样便能正确查到四条数据。
User表在本例子中存储文章作者的相关信息。User表的详细设计如下:
Article表存储了文章的相关内容。Article表的详细设计如下:
对应的实体类:
package com.test.mybatis.pojo;
public class User {
private int id;
private String name;
private int age;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
package com.test.mybatis.pojo; public class Article { private int id; private User user; private String title; private String content; public int getId() { return id; } public void setId(int id) { this.id = id; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
需要注意的是,Article持有的是User的引用,而不是userid。
MyBatis配置如下:
<resultMap type="Article" id="userArticleList">
<id column="id" property="id"/>
<result column="title" property="title"/>
<result column="content" property="content"/>
<association property="user" javaType="User">
<id column="id" property="id" />
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="address" property="address"/>
</association>
</resultMap>
<select id="queryArticlesByUser" parameterType="int" resultMap="userArticleList">
select user.id, user.name, user.age, user.address, article.id, article.title, article.content
from user, article where user.id = article.userid and user.id = #{id}
</select>在Test中,传递User的id为1,只能查询到一条数据,而直接在命令行执行SQL语句,却能够查询到四条数据。
两张表中的id字段名相同,导致无法正常映射。解决办法是为列起别名。
<resultMap type="Article" id="userArticleList">
<id column="id" property="id"/>
<result column="title" property="title"/>
<result column="content" property="content"/>
<association property="user" javaType="User">
<!-- 别名uid -->
<id column="uid" property="id" />
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="address" property="address"/>
</association>
</resultMap>
<select id="queryArticlesByUser" parameterType="int" resultMap="userArticleList">
select user.id uid, user.name, user.age, user.address, article.id, article.title, article.content
from user, article where user.id = article.userid and user.id = #{id}
</select>这样便能正确查到四条数据。
相关文章推荐
- MyBatis关联查询,表字段相同,resultMap映射问题的解决办法
- springMVC+mybatis查询数据,返回resultType=”map”时,如果数据为空的字段,则该字段省略不显示的解决方案
- MyBatis两张表中存在相同字段名,联表查询时的冲突解决办法
- MyBatis关联查询,表字段相同,resultMap映射问题的解决办法
- MyBatis关联查询,表字段相同,resultMap映射问题的解决办法
- MyBatis关联查询,表字段相同,resultMap映射问题的解决办法
- 四、数据库表中的字段名与实体类属性名不相同,可用resultMap解决
- mybatis查询有关联关系并且有相同字段的两张表问题解决
- mysql两张表相同数据查询显示其中一张表的字段
- Hibernate使用原生SQL多表查询时字段名相同导致查询数据覆盖问题解决办法
- node.js+mongoose通过mongodb的id来查询数据id类型不对问题的解决
- 查询数据表中某字段值是否有多条记录相同的sql语句
- SQL--查询相同字段的数据
- mongo里面根据对象字段的ID查询 db.Photo.find({'owner.$id':ObjectId('xxxx')}) , 并且使用forEach循环修改查询的数据
- thinkphp多表查询两表有重复相同字段解决方法
- mybatis异常:Could not find result map java.util.Map 问题分析及解决
- C++之map插入数据相同的key不能覆盖value解决办法
- mysql删除数据表内容后id 自动递增字段不是从1开始的解决办法
- Oracle 删除重复数据只留一条 查询及删除重复记录的SQL语句 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 wher
- sql server查询NodeId字段中距离某一时间最近的所有数据