MyBatis——多对一

准备数据库表schools和teachers:

数据库数据:

teachers:schools:

maven依赖:

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
	<dependency>
	    <groupId>mysql</groupId>
	    <artifactId>mysql-connector-java</artifactId>
	    <version>6.0.6</version>
	</dependency>
	  	
	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis</artifactId>
	    <version>3.5.3</version>
	</dependency>

项目结构:

1.定义School.java和Teacher.java类,Teacher对象里包含一个School对象

Teacher.java

/**
 * createtime : 2019年10月22日 上午11:01:24
 */
package com.manytoone.models;

/**
 * TODO
 * @author XWF
 */
public class Teacher {
	private int id;
	private String name;
	private School school;//对应学校
	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 School getSchool() {
		return school;
	}
	public void setSchool(School school) {
		this.school = school;
	}
	@Override
	public String toString() {
		return "Teacher [id=" + id + ", name=" + name + ", school=" + school + "]";
	}
	
}

School.java

/**
 * createtime : 2019年10月22日 上午11:01:13
 */
package com.manytoone.models;

/**
 * TODO
 * @author XWF
 */
public class School {
	private int id;
	private String name;
	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;
	}
	@Override
	public String toString() {
		return "School [id=" + id + ", name=" + name + "]";
	}
	
}

2.配置mybatis的xml文件

mybatis_mto.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>
	<properties resource="com/manytoone/configs/mysql.properties"></properties>
	
	<typeAliases>
		<typeAlias alias="myTeacher" type="com.manytoone.models.Teacher"/>
		<typeAlias alias="mySchool" type="com.manytoone.models.School"/>
	</typeAliases>
	
	<environments default="development">
	    <environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">  
			    <property name="driver" value="${driver}"/>
			    <property name="url" value="${url}"/>
			    <property name="username" value="${username}"/>
			    <property name="password" value="${password}"/>
            </dataSource>
		</environment>
	</environments>

	<mappers>
		<mapper resource="com/manytoone/mappers/Teacher.xml"/>
	</mappers>
</configuration>

mysql.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://192.168.1.244:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username=root
password=root

3.映射文件Teacher.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="manytoone.mapper">
	<resultMap id="teacherResultMap" type="myTeacher">
		<id property="id" column="tid"/>
		<result property="name" column="tname"/>
		<association property="school" javaType="mySchool">
			<id property="id" column="id"/>
			<result property="name" column="school_name"/>
		</association>
	</resultMap>
	
	<select id="getTeacherById" resultMap="teacherResultMap" parameterType="int">
		select t.id tid, t.teacher_name tname, s.*
		from teachers t, schools s
		where t.school_id = s.id and t.id = #{id}
	</select>
</mapper>

注:两个表有重复字段要用别名,否则会导致查询出赋值为同一个值;

4.测试Demo:

/**
 * createtime : 2019年10月22日 上午10:04:16
 */
package com.manytoone;

import java.io.IOException;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.manytoone.models.Teacher;

/**
 * TODO
 * @author XWF
 */
public class MainManyToOne {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("com/manytoone/configs/mybatis_mto.xml"));
			SqlSession session = factory.openSession();
			Teacher teacher = session.selectOne("manytoone.mapper.getTeacherById", 4);
			System.out.println(teacher.getId());
			System.out.println(teacher.getName());
			System.out.println(teacher.getSchool());
			session.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

结果:

 

 

 

参考:

https://www.yiibai.com/mybatis/mybatis-many2one.html

https://www.cnblogs.com/jimisun/p/9414148.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值