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 框架 的应用之四(一对一 与 一对多)的更多相关文章

  1. (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射

    http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...

  2. Mybatis注解开发多表一对一,一对多

    Mybatis注解开发多表一对一,一对多 一对一 示例:帐户和用户的对应关系为,多个帐户对应一个用户,在实际开发中,查询一个帐户并同时查询该账户所属的用户信息,即立即加载且在mybatis中表现为一对 ...

  3. Mybatis(四) 高级映射,一对一,一对多,多对多映射

    天气甚好,怎能不学习? 一.单向和双向 包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细解析过这单向和双向是啥意思,在这里,在重复一遍,就拿一对多这种 ...

  4. 【mybatis深度历险系列】mybatis中的高级映射一对一、一对多、多对多

    学习hibernate的时候,小编已经接触多各种映射,mybatis中映射有到底是如何运转的,今天这篇博文,小编主要来简单的介绍一下mybatis中的高级映射,包括一对一.一对多.多对多,希望多有需要 ...

  5. mybatis入门基础----高级映射(一对一,一对多,多对多)

    阅读目录 一:订单商品数据模型 二.一对一查询 三.一对多查询 四.多对多查询 回到顶部 一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: CREATE TABLE items ( id ...

  6. MyBatis入门(二)---一对一,一对多

    一.创建数据库表 1.1.创建数据表同时插入数据 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.6.27-log : Database - mybati ...

  7. mybatis之级联关系(一对一、一对多)

    0. 表结构 1. 准备工作 1.1 配置文件等信息,请参考  myBatis之入门示例 1.2 entity 1.2.1 TPersonInfo.java package com.blueStarW ...

  8. Mybatis 使用 mapper 接口规范的 一对一, 一对多,多对多映射

    首先的 是 最原始的 pojo 类来 做简单映射 简单 pojo 映射: <mapper namespace="com.ghc.dao.UserDao"> <se ...

  9. MyBatis操作指南-配置结果映射一对一,一对多,多对多(基于注解)

随机推荐

  1. 剑指Offer面试题:13.合并两个排序的链表

    一 题目:合并两个排序的链表 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的.例如输入下图中的链表1和链表2,则合并之后的升序链表如链表3所示. 二 代码实现 te ...

  2. UVA11174 Stand in a Line

    题意 PDF 分析 \[ f(i)=f(c_1)f(c_2)\dots\times(s(i)-1)!/(s(c_1)!s(c_2)! \dots s(c_k)! )\\ f(root)=(s(root ...

  3. 好用的python第三方库

    参考连接:http://python.jobbole.com/84464/ https://www.zhihu.com/question/20501628 python每日技术更新:https://g ...

  4. sqlalchemy 学习(二)scoped session

    数据库设计的难点之一,是session生命周期的管理问题.sqlalchemy提供了一个简单的session管理机制,即scoped session.它采用的注册模式.所谓的注册模式,简单来说,是指在 ...

  5. The method of type must override a superclass method解决方式(转)

    今天做struts2上传文件的时候出现了这个问题: The method execute() of type UploadAction must override or implement a sup ...

  6. Java 构造器或构造方法

    构造方法的定义 构造方法也叫构造器或者构造函数 构造方法与类名相同,没有返回值,连void都不能写 构造方法可以重载(重载:方法名称相同,参数列表不同) 如果一个类中没有构造方法,那么编译器会为类加上 ...

  7. webstorm设置修改文件后自动编译并刷新浏览器页面

    转载:http://www.cnblogs.com/ssrsblogs/p/6155747.html 重装了 webstorm ,从10升级到了2016 一升不要紧,打开老项目,开启webpakc-d ...

  8. layui与layer同时引入冲突的问题

    之前在项目中只有用layer,但是后来有用到了layui,结果发现同时引入这两个东东 会出现冲突的问题 导致代码运行不正常 后来网上找到了解决办法: 学习源头:http://fly.layui.com ...

  9. 【转】Jmeter:图形界面压力测试工具

    Jmeter是一款强大的图形界面压力测试工具,完全用Java写成,关于Jmeter的介绍,网上其实有不少的文章,我原本是不想再重复写类似文章的,但我发现有些很关键性的,在我们测试中一定会用到的一些设置 ...

  10. 字符串转换为字典的函数eval(字符串)

    首先把多行的字符串,变成一个字符串,用'''和'''扩起来: 然后把这个字符串,赋值给b 这个时候,b根本调不出来,也用不起来: 用eval(b),来格式化字符串变成字典: 然后b就变成了一个字典: