三表聯查

HELLO_FANDONGBING發表於2019-12-19

1.使用者表(一對多 --------->中間表)

2.請假型別表(一對一 ---------------->中間表)
在這裡插入圖片描述
3.中間表
中間表 mid------>使用者表id
中間表 type------>請假型別表(的)id
在這裡插入圖片描述

一對多用collection
一對一用assocation
重點
oftype 在此標籤中有 collection
javaType 在此標籤中有 assocation

<mapper namespace="com.enjoylearning.mybatis.mapper.TMianMapper">
	<resultMap id="BaseResultMap" type="TMian">
		<id column="id" property="id" jdbcType="INTEGER" />
		<result column="name" property="name" jdbcType="VARCHAR" />
	    <result column="email" property="email" jdbcType="VARCHAR" />
		<collection property="tmianzhongjian" ofType="java.util.HashMap" >
			<result column="id" property="id" jdbcType="INTEGER" />
			<result column="type" property="type" jdbcType="INTEGER" />
			<result column="daytime" property="daytime" jdbcType="INTEGER" />
			<result column="mid" property="mid" jdbcType="INTEGER" />
				<association property="tmianjia" javaType="com.enjoylearning.mybatis.entity.TMianJia">
	              <id column="id" property="id"></id>
	               <id column="tname" property="tname"></id>
	             </association>
		</collection>
	</resultMap>

<select id="heheda1" resultMap="BaseResultMap">
SELECT a.*,b.*,c.* FROM t_mian_jia a,t_mian_zhong_jian b,t_mian c
WHERE b.type=a.id AND b.mid = c.id;
</select>



</mapper>
public class MybatisDemo {

	private SqlSessionFactory sqlSessionFactory;

	@Before
	public void init() throws IOException {
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 1.讀取mybatis配置檔案創SqlSessionFactory
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		inputStream.close();
	}
    @Test
	public void testSelectUserById(){
	    SqlSession sqlSession =  sqlSessionFactory.openSession();
	    try {
	        //這個例子的XML和介面都定義在UserMapper中
	    	TMianMapper userMapper = sqlSession.getMapper(TMianMapper.class);
	    	List<TMian> tuser = userMapper.heheda1();
	    	for(int i = 0;i<tuser.size();i++){
	    		tuser.get(i).getId();
	    	}
	    } finally {
	        sqlSession.close();
	    }
	}
}

使用者表的例項(一條此表對應多條中間表資料)因此List

public class TMian {

	private int id;
	private String name;
	private String email;
	private List<TMianZhongJian> tmianzhongjian;
	
	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 getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
}

public class TMianJia {

	private int id;
	private String tname;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getTname() {
		return tname;
	}
	public void setTname(String tname) {
		this.tname = tname;
	}
}

中間表的例項(此表中的一條資料對應一條請假型別表中的資料)因此是TMianJia tmianjia

public class TMianZhongJian {

	private int id;
	private int type;
	private int daytime;
	private int mid;
	
	private TMianJia tmianjia;
	
	public TMianJia getTmianjia() {
		return tmianjia;
	}
	public void setTmianjia(TMianJia tmianjia) {
		this.tmianjia = tmianjia;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getType() {
		return type;
	}
	public void setType(int type) {
		this.type = type;
	}
	public int getDaytime() {
		return daytime;
	}
	public void setDaytime(int daytime) {
		this.daytime = daytime;
	}
	public int getMid() {
		return mid;
	}
	public void setMid(int mid) {
		this.mid = mid;
	}
	
	
}

個人建議碰見多表聯查時候
每兩兩表的關係是相對
1.如使用者表一條資料對應多條中間表資料, 一條表中間表的資料對應一條請假詳情表,這是一個完整的思路(以使用者為主)
2.反過來思考,一條中間表資料對應一條數使用者表資料,一條中間表對應一條詳情表資料,這也是一個完整的思路。(以中間表為主)當然對應關係就不能以上面的程式碼了。

文章屬於自己總結的 程式碼並沒有按規範來 希望大家理解見諒(當然也是個人面試碰見的 )

附上演示效果
在這裡插入圖片描述

相關文章