mybatis 框架 的应用之四(一对一 与 一对多)
lf-driver=com.mysql.jdbc.Driver
lf-url=jdbc:mysql://localhost:3306/test?allowMultiQueries=true&useUnicode=true&characterEncoding=utf8
lf-user=LF
lf-password=LF
<?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="cn.zr.mybatismore.mapper.ClassTeamMapper"> <!-- 一对多 通过班名字查询班里学生的信息 -->
<resultMap type="cn.zr.mybatismore.entity.ClassTeam" id="classInfo">
<id column="classid" property="classid"/>
<result column="classname" property="classname"/>
<collection property="students" ofType="cn.zr.mybatismore.entity.Student">
<id column="idnum" property="idnum"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="classid" property="classid"/>
</collection>
</resultMap>
<select id="queryStudetsByClassname" parameterType="java.lang.String" resultMap="classInfo">
SELECT
c.classid,c.classname,s.idnum,s.name,s.age
FROM
class c
INNER JOIN
student s
ON
s.classid = c.classid
WHERE
c.classname = #{classname}
</select> <!-- 一对多 通过多条查询语句来实现 -->
<resultMap type="cn.zr.mybatismore.entity.ClassTeam" id="classTeamInfo">
<id column="classid" property="classid"/>
<result column="classname" property="classname"/>
<collection property="students" ofType="cn.zr.mybatismore.entity.Student" column="classid" select="queryStudents">
<id column="idnum" property="idnum"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="classid" property="classid"/>
</collection>
</resultMap>
<select id="queryInfoByclassname" parameterType="java.lang.String" resultMap="classTeamInfo">
SELECT classid,classname FROM class WHERE classname=#{classname}
</select> <select id="queryStudents" parameterType="int" resultType="cn.zr.mybatismore.entity.Student">
SELECT idnum,name,age,classid FROM student WHERE classid = #{classid}
</select>
<!-- END 一对多 通过多条查询语句来实现 --> </mapper>
<?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="cn.zr.mybatismore.mapper.StudentMapper"> <!-- 一对一 关系映射 -->
<resultMap type="cn.zr.mybatismore.entity.Student" id="studentInfo">
<id column="idnum" property="idnum"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="classid" property="classid"/>
<association property="classTeam" javaType="cn.zr.mybatismore.entity.ClassTeam">
<id column="classid" property="classid"/>
<result column="classname" property="classname"/>
</association>
</resultMap> <!-- 一对一(根据idnum查询学生的信息以及他所在的班级) -->
<select id="queryStudentById" parameterType="int" resultMap="studentInfo">
SELECT
s.idnum,s.name,s.age,s.classid,c.classname
FROM
student s INNER JOIN class c
ON
s.classid = c.classid
WHERE
s.idnum = #{idnum}
</select> <!-- 通过多查询来实现 一对一的效果 -->
<resultMap type="cn.zr.mybatismore.entity.Student" id="stuInfo">
<id column="idnum" property="idnum"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="classid" property="classid"/>
<association property="classTeam" javaType="cn.zr.mybatismore.entity.ClassTeam" column="classid" select="queryClassByClassId">
<id column="classid" property="classid"/>
<result column="classname" property="classname"/>
</association>
</resultMap>
<select id="queryStuById" parameterType="int" resultMap="stuInfo">
SELECT idnum,name,age,classid FROM student WHERE idnum = #{idnum}
</select> <select id="queryClassByClassId" parameterType="int" resultType="cn.zr.mybatismore.entity.ClassTeam">
SELECT classid,classname FROM class WHERE classid = #{classid}
</select>
<!-- END 通过多查询来实现 一对一的效果 --> </mapper>
<?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="mybatis/config/db.properties"></properties>
<!-- 配置环境 -->
<environments default="development">
<environment id="development">
<!-- 配置事务管理器的类型 -->
<transactionManager type="JDBC"/>
<!-- 配置数据源相关的属性 -->
<dataSource type="UNPOOLED">
<property name="driver" value="${lf-driver}"/>
<property name="url" value="${lf-url}"/>
<property name="username" value="${lf-user}"/>
<property name="password" value="${lf-password}"/>
</dataSource>
</environment>
</environments>
<!--END 配置环境 --> <!-- 配置映射路径 -->
<mappers>
<mapper resource="mybatis/config/mapper/StudentMapper.xml"/>
<mapper resource="mybatis/config/mapper/ClassTeamMapper.xml" />
</mappers>
<!-- END 配置映射路径 --> </configuration>
package cn.zr.mybatismore.entity; import java.util.List; public class ClassTeam { private int classid;
private String classname; private List<Student> students; public int getClassid() {
return classid;
} public void setClassid(int classid) {
this.classid = classid;
} public String getName() {
return classname;
} public void setClassname(String classname) {
this.classname = classname;
} public List<Student> getStudents() {
return students;
} public void setStudents(List<Student> students) {
this.students = students;
} public ClassTeam() {
} public ClassTeam(int classid, String classname, List<Student> students) {
this.classid = classid;
this.classname = classname;
this.students = students;
} @Override
public String toString() {
return "ClassTeam [classid=" + classid + ", classname=" + classname
+ ", students=" + students + "]";
} }
package cn.zr.mybatismore.entity; public class Student { private int idnum;
private String name;
private int age;
private int classid;
private ClassTeam classTeam; public ClassTeam getClassTeam() {
return classTeam;
}
public void setClassTeam(ClassTeam classTeam) {
this.classTeam = classTeam;
}
public int getIdnum() {
return idnum;
}
public void setIdnum(int idnum) {
this.idnum = idnum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getClassid() {
return classid;
}
public void setClassid(int classid) {
this.classid = classid;
}
public Student() {
} public Student(int idnum, String name, int age, int classid,
ClassTeam classTeam) {
this.idnum = idnum;
this.name = name;
this.age = age;
this.classid = classid;
this.classTeam = classTeam;
}
@Override
public String toString() {
return "student [idnum=" + idnum + ", name=" + name + ", age=" + age
+ ", classid=" + classid + ", classTeam=" + classTeam + "]";
} }
package cn.zr.mybatismore.mapper; import java.util.List; import cn.zr.mybatismore.entity.ClassTeam; public interface ClassTeamMapper { /**
* 根据班名查询班里学生的相关信息
*/
List<ClassTeam> queryStudetsByClassname(String string); /**
* 根据班名查询班里学生的相关信息(多语句来实现)
*/
List<ClassTeam> queryInfoByclassname(String string); }
package cn.zr.mybatismore.mapper; import cn.zr.mybatismore.entity.Student; public interface StudentMapper { /**
* 通过id来查询学生信息以及所在班级
*/
Student queryStudentById(int i); /**
* 通过id来查询学生信息以及所在班级 (多查询)
*/
Student queryStuById(int i); }
package cn.zr.mybatismore.utils; import java.io.IOException;
import java.io.Reader;
import java.util.List; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionManager; import cn.zr.mybatismore.entity.ClassTeam;
import cn.zr.mybatismore.entity.Student;
import cn.zr.mybatismore.mapper.ClassTeamMapper;
import cn.zr.mybatismore.mapper.StudentMapper; public class TestMore { public static void main(String[] args) {
TestMore testMore = new TestMore();
// testMore.queryStudentById();
// testMore.queryStuById(); // testMore.queryStudetsByClassname();
testMore.queryInfoByclassname();
} private static SqlSessionManager sqlSessionManager ;
private static StudentMapper studentMapper ;
private static ClassTeamMapper classTeamMapper;
//通过代码块来读取配置文件
static{
String resource = "mybatis/config/mybatis-config.xml";
try {
Reader reader = Resources.getResourceAsReader(resource);
sqlSessionManager = SqlSessionManager.newInstance(reader);
studentMapper = sqlSessionManager.getMapper(StudentMapper.class);
classTeamMapper = sqlSessionManager.getMapper(ClassTeamMapper.class);
} catch (IOException e) {
e.printStackTrace();
} } /**
* 通过id来查询学生信息以及所在班级
*/
public void queryStudentById() { Student student = studentMapper.queryStudentById(10011);
if (student==null) {
System.out.println("操作失败");
}else {
System.out.println(student);
}
} /**
* 通过id来查询学生信息以及所在班级 (多查询)
*/
private void queryStuById() {
Student student = studentMapper.queryStuById(10011);
if (student==null) {
System.out.println("操作失败");
}else {
System.out.println(student);
} } /**
* 根据班名查询班里学生的相关信息
*/
public void queryStudetsByClassname() {
List<ClassTeam> list = classTeamMapper.queryStudetsByClassname("一班");
if (list.isEmpty()) {
System.out.println("操作失败");
}else {
System.out.println(list);
}
} /**
* 根据班名查询班里学生的相关信息(多语句来实现)
*/
public void queryInfoByclassname() {
List<ClassTeam> list = classTeamMapper.queryInfoByclassname("一班");
if (list.isEmpty()) {
System.out.println("操作失败");
}else {
System.out.println(list);
}
}
}
mybatis 框架 的应用之四(一对一 与 一对多)的更多相关文章
- (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射
http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...
- Mybatis注解开发多表一对一,一对多
Mybatis注解开发多表一对一,一对多 一对一 示例:帐户和用户的对应关系为,多个帐户对应一个用户,在实际开发中,查询一个帐户并同时查询该账户所属的用户信息,即立即加载且在mybatis中表现为一对 ...
- Mybatis(四) 高级映射,一对一,一对多,多对多映射
天气甚好,怎能不学习? 一.单向和双向 包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细解析过这单向和双向是啥意思,在这里,在重复一遍,就拿一对多这种 ...
- 【mybatis深度历险系列】mybatis中的高级映射一对一、一对多、多对多
学习hibernate的时候,小编已经接触多各种映射,mybatis中映射有到底是如何运转的,今天这篇博文,小编主要来简单的介绍一下mybatis中的高级映射,包括一对一.一对多.多对多,希望多有需要 ...
- mybatis入门基础----高级映射(一对一,一对多,多对多)
阅读目录 一:订单商品数据模型 二.一对一查询 三.一对多查询 四.多对多查询 回到顶部 一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: CREATE TABLE items ( id ...
- MyBatis入门(二)---一对一,一对多
一.创建数据库表 1.1.创建数据表同时插入数据 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.6.27-log : Database - mybati ...
- mybatis之级联关系(一对一、一对多)
0. 表结构 1. 准备工作 1.1 配置文件等信息,请参考 myBatis之入门示例 1.2 entity 1.2.1 TPersonInfo.java package com.blueStarW ...
- Mybatis 使用 mapper 接口规范的 一对一, 一对多,多对多映射
首先的 是 最原始的 pojo 类来 做简单映射 简单 pojo 映射: <mapper namespace="com.ghc.dao.UserDao"> <se ...
- MyBatis操作指南-配置结果映射一对一,一对多,多对多(基于注解)
随机推荐
- (一)canvas简介
<canvas>元素主要用来图形的绘制,通过脚本来完成(通常时js来实现): 可以利用其实现图表,游戏等项目的开发. getContext 获取画布的摸板是2d还是3d strokeRec ...
- (效果二)js实现两个变量值的交换
ES5: var a = 12,b=13,c; c = a; a = b; b = c; console.log(a,b);//13,12 通过设置第三方变量交换赋值来实现 ES6 var a = ...
- 关于niosii不同版本的ip核不兼容的问题
这次用到网上下载的一个12.0版本的ip核,使用qsys做的,而我的开发环境是10.1的,sopc是用的sopcbuilder做的,下载下来的ip核添加新组建后,会报错,采取的做法是对比我的10.1版 ...
- CSS冷门但有用的知识整合
1. 滚动条样式设置 The ::-webkit-scrollbar CSS pseudo-element(伪元素) affects the style of the scrollbar of an ...
- php小白和菜鸟 上班路上可以看的修行博客
上班地铁 公交上我们不要去追剧 不要去打游戏 不要看看有效性的海量新闻, 我们需要去技术博客里遨游, 下面就推荐点与php有关的可以学习的技术博客; 大部分程序员在自学的道路上不知道走了多少坑,这个视 ...
- Oracle 12.1.0.2 对JSON的支持
Oracle 12.1.0.2版本有一个新功能就是可以存储.查询.索引JSON数据格式,而且也实现了使用SQL语句来解析JSON,非常方便.JSON数据在数据库中以VARCHAR2, CLOB或者BL ...
- 【转】Jmeter基础之——jmeter基础概念
JMeter 介绍:一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. 从性能工具的原理划分: Jmeter工具和其他性能工具在原理上完全一致,工具包含 ...
- java代码List接口和Arraylist类
总结: package clientFrame; import java.util.*; //集合类 List是一个接口.ArrayList是一个类 public class ArraylitTest ...
- PTA 银行排队问题之单队列多窗口服务(25 分)
银行排队问题之单队列多窗口服务(25 分) 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口可选择时,假 ...
- entering power save mode无法开机解决办法
标签(空格分隔): 服务器 问题描述: 服务器型号为IBM system x 3755 m3.服务器在搬动之前运行良好,换完位置之后出现按完电源键后无法进入系统,通过显示器看到entering pow ...