mybatis一对多查询过程只查询了一个结果

来源:互联网 发布:网页游戏自动挂机软件 编辑:程序博客网 时间:2024/05/17 01:05

新学mybatis,在一对多关联查询过程中出现了一点bug

首先附上我的代码

User.java

public class User{public User(){// TODO Auto-generated constructor stub}private String userName;private String passWord;private int id;private Car car;private List<Order> orders;//订单public String getUserName(){return userName;}public void setUserName(String userName){this.userName = userName;}@Overridepublic String toString(){return "User [userName=" + userName + ", passWord=" + passWord + ", id=" + id + ", car=" + car + ", orders="+ orders + ", age=" + age + "]";}public List<Order> getOrders(){return orders;}public void setOrders(List<Order> orders){this.orders = orders;}public Car getCar(){return car;}public void setCar(Car car){this.car = car;}public String getPassWord(){return passWord;}public void setPassWord(String passWord){this.passWord = passWord;}public int getId(){return id;}public void setId(int id){this.id = id;}public int getAge(){return age;}public void setAge(int age){this.age = age;}private int age;}

Car.java

public class Car{private int id;private int pid;private String name;@Overridepublic String toString(){return "Car [id=" + id + ", pid=" + pid + ", name=" + name + "]";}public int getId(){return id;}public void setId(int id){this.id = id;}public int getPid(){return pid;}public void setPid(int pid){this.pid = pid;}public String getName(){return name;}public void setName(String name){this.name = name;}public Car(){// TODO Auto-generated constructor stub}}


Order.java//订单类

public class Order{private int id;private int price;private int cid;public void setId(int id){this.id = id;}@Overridepublic String toString(){return "Order [id=" + id + ", price=" + price + ", cid=" + cid + "]";}public int getId(){return id;}public int getPrice(){return price;}public void setPrice(int price){this.price = price;}public int getCid(){return cid;}public void setCid(int cid){this.cid = cid;}}

然后是user,orders,car的三个表的表结构

出于清晰明了,我这里直接截图


user 表:


car表


orders表





UserMapper.xml中的相关查询代码如下:

<select id="selectUser" resultMap="userMap">    select * from user u inner join car on u.id=pid inner join orders on u.id=cid where u.id = #{id}  </select>    <resultMap type="u" id="userMap">  <id column="id" property="id"/>  <result column="userName" property="userName"/>  <result column="passWord" property="passWord"/>  <result column="age" property="age"/>   <association property="car" javaType="com.zzc.po.Car">//一对一的关联pojo   <id column="id" property="id"/>  <result column="name" property="name"/>  <result column="pid" property="pid"/>  </association>  <collection property="orders"   ofType="com.zzc.po.Order" >//一对多的关联pojo  <id column="id" property="id"/>  <result column="cid" property="cid"/>  <result column="price" property="price"/>  </collection>  </resultMap>


测试:

SqlSession  session = null;@Beforepublic void before() throws IOException{String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory  = new SqlSessionFactoryBuilder().build(inputStream);session = sqlSessionFactory.openSession();}public Tests(){// TODO Auto-generated constructor stub}@Testpublic void demo1() throws IOException{UserMapper mapper = session.getMapper(UserMapper.class);User user = mapper.selectUser(2);System.out.println(user);//System.out.println(mapper.insertUser("323", "111", 11));//User u = new User();//u.setPassWord("asas");//u.setUserName("q323");//System.out.println(mapper.insertUser2(u));//System.out.println(mapper.insertUserGetKey(u));//System.out.println(u.getId());}@Afterpublic void after(){session.commit();session.close();}


输出台部分输出:
2016 十一月 28 18:13:25,622 DEBUG selectUser:145 - ==>  Preparing: select * from user u inner join car on u.id=pid inner join orders on u.id=cid where u.id = ? 2016 十一月 28 18:13:25,691 DEBUG selectUser:145 - ==> Parameters: 2(Integer)2016 十一月 28 18:13:25,719 DEBUG selectUser:145 - <==      Total: 2User [userName=www, passWord=123, id=2, car=Car [id=2, pid=2, name=rrr], orders=[Order [id=2, price=2000, cid=2]], age=101]


在navicat执行该sql:



可以看到这个user下面有两个与之关联的订单 但是java执行却只显示一个 


这不是mybatis配置问题 也不是sql语句问题

而是user表和ordesr表的主键名都为id所引起的,不知道mybatis内部是什么机制去处理的   改为不同名的主键便ok了

具体原因得在日后深入源码学习再来这里公布


mybatis一对多具体的请看:http://www.tuicool.com/articles/M3QJvu

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 灌浆记录仪存盘满了怎么办 自首后发现无罪证据怎么办 中国劲酒过期了怎么办 玻尿酸流到眼皮怎么办 手指被胶带缠紫了怎么办 打玻尿酸不平整怎么办 孩子被老师体罚我该怎么办 孩子妈妈入狱了我该怎么办 机顶盒电视收不到台怎么办 跳芭蕾舞下面硬起来了怎么办 深情密码结局赵深深怎么办 宝宝头着地摔了怎么办 小孩头着地摔了怎么办 头朝下墩了脖子怎么办 两岁摔倒头着地怎么办 马桶大便冲不下去怎么办 脚丫吧里起泡痒怎么办 脚受伤后肿了怎么办 摔到了腿受伤了怎么办 骑车摔倒了肿了怎么办 生活大冒险老婆失踪了怎么办 手机qq图裂了怎么办 qq发的图裂了怎么办 抖音账号搬运多怎么办 别人搜不到我QQ怎么办 qq号被限制解封怎么办 买的桌子会晃怎么办 车子座椅皮坏了怎么办 裤子被椅子刮了怎么办 脚麻了被别人动怎么办 毛孔又粗又黑怎么办 手臂睡觉压麻了怎么办 睡觉压的胳膊麻怎么办 摔跤摔到腰肿了怎么办 牛奶喝多了拉稀怎么办 doc文档下载是乱码怎么办 家人被教练技术骗了怎么办 十个月宝宝不爱喝水怎么办 离婚后孩子找爸爸怎么办 离婚后孩子要找爸爸怎么办 断奶期间胸涨的难受怎么办