首先创建表

学生表

create table stu(
       id number(11) primary key,
       name varchar2(255),
       age number(11),
       cid number(11)
);

班级表

create table cls(
  id number(11) primary key,
  cname varchar2(255)
);

创建序列

create sequence seq_stu;

create sequence seq_cls;

添加数据

insert into stu values(seq_stu.nextval,'小乔',16,1);
insert into stu values(seq_stu.nextval,'干将',88,1);
insert into stu values(seq_stu.nextval,'鲁班',18,1);
insert into stu values(seq_stu.nextval,'婉儿',22,1);
insert into stu values(seq_stu.nextval,'艾琳',23,2);
insert into stu values(seq_stu.nextval,'安其拉',14,2);
insert into stu values(seq_stu.nextval,'牛魔',50,2);
insert into stu values(seq_stu.nextval,'猴子',66,2);
insert into stu values(seq_stu.nextval,'李白',26,1);
insert into stu values(seq_stu.nextval,'韩信',32,1);

insert into cls values (seq_cls.nextval,'QY75');
insert into cls values (seq_cls.nextval,'QY97');

创建工具类

package com.aaa.mybatis.util;

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 java.io.IOException;
import java.io.Reader; public class SqlSessionFactoryUtil {
private static SqlSessionFactory sessionFactory;
static {
Reader reader =null;
try {
reader= Resources.getResourceAsReader("mybatis.xml");
/*sessionFactory =new SqlSessionFactoryBuilder().build(reader,"mysql");*/
sessionFactory =new SqlSessionFactoryBuilder().build(reader,"myOracle");
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static SqlSession getSession(){
return sessionFactory.openSession();
}
}

创建mybatis主配置文件

<?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>
<environments default="myOracle">
<environment id="myOracle">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
<property name="username" value="scott"></property>
<property name="password" value="tiger"></property>
</dataSource>
</environment>
     <--连接MySQL用下面这个,工具类加着注释-->
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/test"></property>
<property name="username" value="root"></property>
<property name="password" value="admin"></property>
</dataSource>
</environment>
</environments> <mappers>
<mapper resource="com/aaa/mybatis/dao/StuDaoMapper.xml"></mapper>
<mapper resource="com/aaa/mybatis/dao/ClsDaoMapper.xml"></mapper>
</mappers>
</configuration>

创建Stu,Cls表实体

package com.aaa.mybatis.entity;
import java.util.*; public class Cls {
private int cid;
private String cname;
private List<Stu> stu; public int getCid() {
return cid;
} public void setCid(int cid) {
this.cid = cid;
} public String getCname() {
return cname;
} public void setCname(String cname) {
this.cname = cname;
} public List<Stu> getStu() {
return stu;
} public void setStu(List<Stu> stu) {
this.stu = stu;
}
}
package com.aaa.mybatis.entity;
public class Stu {
private int id;
private String name;
private int age;
private Cls cls; 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;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Cls getCls() {
return cls;
} public void setCls(Cls cls) {
this.cls = cls;
}
} 创建Stu接口
package com.aaa.mybatis.dao;

import com.aaa.mybatis.entity.Stu;
import org.apache.ibatis.annotations.Param; import java.util.*; public interface StuDao {
/**
* 根据学生编号查询学生信息和班级信息
* @param id
* @return
*/ }
创建Cls接口
package com.aaa.mybatis.dao;

import com.aaa.mybatis.entity.Cls;

import java.util.*;

public interface ClsDao {
/**
* 根据班级编号查询该班级信息和所有学生信息
*/
public List<Cls> allClsAndStuByCid();
} 一对多mapper根据学生编号查询学生信息和班级信息
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aaa.mybatis.dao.StuDao">
<resultMap id="stuMap" type="com.aaa.mybatis.entity.Stu" autoMapping="true">
<association property="cls" javaType="com.aaa.mybatis.entity.Cls" autoMapping="true"><--autoMapping如果属性名与实体一致可以省略里面的字段--> </association>
</resultMap>
<select id="allstuByStuId" resultMap="stuMap">
select * from stu a join cls b on a.cid=b.cid where a.id=#{id}
</select>
</mapper> 多对一mapper查询所有班级信息和每个班的学生信息
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aaa.mybatis.dao.ClsDao">
<resultMap id="clsMap" type="com.aaa.mybatis.entity.Cls" autoMapping="true">
<id column="cid" property="cid"></id><--加上autoMapping可以省略实体里字段名与属性名相同的信息,但是多对一必须在这里加ID标签-->
<collection property="stu" ofType="com.aaa.mybatis.entity.Stu" autoMapping="true"></collection>
</resultMap>
<select id="allClsAndStuByCid" resultMap="clsMap">
select * from cls a join stu b on a.cid=b.cid
</select>
</mapper> 测试一对多
package com.aaa.mybatis.text;

import com.aaa.mybatis.dao.StuDao;
import com.aaa.mybatis.entity.Stu;
import com.aaa.mybatis.util.SqlSessionFactoryUtil;
import org.apache.ibatis.session.SqlSession; public class text01 {
public static void main(String[] args) {
SqlSession session= SqlSessionFactoryUtil.getSession();
StuDao mapper = session.getMapper(StuDao.class);
Stu stu = mapper.allstuByStuId(6);
System.out.println("学生姓名:"+stu.getName());
System.out.println("学生编号:"+stu.getId());
System.out.println("学生年龄:"+stu.getAge());
System.out.println("班级编号:"+stu.getCls().getCid());
System.out.println("班级名称:"+stu.getCls().getCname());
}
}
测试结果
学生姓名:艾琳
学生编号:6
学生年龄:23
班级编号:2
班级名称:QY97 Process finished with exit code 0 测试多对一
package com.aaa.mybatis.text;

import com.aaa.mybatis.dao.ClsDao;
import com.aaa.mybatis.dao.StuDao;
import com.aaa.mybatis.entity.Cls;
import com.aaa.mybatis.entity.Stu;
import com.aaa.mybatis.util.SqlSessionFactoryUtil;
import org.apache.ibatis.session.SqlSession; import java.util.List; public class text02 {
public static void main(String[] args) {
SqlSession session= SqlSessionFactoryUtil.getSession();
ClsDao mapper = session.getMapper(ClsDao.class);
List<Cls> cls = mapper.allClsAndStuByCid();
for(int i=0;i<cls.size();i++){
System.out.println("班级编号:"+cls.get(i).getCid());
System.out.println("班级名称:"+cls.get(i).getCname());
System.out.println("------------------");
List<Stu> e = cls.get(i).getStu();
for (Stu stu : e) {
System.out.println("学生姓名:"+stu.getName());
System.out.println("学生编号:"+stu.getId());
System.out.println("学生年龄:"+stu.getAge());
System.out.println("**********************");
}
} }
}
测试结果
班级编号:1
班级名称:QY75
------------------
学生姓名:小乔
学生编号:2
学生年龄:16
**********************
学生姓名:干将
学生编号:3
学生年龄:88
**********************
学生姓名:鲁班
学生编号:4
学生年龄:18
**********************
学生姓名:婉儿
学生编号:5
学生年龄:22
**********************
学生姓名:李白
学生编号:10
学生年龄:26
**********************
学生姓名:韩信
学生编号:11
学生年龄:32
**********************
班级编号:2
班级名称:QY97
------------------
学生姓名:艾琳
学生编号:6
学生年龄:23
**********************
学生姓名:安其拉
学生编号:7
学生年龄:14
**********************
学生姓名:牛魔
学生编号:8
学生年龄:50
**********************
学生姓名:猴子
学生编号:9
学生年龄:66
********************** Process finished with exit code 0
 
 
 
 
 
 
												

mybatis+oracle实现一对多,多对一查询的更多相关文章

  1. Mybatis一对多/多对多查询时只查出了一条数据

    问题描述: 如果三表(包括了关系表)级联查询,主表和明细表的主键都是id的话,明细表的多条数据只能查询出来第一条/最后一条数据. 三个表,权限表(Permission),权限组表(Permission ...

  2. mybatis入门_一对多,多对多映射以及整合spring框架

    一.一对多映射. 1.1 一对多映射之根据多的一方关联查询一的一方 示例:查询出具体的订单信息,同时也查询出来订单的用户信息. 引入的订单表如下所示: 框选出来的为具体的外键. 订单的Pojo类如下所 ...

  3. mybatis的执行流程 #{}和${} Mysql自增主键返回 resultMap 一对多 多对一配置

    n Mybatis配置 全局配置文件SqlMapConfig.xml,配置了Mybatis的运行环境等信息. Mapper.xml文件即Sql映射文件,文件中配置了操作数据库的Sql语句.此文件需要在 ...

  4. mybatis实战教程二:多对一关联查询(一对多)

    多对一关联查询 一.数据库关系.article表和user表示多对一的关系 CREATE TABLE `article` ( `id` ) NOT NULL AUTO_INCREMENT, `user ...

  5. mybatis(一、原理,一对多,多对一查询)

    MyBatis框架及原理分析 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架,其主要就完成2件事情: 封装JDBC操作 利用反射打通Java类与SQL语句之间的相互转换 ...

  6. SpringBoot使用Mybatis注解进行一对多和多对多查询(2)

    SpringBoot使用Mybatis注解进行一对多和多对多查询 GitHub的完整示例项目地址kingboy-springboot-data 一.模拟的业务查询 系统中的用户user都有唯一对应的地 ...

  7. mybatis学习记录六——一对一、一对多和多对多查询

    9       订单商品数据模型 9.1     数据模型分析思路 1.每张表记录的数据内容 分模块对每张表记录的内容进行熟悉,相当 于你学习系统 需求(功能)的过程. 2.每张表重要的字段设置 非空 ...

  8. Mybatis一对一、一对多、多对多查询。+MYSQL

    场景:使用三张数据表:student学生表.teacher教师表.position职位表 一个学生可以有多为老师.一位老师可以有多个学生.但是一个老师只能有一个职位:教授.副教授.讲师:但是一个职位可 ...

  9. mybatis报错:查询一对多或多对多时只返回一条数据的问题

    问题: 使用映射文件实现查询一对多或多对多时只返回一条数据问题 解决方法: 导致这种情况出现的问题是因为两个表中的主键是一样所以出现了数据覆盖问题. 解决方式一:修改数据库表中的主键(这种方法比较麻烦 ...

随机推荐

  1. vi 命令学习(一)

    行内移动] w word 向后移动一个单词 b back ·向前移动一个单词 行首 ^ 行首,第一个不是空白字符的位置 $ 行尾 [行数移动] gg go 文件顶部 G go 文件末尾 数字gg go ...

  2. python SQLALchemy连接数据库。

    一.ORM与SQLALchemy简介 ORM 全程object Relational Mapping,对象关系映射.简单的说,ORM将数据库中的表与面向对象中的类建立了一种对应关系.这样在操作数据库时 ...

  3. linux下如何限制普通用户更改密码

    问题描述: 为了方便linux管理员对所有用户的进行管理,如何限制普通用户更改密码? 解决方法: 禁止普通用户更改密码: /usr/bin/passwd 若要允许普通用户更改密码: /usr/bin/ ...

  4. 移动端rem布局 js

    // rem布局适配 (function(doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in ...

  5. C# 泛基

    1 你有时候希望在父类规定一些行为,让子类无法修改,但是这些实现是依赖一个子类才能获取的值,你又不可能知道所有的子类 ,没办法替它在父类里面初始化,这时候就需要在父类里面定义一个每个子类一个的,但又是 ...

  6. DNS详细解析过程【转】

    转自:http://blog.csdn.net/crazw/article/details/8986504 先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址www.baid ...

  7. 棋盘DP三连——洛谷 P1004 方格取数 &&洛谷 P1006 传纸条 &&Codevs 2853 方格游戏

    P1004 方格取数 题目描述 设有N $\times N$N×N的方格图(N $\le 9$)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00.如下图所示(见样例): A ...

  8. PAT 1034. Head of a Gang

    1034. Head of a Gang (30) One way that the police finds the head of a gang is to check people's phon ...

  9. opencv图像阈值设置的三种方法

    1.简单阈值设置   像素值高于阈值时,给这个像素赋予一个新值(可能是白色),否则我们给它赋予另外一种颜色(也许是黑色).这个函数就是 cv2.threshhold().这个函数的第一个参数就是原图像 ...

  10. linux学习9-进程管理知识

    Linux 进程管理 实验环境: 用户名:shiyanlou 密码:AJW3tui5 Linux进程之管理控制 实验介绍 通过本实验我们将掌握一些 Linux 所提供的工具来进行进程的查看与控制,掌握 ...