1. 程式人生 > >MyBatis一對一對映查詢

MyBatis一對一對映查詢

1、ResultMap

resultMap 元素是 MyBatis 中最重要最強大的元素。它可以讓你從 90% 的 JDBC ResultSet 資料提取程式碼中解放出來, 並在一些情形下允許你做一些 JDBC 不支援的事情。 實際上,在對複雜語句進行聯合對映的時候,它很可能可以代替數千行的同等功能的程式碼。

2、ResultMap的應用場景

<resultMap id="userResultMap" type=“user">
  <id property="id" column="user_id" />
  <result property="username" column="user_name"/>
  <result property="password" column="hashed_password"/>
</resultMap>
 
<select id="queryUser" resultMap="userResultMap">
SELECT user_id, user_name, hashed_password
FROM user
WHERE id=#{id}
</select>
針對上面這種資料庫表字段命名與實體類屬性名不能精準匹配的場景我們可以使用resultMap進行轉換,當然針對此種場景使用別名是更好的解決方案。resultMap更優秀地方在於高階結果對映

3、在MySQL資料庫中建立表和資料

建立教師表和學生表,這裡我們假設一個老師只負責教一個學生,那麼老師和學生之間的關係就是一種一對一的關係。

4、定義實體類

TeacherBean,TeacherBean是teacher表對應的實體類

/**
 * @author xuehj2016
 */
public class TeacherBean {
    private int tid;
    private String tname;
    private String tsex;

    public int getTid() {
        return tid;
    }

    public void setTid(int tid) {
        this.tid = tid;
    }

    public String getTname() {
        return tname;
    }

    public void setTname(String tname) {
        this.tname = tname;
    }

    public String getTsex() {
        return tsex;
    }

    public void setTsex(String tsex) {
        this.tsex = tsex;
    }
}

StudentBean,StudentBean是student表對應的實體類

/**
 * @author xuehj2016
 */
public class StudentBean {
    private int id;
    private String name;
    private String sex;
    private int tid;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getTid() {
        return tid;
    }

    public void setTid(int tid) {
        this.tid = tid;
    }
}

定義操作 person 表的sql對映檔案personMapper.xml