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. LUAROCKS 报错解决办法

    用luarocks 加载包时报错 Warning: falling back to curl - install luasec to get native HTTPS support 此时先安装 ./ ...

  2. python之懒惰属性(延迟初始化)

    Python 对象的延迟初始化是指,当它第一次被创建时才进行初始化,或者保存第一次创建的结果,然后每次调用的时候直接返回该结果.延迟初始化主要用于提高性能,避免浪费计算,并减少程序的内存需求. 1. ...

  3. tensorflow中常用激活函数和损失函数

    激活函数 各激活函数曲线对比 常用激活函数: tf.sigmoid() tf.tanh() tf.nn.relu() tf.nn.softplus() tf.nn.softmax() tf.nn.dr ...

  4. 剑指offer-第五章优化时间和空间效率(从1到n的整数中1出现的次数)

    题目:输入一个整数n,从1到n这n个十进制整数中1出现的次数. 思路1:对1到n中的任意一个数i对其进行求余数来判断个位是否为1,然后再求除数,判断十位是否为1.统计出1的个数.然后对1到n用一个循环 ...

  5. 【java规则引擎】基本语法和相关属性介绍

    一个规则的语法信息 [1]条件部分(LSH部分)===>规则pattern之间的连接条件符号:   (1)LHS 部分是由一个或多个条件组成,条件又称之为 pattern(匹配模式),多个 pa ...

  6. 自定义标签库_tag

    1)最简单的标签库 1,继承Tag接口,重写doEndTag()方法,返回类型不同后面流程不一样 想要jsp的内容必须重写了setPageContent()方法 再JspWriter out = pa ...

  7. Terracotta设计原理分析--(部分内容来自官方描述)

    因为工作中历史产品采用了terracotta作为分布式缓存线性扩展平台,因此不得不提前对其原理做了相关了解,当然其中很多的设计思想和oracle.memcached的设计相似,但也有自己的亮点,那就是 ...

  8. OPCDAAuto.dll的C#使用方法浅析

    上次研究了.Net版本的OPC API dll,这次我采用OPCDAAuto.dll来介绍使用方法.以下为我的源代码,有详细的注释无需我多言.编译平台:VS2008SP1.WINXP.KEPServe ...

  9. An invalid form control with name='timeone[]' is not focusable.

    在项目开发的时候 遇到了这样的报错 An invalid form control with name='timeone[]' is not focusable. 学习源头:https://segme ...

  10. linux启动自动挂载分区和/etc/fstab简单修复

    让后加的分区能够启动时自动挂载,需要把配置写入文件 /etc/fstab vi /etc/fstab UUID=3f5859e0-592f-42cd-b533-570422fb85be   / ext ...