1. 程式人生 > >如何配置mybatis對應的xml如何配置一對多關係(實現表之間的一對多關係的xml)的xml檔案?

如何配置mybatis對應的xml如何配置一對多關係(實現表之間的一對多關係的xml)的xml檔案?

先配置一個mybatis.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 記得一定要加這個,否則報錯都不會提示 -->
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 這個非常有用,這是在你處理SQL語句時會通過log4j將對應的SQL語句列印顯示出來 -->
	<settings>
		 <setting name="logImpl" value="STDOUT_LOGGING" />
	</settings>
	<mappers>
		<!-->這裡可以配置多個操作的xml-->
		<mapper resource="user.xml" />
	</mappers>
</configuration> 

假設資料庫中有兩個表,老師表與班級表
老師表如下:

CREATE TABLE `t_teacher` (
	`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '自增id',
	`name` VARCHAR(50) NOT NULL COMMENT '名稱',
	PRIMARY KEY (`id`)
)
COMMENT='老師資訊表'
COLLATE='gbk_chinese_ci';

班級表如下:

CREATE TABLE `t_class` (
	`id` bigint NOT NULL COMMENT '與老師表有主外來鍵關係',
	`class_name` VARCHAR(50) NOT NULL COMMENT '班級名稱'
)
COMMENT='班級表'
COLLATE='gbk_chinese_ci';

主外來鍵關係建立

ADD CONSTRAINT 'class_teacher_key' FOREIGN KEY (`id`) REFERENCES`t_teacher` (`id`);

對應實體類

import java.util.List;

public class Teacher {
	private Long id;
	private String teacherName;

	// 一個老師對應多個班級
	private List<ClassRoom> classRoom;

	public Teacher() {
	}

	public Teacher(Long id, String teacherName, List<ClassRoom> classRoom) {
		super();
		this.id = id;
		this.teacherName = teacherName;
		this.classRoom = classRoom;
	}

	public Long getId() {
		return id;
	}

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

	public String getTeacherName() {
		return teacherName;
	}

	public void setTeacherName(String teacherName) {
		this.teacherName = teacherName;
	}

	public List<ClassRoom> getClassRoom() {
		return classRoom;
	}

	public void setClassRoom(List<ClassRoom> classRoom) {
		this.classRoom = classRoom;
	}

	@Override
	public String toString() {
		return "Teacher [id=" + id + ", teacherName=" + teacherName + "]";
	}

}
public class ClassRoom {
	private Long id;
	private String className;

	public ClassRoom() {
	}

	public ClassRoom(Long id, String className) {
		super();
		this.id = id;
		this.className = className;
	}

	public Long getId() {
		return id;
	}

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

	public String getClassName() {
		return className;
	}

	public void setClassName(String className) {
		this.className = className;
	}

	@Override
	public String toString() {
		return "ClassRoom [id=" + id + ", className=" + className + "]";
	}

}

現在配置user.xml的SQL語句操作以及配置一對多關係

	<!-- column 放資料庫列名,property放實體類屬性名 -->
	<mapper namespace="dao介面">
		<resultMap type="實體類包名" id="teacherMap">
			<id column="id" property="id" />
			<result column="name' property="teacherName"/>
		
			<collection property="classRoom" ofType="實體類路徑">
				<id column="id" property="id" />
				<result column="class_name' property="className" />
			</collection>
		</resultMap>
		<!-- SQL語句操作 -->
		<select id="selectTeacherToClass" resultMap="teacherMap">
			select * from t_teacher t,t_class c where t.name = #{teacherName} and t.id  = c.id;
		</select>
	</mapper>

如上面的配置,就可以通過teacherName 查詢得到他對應的班級

謝謝!!! 寫的不好,望請見諒!