ssm一对多查询

ssm一对多查询,如一个用户可以有多个购物订单

1.用户表,三个字段,然后将对应的明细表useinfo映射到user类里

package com.xqbk.model;


import java.io.Serializable;
import java.util.List;

public class User implements Serializable {

    private int  uId;
    private String password;
    private String username;
    private List<UserInfo> userinfo;


    public int getId() {
        return uId;
    }

    public void setId(int uId) {
        this.uId = uId;
    }


    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public List<UserInfo> getUserinfo() {
        return userinfo;
    }

    public void setUserinfo(List<UserInfo> userinfo) {
        this.userinfo = userinfo;
    }
}

2.userinfo表

package com.xqbk.model;

import java.io.Serializable;

public class UserInfo  implements Serializable {

    private Integer id;
    private Integer userId;
    private String orderName;
    private String orderTime;



    private User user;//



    public Integer getId() {
        return id;
    }


    public void setId(Integer id) {
        this.id = id;
    }


    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getOrderName() {
        return orderName;
    }

    public void setOrderName(String orderName) {
        this.orderName = orderName == null ? null : orderName.trim();
    }


    public String getOrderTime() {
        return orderTime;
    }


    public void setOrderTime(String orderTime) {
        this.orderTime = orderTime == null ? null : orderTime.trim();
    }
    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

3.usermapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- 设置为IUserDao接口方法提供sql语句配置 -->
<mapper namespace="com.xqbk.dao.IUserDao">
  <!-- 引入redis二级缓存,同时在需要缓存的语句上加 useCache="true" -->
  <!--<cache type="com.xqbk.util.RedisCache"></cache> -->

  <!-- 根据id查询user-->
  <select id="selectUser" resultType="User" parameterType="String" >
    SELECT * FROM user WHERE password = #{id}
  </select>

  <!-- 定义数据库字段与实体对象的映射关系 -->
  <!-- columnw为数据库字段名,property为实体类里属性 -->
  <resultMap id="UserBean" type="User" >
    <id column="u_id" property="uId"/>
    <result column="password" property="password"/>
    <result column="username" property="username"/>
    <!-- 一对多的关系 -->
    <!-- property: 指的是集合属性的值, ofType:指的是集合中元素的类型 -->
    <collection property="userinfo" ofType="UserInfo">
      <id column="id" property="id"/>
      <result column="user_id" property="userId"/>
      <result column="order_name" property="orderName"/>
      <result column="order_time" property="orderTime"/>
    </collection>
  </resultMap>

  <!-- 关联查询语句 -->
  <select id="selectUserInfoByName" parameterType="string" resultMap="UserBean" >
    SELECT * FROM USER,user_info WHERE user.u_id=user_info.user_id AND user.username=#{username};
  </select>

</mapper>

4.service和dao接口里这样定义

User selectUserInfoByName(String username);

5.controller里测试

User user=this.userService.selectUserInfoByName("测试名字");
System.out.println("获取user长度---------"+user.getUserinfo().size());

List<UserInfo>  userInfoList=user.getUserinfo();
for (UserInfo userinfo : userInfoList) {
    System.out.println("集合里:"+userinfo.getOrderName());
}

备注:

如果发现应该是多条数据,结果就查出一条,

原因:主表和明细表的id字段名相同造成的

解决方案:修改主表或者明细表的id名,保证不一致就行

猜你喜欢

转载自blog.csdn.net/qq_23337175/article/details/82149278