mybatis的一对多
1、配置文件
db.properties
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8
db.username=root
db.password=123456
SqlMapConfig.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> <!-- 加载java的配置文件 -->
<properties resource="config/db.properties"/> <!-- 配置mybatis的环境信息,与spring整合,该信息由spring来管理 -->
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用mybatis连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${db.driver}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
</dataSource>
</environment>
</environments> <!-- 加载映射文件 -->
<mappers>
<mapper resource="config/mapper.xml" />
</mappers> </configuration>
mapper.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.xiaostudy.domain.Mapper"> <!-- ========================================================================================== -->
<!-- 一对多之resultMap1 -->
<select id="findOfTeacher" resultMap="OfTeacher">
select * from teacher t, student s where t.tid=s.tid and t.tid=#{id}
</select>
<resultMap type="com.xiaostudy.domain.Teacher" id="OfTeacher">
<id column="tid" property="tid"/>
<result column="tname" property="tname"/>
<collection property="student" ofType="com.xiaostudy.domain.Student" ><!-- javaType="HashSet" -->
<id column="sid" property="sid"></id>
<result column="tid" property="tid"/>
<result column="sname" property="sname"/>
</collection>
</resultMap>
<!-- ========================================================================================== --> <!-- ========================================================================================== -->
<!-- 一对多之resultMap2 -->
<select id="findOfTeachers" resultMap="OfTeachers">
select * from teacher t, student s where t.tid=s.tid and t.tid=#{id}
</select>
<resultMap type="com.xiaostudy.domain.Teacher" id="OfTeachers">
<id column="tid" property="tid"/>
<result column="tname" property="tname"/>
<collection property="student" ofType="com.xiaostudy.domain.Student" select="getStudent" column="tid"/>
</resultMap> <select id="getStudent" parameterType="int" resultType="com.xiaostudy.domain.Student">
select * from student s where s.tid = #{id}
</select>
<!-- ========================================================================================== --> </mapper>
2、domain类
Student.java
package com.xiaostudy.domain;
public class Student {
private int sid;
private int tid;
private String sname;
private Teacher teacher;
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public int getTid() {
return tid;
}
public void setTid(int tid) {
this.tid = tid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
@Override
public String toString() {
return "Student [sid=" + sid + ", tid=" + tid + ", sname=" + sname
+ ", teacher=" + teacher + "]";
}
}
Teacher.java
package com.xiaostudy.domain;
import java.util.Set;
public class Teacher {
private int tid;
private String tname;
private Set<Student> student;
public Set<Student> getStudent() {
return student;
}
public void setStudent(Set<Student> student) {
this.student = student;
}
public int getTid() {
return tid;
}
public void setTid(int tid) {
this.tid = tid;
}
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
@Override
public String toString() {
return "Teacher [tid=" + tid + ", tname=" + tname + ", student=" + student + "]";
}
}
3、代理类Mapper.java
package com.xiaostudy.domain;
import java.util.List;
public interface Mapper {
// 一对多之resultMap1
public List<Teacher> findOfTeacher(int id);
// 一对多之resultMap2
public List<Teacher> findOfTeachers(int id);
}
4、测试类
package com.xiaostudy.test; import java.io.IOException;
import java.io.InputStream;
import java.util.List; 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.xiaostudy.domain.Mapper;
import com.xiaostudy.domain.Teacher; /**
* @desc 测试类
* @author xiaostudy
*
*/
public class MybatisTest { public static void main(String[] args) throws IOException {
String resource = "config/SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource); // 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(); // 获取一个代理dao实现
Mapper mapper = sqlSession.getMapper(Mapper.class); //一对多之resultMap1
/*List<Teacher> list = mapper.findOfTeacher(1);
for(Teacher t : list) {
System.out.println(t);
}*/ //一对多之resultMap2
List<Teacher> list = mapper.findOfTeachers(1);
for(Teacher t : list) {
System.out.println(t);
} sqlSession.close(); } }
5、数据库
teacher表

student表

mybatis的一对多的更多相关文章
- mybatis的一对多,多对一,以及多对对的配置和使用
1.本文章是无意中看见易百教程的Mybatis教程才注意到这个问题,平时都仅仅是在用CRUD,忽略了这方面的问题,真实十分羞愧 2.首先我们开始对mybatis的一对多的探究 根据这个应用场景 ...
- Mybatis配置一对多的关联关系(五)
问题:是查询一个部门中的员工? 一.web项目构架 二.lib文件的jar 三.配置大小配置和该工具类 1大配置mybatis-config.xml <?xml version="1. ...
- Mybatis学习——一对多关联表查询
1.实体类 public class Student { private int id; private String name; } public class Classes { private i ...
- Mybatis 中一对多,多对一的配置
现在有很多电商平台,就拿这个来说吧.顾客跟订单的关系,一个顾客可以有多张订单,但是一个订单只能对应一个顾客. 一对多的顾客 <?xml version="1.0" encod ...
- Mybatis【一对多、多对一、多对多】知识要点
Mybatis[多表连接] 我们在学习Hibernate的时候,如果表涉及到两张的话,那么我们是在映射文件中使用<set>..<many-to-one>等标签将其的映射属性关联 ...
- mybatis进行一对多时发现的问题总结
1.定义一对多xml文件时,所有的resultMap中的column的值一定不要重复,否则mybatis会发生错误,如果有重名,定义别名,column中的名字一定要与查询出的名字一致,如: 52行的别 ...
- mybatis之一对多
今天主要话题围绕这么几个方面? mybatis一对多示例 sql优化策略 一.mybatis之一对多 在说一对多之前,顺便说一下一对一. 一对一,常见的例子,比如以常见的班级例子来说,一个班主任只属于 ...
- mybatis 中一对多、多对一、多对多、父子继承关系
mybatis 中处理一对多.多对一.多对多.父子继承关系的有关键词:association .collection .discriminator id – 一个 ID 结果:标记出作为 ID 的结果 ...
- MyBatis:一对多关联查询
MyBatis从入门到放弃四:一对多关联查询 前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collecti ...
- mybatis实现一对多连接查询
问题:两个对象User和Score,它们之间的关系为一对多. 底层数据库为postgresql,ORM框架为mybatis. 关键代码如下: mybatis配置文件如下: mybatis.xml文件内 ...
随机推荐
- sublime text 3 配置方法
一.安装sublime text 3 1>.执行sublime text 3的安装包(.exe)文件安装成功后,进入sublime的安装目录(例如:D:\Program Files\Sublim ...
- python基础-第二篇-基本数据类型
一.运算符 1.算数运算: 算数运算符相信大家都不陌生吧,尤其是加减乘除,好!那我就带着大家看看最后三个,这三个到底是干什么玩意的? %,取两数相除的余数,看图: **,x的多少次幂,看图: //,取 ...
- python脚本前两行
1. 第一行指定解释器路径 推荐写法: #!/usr/bin/env python 详细说明: #!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python ...
- 【我的Android进阶之旅】 RxJava 理解Backpressure并解决异常 rx.exceptions.MissingBackpressureException
今天测试人员在测试应用APP的时候应用crash了,查看了下crash log如下所示: java.lang.IllegalStateException: Exception thrown on Sc ...
- Mysql数据库常用操作语句大全
零.用户管理: 1.新建用户: >CREATE USER name IDENTIFIED BY 'ssapdrow'; 2.更改密码: >SET PASSWORD FOR name=PAS ...
- 消息编解码Nanopb - protocol buffers
Google Protocol Buffer 有各种版本的代码包,Python C/C++.JAVA.C.OBJ-C..NET等,嵌入式设备中使用的protobuf版本,我们选择的是nanoprobu ...
- linux 目录与文件命令
目录与文件常用命令 1.cd命令 cd [相对路径或绝对路径或特殊符号] 功用:变换目录 ps: 不加参数时,默认切换到用户主目录,即环境变量HOME指定的目录,如root用户的HOME变量为/roo ...
- 在虚拟机中还原GHO镜像系统
前置知识 本文精简干练,全是干货.首先要知道,一个原版的Windows系统下载下来就是一个iso格式的文件,也被称为一个镜像.另外还有一种镜像是使用ghost软件制作的,格式为gho的镜像,而ghos ...
- Hibernate错误:Could not bind factory to JNDI
使用hibernate时,将hibernate.cfg.xml中 <session-factory name="SessionFactory">的那么属性去掉即可.因为 ...
- python全栈开发从入门到放弃之异常处理
1.try except num = input('num : ') #try在阶段中处理异常 try: f = open('file', 'w') int(num) except ValueErro ...