Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Spring mvc和MyBatis连接四个表_Java_Spring Boot_Spring Mvc_Mybatis_Spring Mybatis - Fatal编程技术网

Java 如何使用Spring mvc和MyBatis连接四个表

Java 如何使用Spring mvc和MyBatis连接四个表,java,spring-boot,spring-mvc,mybatis,spring-mybatis,Java,Spring Boot,Spring Mvc,Mybatis,Spring Mybatis,我使用的是Spring和MyBatis,在JSP中连接四个表以获取数据时遇到了问题 我的模型: 用户: 详细用户: public class DetailUserVN { private Long detail_user_vn_id; private User user_id; private String code_level; private Date start_date; private Date end_start; private int tota

我使用的是Spring和MyBatis,在JSP中连接四个表以获取数据时遇到了问题 我的模型:

用户:

详细用户:

public class DetailUserVN {
   private Long detail_user_vn_id;
   private User user_id;
   private String code_level;
   private Date start_date;
   private Date end_start;
   private int total;
   // getter and setter
}
群主:

public class GroupMaster {  
   private Long group_id;
   private String group_name;
   // getter and setter
}
VNMaster:

class VNMaster {
   private String code_level;   
   private String name_level;
   // getter and setter
}
UserMapper.java

@Select("SELECT users.user_id, "
        + "users.full_name, "
        + "users.birthday, "
        + "mst_group.group_name, "
        + "users.email, users.tel, "
        + "mst_vn.name_level, "
        + "tbl_detail_user_vn.end_date, "
        + "tbl_detail_user_vn.total "           
+ "FROM users "
+ "INNER JOIN tbl_detail_user_vn " 
+   "ON tbl_detail_user_vn.detail_user_vn_id = users.user_id "    
+ "INNER JOIN mst_vn " 
+   "ON mst_vn.code_level = tbl_detail_user_vn.code_level "   
+ "INNER JOIN mst_group "
+   "ON mst_group.group_id = users.group_id")   
public List<User> getAllUsers();

SQL查询返回包含所需数据的结果集,但您尚未指定如何将此结果集映射到所使用的对象结构

让我们考虑一个字段值,您尝试显示<代码>用户.GROPGIID.GROPPENNEX/COD>(对于其他字段,情况更复杂,请参阅下面关于此的一些想法)。 在结果集中具有name

group\u name
的字段中返回组名数据。但是mybatis不知道应该为该字段和类型为
GroupMaster
的对象创建,并且
group\u name
中的值应该设置为该对象的
group\u name
属性

您需要为
User
GroupMaster
实体之间的关联指定映射。不幸的是,当您使用联接通过单个查询选择实体和关联实体时,无法使用mybatis中的注释映射此类关联。但这可以通过使用xml映射来实现

但在开始之前,您需要包括参与结果集联接的每个实体的唯一id。这意味着您需要包括
组id
等。如果没有这些字段,mybatis将创建重复的实体,但如果不同的
用户
实体引用
mst\u组
表中的相同记录,则您很可能只希望为它们创建一个
GroupMaster

您可以在
UserMapper.xml
中创建xml映射,该映射与
UserMapper
界面位于同一个包中,如下所示:

<resultMap id="userMap" type="User">
  <id property="user_id" column="user_id"/>
  <result property="full_name" column="full_name"/>
  <result property="birthday" column="birthday"/>
  <association property="group_id" javaType="GroupMaster">
    <id property="group_id" column="group_id"/>
    <result property="group_name" column="group_name"/>
  </association>
</resultMap>

然后,您将能够使用与
GroupMaster

相同的方法映射此关联。Hi@Roman Konova,我已经用您的解决方案进行了更新,但它发生了一个错误,因为我在我的问题中进行了更新。您不应该盲目使用代码。它没有经过测试,在这里只是为了证明这个想法。我已经修复了导致该问题的地图定义中的打字错误,但可能还有其他问题。我已经根据您的想法进行了更新和修改,这很好,因此在UserMapper.xml中我可以使用:对于另一个表?不,您不能这样做,因为
User
中没有
code\u level
属性。我已经解释了关联映射的含义以及它是如何工作的。
public List<User> getAllUsers() {
    return userMapper.getAllUsers();        
}
public class UserController {

@Autowired
private UserService userService;
@RequestMapping(value="/login", method=RequestMethod.POST)
public String getAllUser(ModelMap model) {
List<User> listUser = userService.getAllUsers();
        model.put("listUser", listUser);
        logger.info("list of renter is: " + listUser);

        return "getUser";
  }
}
<div class="">                              
        <c:if test="${not empty listUser}">
            <table border="1" cellpadding="5">
                <tr>
                    <th style="background-color: #e9ecef;">ID</th>
                    <th style="background-color: #e9ecef;">Họ tên ▲▽</th>
                    <th style="background-color: #e9ecef;">Ngày sinh</th>                               
                    <th style="background-color: #e9ecef;">Phòng ban</th>
                    <th style="background-color: #e9ecef;">Email</th>
                    <th style="background-color: #e9ecef;">Phone number</th>                        
                    <th style="background-color: #e9ecef;">Tring do ▲▽</th>
                    <th style="background-color: #e9ecef;">Ngay het han ▲▽</th>
                    <th style="background-color: #e9ecef;">Tong</th>
                </tr>
                <c:forEach items="${listUser}" var="user">
                <tr>
                    <td>${user.user_id}</td>
                    <td>${user.full_name}</td>
                    <td>${user.birthday}</td>     
                    <td>${user.group_id.group_name}</td>                        
                    <td>${user.email}</td>
                    <td>${user.tel}</td>
                    <td>${mst_vn.name_level}</td>
                    <td>${tbl_detail_user_vn.end_date}</td>
                    <td>${tbl_detail_user_vn.total}</td>
                </tr>
                </c:forEach>
            </table>
        </c:if>                                 
    </div>      
<td>${user.group_id.group_name}</td>
<td>${mst_vn.name_level}</td>
<td>${tbl_detail_user_vn.end_date}</td>
<td>${tbl_detail_user_vn.total}</td>
org.apache.ibatis.reflection.ReflectionException: There is no setter for property named 'user' in 'class com.you.springmybatis.model.User'
<resultMap id="userMap" type="User">
  <id property="user_id" column="user_id"/>
  <result property="full_name" column="full_name"/>
  <result property="birthday" column="birthday"/>
  <association property="group_id" javaType="GroupMaster">
    <id property="group_id" column="group_id"/>
    <result property="group_name" column="group_name"/>
  </association>
</resultMap>
@ResultMap("com.you.mapper.UserMapper.userMap")
@Select("SELECT users.user_id, "
        + "users.full_name, "
        + "users.birthday, "
        + "mst_group.group_name, "
        + "users.email, users.tel, "
        + "mst_vn.name_level, "
        + "tbl_detail_user_vn.end_date, "
        + "tbl_detail_user_vn.total "           
+ "FROM users "
+ "INNER JOIN tbl_detail_user_vn " 
+   "ON tbl_detail_user_vn.detail_user_vn_id = users.user_id "    
+ "INNER JOIN mst_vn " 
+   "ON mst_vn.code_level = tbl_detail_user_vn.code_level "   
+ "INNER JOIN mst_group "
+   "ON mst_group.group_id = users.group_id")   
public List<User> getAllUsers();
<resultMap id="RM" type="A">
  <association property="pB" javaType="B">
    <id property="id" column="b_id"/>
    <result property="name" column="b_name"/>
  </association>
</resultMap>
private DetailUserVN detail;