MyBitis(iBitis)系列随笔之四:多表(多对一查询操作)

时间:2023-03-08 17:32:05

前面几篇博客介绍的都是单表映射的一些操作,然而在我们的实际项目中往往是用到多表映射。至于多表映射的关键要用到mybitis的association来加以实现。
          这篇介绍的是多表中的多对一表关联查询
          先做一些准备工作
  创建两张表:一张是用户,一张是用户所对应的移动手机,一户用户可以有部移动手机。
   
     这是用户t_user表
          MyBitis(iBitis)系列随笔之四:多表(多对一查询操作)

这是移动电话t_mobile表
        MyBitis(iBitis)系列随笔之四:多表(多对一查询操作)

创建表对应的JavaBean对象

User对象

  1. package com.jefry;
  2. public class User {
  3. private int id;
  4. private String userName;
  5. private String password;
  6. public String getUserName() {
  7. return userName;
  8. }
  9. public void setUserName(String userName) {
  10. this.userName = userName;
  11. }
  12. public String getPassword() {
  13. return password;
  14. }
  15. public void setPassword(String password) {
  16. this.password = password;
  17. }
  18. public int getId() {
  19. return id;
  20. }
  21. public void setId(int id) {
  22. this.id = id;
  23. }
  24. }

Mobile对象:

  1. package com.jefry;
  2. public class Mobile {
  3. private int id;
  4. private String telnumber;
  5. private User user;
  6. public int getId() {
  7. return id;
  8. }
  9. public void setId(int id) {
  10. this.id = id;
  11. }
  12. public String getTelnumber() {
  13. return telnumber;
  14. }
  15. public void setTelnumber(String telnumber) {
  16. this.telnumber = telnumber;
  17. }
  18. public User getUser() {
  19. return user;
  20. }
  21. public void setUser(User user) {
  22. this.user = user;
  23. }
  24. }

修改configure文件对象别名:

  1. <typeAliases>
  2. <typeAlias alias="User" type="com.jefry.User"/>
  3. <typeAlias alias="Mobile" type="com.jefry.Mobile"/>
  4. </typeAliases>

修改表映射文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="mobile">
  6. <resultMap id="userResultMap" type="Mobile">
  7. <id property="id" column="id"/>
  8. <result property="telnumber" column="telnumber"/>
  9. <association property="user" javaType="User">
  10. <id property="id" column="id"/>
  11. <result property="userName" column="name"/>
  12. <result property="password" column="pass"/>
  13. </association>
  14. </resultMap>
  15. <!--多表查询操作-->
  16. <select id="selectMobile" parameterType="int"  resultMap="userResultMap" >
  17. <!--分别为mobile的主键id与user的主键id赋值别名,避免因为两个表字段名称相同而注入到对应对象名称冲突-->
  18. select m.id m_id,m.telnumber,u.id u_id,u.name,u.pass from t_mobile m,t_user u where m.userid = u.id and m.id = #{id}
  19. </select>
  20. </mapper>