myBatis 基础测试 表关联关系配置 集合 测试
myBatis 基础测试 表关联关系配置 集合 测试
测试myelipse项目源码 sql 下载 http://download.csdn.net/detail/liangrui1988/5993881
在上一篇做了简单 增删改查 的测试,基本代码+api 下载 可以看上一遍博文 myBatis 基础测试 增 删 改 查 用过hibrenate 之后,感觉很好理解
动行效果:
sql :
CREATE TABLE `student` (
`grade_id` int(11) DEFAULT NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`password` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_sutids` (`grade_id`),
CONSTRAINT `fk_sutids` FOREIGN KEY (`grade_id`) REFERENCES `grade` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */; INSERT INTO `student` VALUES (1,1,'admin',30,'123'),(1,2,'hello',100,'world'),(1,3,'林冲',45,'aaa'),(1,4,'宋江',55,'123456'),(2,5,'吴用',46,'123456'),(2,6,'武松',30,'3333');
sql:
-- MySQL dump 10.13 Distrib 5.5.20, for Win32 (x86)
--
-- Host: localhost Database: ruiabc
-- ------------------------------------------------------
-- Server version 5.5.20 CREATE TABLE `grade` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`grade_name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; INSERT INTO `grade` VALUES (1,'157'),(2,'158'); -- Dump completed on 2013-08-22 16:10:48
在里演示表关联的查询方试 注要代码
班级 xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.2//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="accp.dao">
<!-- 班集对象 类型 resultMap-->
<resultMap type="Grade" id="gradeRsultMap">
<id property="id" column="id"/>
<result property="grade_name" column="grade_name"/>
<!-- 学生集合 -->
<collection property="stu_list" column="id" javaType="ArrayList"
select="selectStudent" ofType="Student">
</collection>
</resultMap> <!-- 查询班级 并且和班级里的学生 条件-->
<select id="selectGradeAndStudentById" resultMap="gradeRsultMap" parameterType="int">
select * from grade where id=#{id}
</select> <!-- 查询班级下的学生 给集合引用 -->
<select id="selectStudent" resultType="Student" parameterType="int">
select * from student where grade_id=#{id}
</select> <!-- 方式二 -->
<select id="sqlSelectGradeAndStdeentById" resultMap="gradeMapbySql" parameterType="int">
select * from student s inner join grade g on s.grade_id= g.id where g.id=#{id}
</select>
<!-- select g.id,g.grade_name from student s inner join grade g on s.grade_id= g.id where g.id=#{id} -->
<resultMap type="Grade" id="gradeMapbySql">
<id property="id" column="id"/>
<result property="grade_name" column="grade_name"/>
<!-- 学生集合 类型的 引用 column="id" -->
<collection property="stu_list" ofType="Student" resultMap="StudentRsultMap" />
</resultMap> <!-- 学生集合 类型的 -->
<resultMap type="Student" id="StudentRsultMap">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<result property="password" column="password"/> </resultMap> <!-- select grade by id select="selectGradeById" -->
<select id="selectGradeById" parameterType="int" resultType="Grade">
select * from grade where id=#{id}
</select>
<!-- select All grade -->
<select id="selectAllGradeAndStudents" resultType="Grade">
select * from grade
</select> </mapper>
sqlSession工具代码在上一篇里有,或都下载源码
测试代码:
package accp.test; import java.util.List;
import java.util.Map;
import java.util.Map.Entry; import org.apache.ibatis.session.SqlSession; import accp.bean.Grade;
import accp.bean.Student;
import accp.dao.Dao;
import accp.dao.imp.DaoImp;
import accp.util.GetSession; public class TestRsultMap {
public static void main(String[] args) { SqlSession sqlSession=GetSession.getInstans().getSqlSession();
/*查询学生信息 包括所在班级*/
/*Student stu=sqlSession.selectOne("accp.dao.selectStuAndGrade",2);
System.out.println("学生id: "+stu.getId()+" "+stu.getName()+" "+stu.getPassword()+
" "+stu.getAge()+" 所在班级名称: "+stu.getGrade_id().getGrade_name()+
" 班级id: "+stu.getGrade_id().getId());*/ //查询班级信息 包括班级里的所有学生
Grade grade=sqlSession.selectOne("accp.dao.selectGradeAndStudentById",1);
System.out.println("班级ID:"+grade.getId()+" name: "+grade.getGrade_name());
System.out.println(" 班级里的学生: "+grade.getStu_list().size()+" 个 -------------");
System.out.println("id \t 姓名 \t 密码 \t 年龄");
for(Student tempStu:grade.getStu_list()){
System.out.println(tempStu.getId()+" \t "+tempStu.getName()+" \t "+tempStu.getPassword()+
" \t "+tempStu.getAge());
} //查询班级信息 包括班级里的所有学生 通过sql关联查询方式
/*直接取对应取不出来????没有第一种方式好用
* Map<String,Grade> map=sqlSession.selectMap("accp.dao.sqlSelectGradeAndStdeentById","id");
System.out.println(map.size());
for(Entry entry:map.entrySet()){
Grade gr=(Grade)entry.getValue();
System.out.println("MapKey "+entry.getKey() +
" mapValue Gr Name:"+ gr.getGrade_name()+
"gr Stu 共几个:"+gr.getStu_list().size());
}*/ //list-------- test
/* List<Grade> list=sqlSession.selectList("accp.dao.sqlSelectGradeAndStdeentById",1);
for(Grade grade2:list){
System.out.println("班级ID:"+grade2.getId()+" name: "+grade2.getGrade_name());
System.out.println(" 班级里的学生: "+grade2.getStu_list().size()+" 个 -------------");
System.out.println("id \t 姓名 \t 密码 \t 年龄");
for(Student tempStu:grade2.getStu_list()){
System.out.println(tempStu.getId()+" \t "+tempStu.getName()+" \t "+tempStu.getPassword()+
" \t "+tempStu.getAge());
}
}*/ }
}
myBatis 基础测试 表关联关系配置 集合 测试的更多相关文章
- Python 基础-python-列表-元组-字典-集合
列表格式:name = []name = [name1, name2, name3, name4, name5] #针对列表的操作 name.index("name1")#查询指定 ...
- freeRadius 基础配置及测试
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- 构建基于表单配置的 Jenkins 测试项目(接口、UI、APP、Jmeter)
1. 第一个 hello world 项目 2. 构建自动触发的项目(接口测试) 1)新建测试项目(执行测试脚本) 2)新建 Maven 打包项目 3)手动执行构建 4)修改 Web 工程代码并 pu ...
- IntelliJ IDEA安装、配置、测试
IntelliJ IDEA安装.配置.测试(win7_64bit) 目录 1.概述 2.本文用到的工具 3.安装.激活与配置 4.开发测试 4.1 JavaSE开发测试(确保JDK已正确安装) 4.2 ...
- Myeclipse安装、配置、测试
Myeclipse安装.配置.测试(win7_64bit) 目录 1.概述 2.本文用到的工具 3.安装与激活 4.JavaSE开发测试(确保JDK已正确安装) 5.JavaEE开发测试(确保服务器和 ...
- 【Oracle】曾经的Oracle学习笔记(1-3) 数据库常见用语,常见命令,创建测试表
一.数据库的登录 二.数据库常用语 三.测试表的创建,测试数据初始化 四.常见命令介绍 五.测试 user:jeffreysn:jeffrey user:systemsn:jeffrey 浏览器中输入 ...
- Web API核查表:设计、测试、发布API时需思考的43件事[转]
Web API核查表:设计.测试.发布API时需思考的43件事 当设计.测试或发布一个新的Web API时,你是在一个原有的复杂系统上构建新的系统.那么至少,你也要建立在HTTP上,而HTTP则是 ...
- LNMP环境搭建:Nginx安装、测试与域名配置
Nginx作为一款优秀的Web Server软件同时也是一款优秀的负载均衡或前端反向代理.缓存服务软件 2.编译安装Nginx (1)安装Nginx依赖函数库pcre pcre为“perl兼容正则表达 ...
- Eclipse For JavaEE安装、配置、测试
Eclipse For JavaEE安装.配置.测试(win7_64bit) 目录 1.概述 2.本文用到的工具 3.安装与配置 4.JavaSE开发测试(确保JDK已正确安装) 5.JavaEE开发 ...
随机推荐
- BZOJ 4177: Mike的农场( 最小割 )
显然是最小割... 对于规律(i, j, k) i,j 互相连边, 容量为k 对于规则(S, a, b) 新建一个点x, x与S中每个点连一条弧, 容量+∞, 然后再根据a决定x与源点或汇点连边. 跑 ...
- CentOS6.5 搭建基础PHP环境(yum安装)
转载:闲来无事 » CentOS6.5 搭建基础PHP环境(yum安装) yum安装php环境只需要几条简单的命令就可以实现,OK,各位客官,菜来了.首先确保你的yum源可用,或者网络是通的,不然下载 ...
- X窗口系统名词解释
前端时间Gentoo的桌面环境出了点问题,发现自己对Linux的桌面环境了解的很少,于是恶补了一下知识,以下名词解释基本上都是来自维基百科的条目和<Linux程序设计(第三版)>.一般而言 ...
- Qt学习之路(58): 进程间交互(QProcess.readAllStandardOutput可以读取控制台的输出)
所谓 IO 其实不过是与其他设备之间的数据交互.在 Linux 上这个概念或许会更加清楚一些.Linux 把所有设备都看作是一种文件,因此所有的 IO 都归结到对文件的数据交互.同样,与其他进程之间也 ...
- MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件
原文 MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件 UI 前沿技术 WPF 中的多点触控操作事件 Charles Petzold 下载代码示例 就在过去几年,多点触控还只是科幻电 ...
- 双缓冲绘图和窗口控件的绘制——ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 .
双缓冲绘图和窗口控件的绘制 ---ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 cheungmine 我们通常使用ATL COM组件,生成一个带窗口的ActiveX控件,然后 ...
- GoldenGate配置(二)之双向复制配置
GoldenGate配置(二)之双向复制配置 环境: Item Source System Target System Platform Red Hat Enterprise Linux Serve ...
- cocos2d-x的经历(含源码——)
源于手游的火爆和大环境的影响,最近在学习cocos2d-x.其实以前一直有想搞andriod和ios的尝试,可惜本屌丝没钱买mac os x,只好先开始学习andriod,于是买了小米2s作为测试机, ...
- 抽象类(abstract class)和 接口(interface)
PHP中的 抽象类(abstract class)和 接口(interface) 一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方 ...
- Redhat下安装fedora
步骤具体解释: 1:到fedora官网下载fedora的DVD镜像文件. 2:在linux系统中预留一部分为未分区的空间大约50G 3: 在linux系统上的根分区创建一个fedora的目录,里面 ...