MyBatis——一对多

准备数据库表teachers和schools:

准备数据:

添加mybatis依赖:

<!-- 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.4.6</version> -->
	    <version>3.5.3</version>
	</dependency>

注:如果运行时报警告,是jdk版本过高,换最新的mybatis版本;

项目结构:

1.写School.java和Teacher.java,School里包含一个Teacher列表

Teacher.java

package com.onetomany.models;

import java.io.Serializable;

public class Teacher implements Serializable{
	private static final long serialVersionUID = -5626023363831122246L;
	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 "Teacher [id=" + id + ", name=" + name + "]";
	}
	
}

School.java

package com.onetomany.models;

import java.io.Serializable;
import java.util.List;

public class School implements Serializable{
	private static final long serialVersionUID = -6214306951954536522L;
	private int id;
	private String name;
	private List<Teacher> teachers;
	public List<Teacher> getTeachers() {
		return teachers;
	}
	public void setTeachers(List<Teacher> teachers) {
		this.teachers = teachers;
	}
	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;
	}
	
}

2.mybatis配置

mybatis_otm.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/onetomany/configs/mysql.properties"></properties>
	
	<typeAliases>
		<typeAlias alias="myschool" type="com.onetomany.models.School" />
		<typeAlias alias="myteacher" type="com.onetomany.models.Teacher" />
	</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/onetomany/mappers/school.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.映射school.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="onetomany.mapper">

	<resultMap id="schoolmap" type="myschool">
		<id property="id" column="id"/>
		<result property="name" column="school_name"/>
		<collection property="teachers" ofType="myteacher" column="school_id">
			<id property="id" column="tid" javaType="int" jdbcType="INTEGER"/>
			<result property="name" column="teacher_name" javaType="string" jdbcType="VARCHAR"/>
		</collection>
	</resultMap>

	<select id="getSchoolById" parameterType="int" resultMap="schoolmap">
		SELECT s.*, t.id tid, t.teacher_name
		FROM schools s, teachers t
		WHERE s.id=t.school_id AND s.id=#{id}
    </select>
</mapper>

注:两个表有相同的id字段,所以要用别名,不然造成干扰,结果就是School的Teacher列表里只会查到一条记录;

4.测试Demo:

/**
 * 2018年12月3日上午9:41:28
 */
package com.onetomany;

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.onetomany.models.School;

/**
 * @author XWF
 *
 */
public class MainOneToMany {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("com/onetomany/configs/mybatis_otm.xml"));
		SqlSession session = sessionFactory.openSession();
		School school = session.selectOne("onetomany.mapper.getSchoolById", 2);
		System.out.println(school.getId());
		System.out.println(school.getName());
		System.out.println(school.getTeachers());
		session.close();
	}

}

结果:

 

 

 

参考:https://www.yiibai.com/mybatis/mybatis-one2many.html

https://www.jianshu.com/p/8e7575c63deb

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值