天天看點

mybatis 關聯查詢

insert:

          parameterType  參數類型 :你傳遞的參數類型 ,如果有接口的話 就不用說清楚這個類型

          selectKey:

                          keyProperty  屬性名稱

                          keyColumn  列名

                          resultType  傳回值類型

                          order:

                                   BEFORE 在insert之前執行 用于建立ID使用

                                   AFTER 在insert之後執行 用于得到自動編号ID

        select:

                  association(關聯關系映射)  關聯資料 或者 關聯查詢

public class Student {
    private Integer sid;
    private String sname;
    private String address;
    private String email;
    private classroom cls; //表中的cls對象查詢 student時将classroom對象中的資料也拿出來
    private String phonenumber;
    private Integer cid;
}
————————————————————————————————————
public class classroom {
    private Integer cid;
    private String curriculum;
}           

 關聯關系相對應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">
<mapper namespace="com.sun.mybatis.dao.StudentMappr">
    <insert id="inse" parameterType="com.sun.mybatis.dao.Student">
        INSERT INTO student(sname,address,email,phonenumber,cid)
        VALUES(#{sname},#{address},#{email},#{phonenumber},#{cid})
        <selectKey keyProperty="sid" order="AFTER" resultType="java.lang.Integer" keyColumn="sid">
            -- 這裡的傳回類型要寫resultType="java.lang.Integer"不然無法識别你要傳回的類型
            -- 這是查詢傳回你插入的主鍵号,因為自動編号是無法識别你摻入的是第幾列order="AFTER"這裡參數是之後,因為是插入完再拿到值
            SELECT LAST_INSERT_ID()
        </selectKey>
    </insert>
    <resultMap id="SelStuCls" type="com.sun.mybatis.dao.Student">
        <id column="sid" property="sid"/>
        <result column="sname" property="sname"/>
        <result column="address" property="address"/>
        <result column="email" property="email"/>
        <result column="phonenumber" property="phonenumber"/>
        <association property="cls" javaType="com.sun.mybatis.dao.classroom">
            <!--這裡classroom是student的關聯表-->
            <!--将classroom對象放入Student中的cls對象當中-->
            <result column="cid" property="cid"></result>
            <result column="curriculum" property="curriculum"></result>
        </association>
    </resultMap>
    <select id="SelectStuAndCls" resultMap="SelStuCls">
        SELECT s.*,c.`curriculum`FROM student s INNER JOIN classroom c ON s.cid=c.cid
    </select>
    <select id="SelectStu" resultMap="SelStuCls">
     --    resultMap 映射結果集
     --   resultMap拿到SelStuCls映射檔案 對應的是要拿出來的資料
        SELECT s.*,c.`curriculum`FROM student s INNER JOIN classroom c ON s.cid=c.cid where sid=#{param1}
    </select>
</mapper>           

main操作類寫法

public class Teat {
    public static void main(String[] args) {
        SqlSessionFactory sqlSessionFactory = Mybatisconfig.sqlSessionFactory;
        SqlSession sqlSession = sqlSessionFactory.openSession();
        StudentMappr studentMappr = sqlSession.getMapper(StudentMappr.class);
        Student>students = studentMappr.select();
        
    }
}