①创建数据库和表,数据库为mytest,表为father和child

 DROP TABLE IF EXISTS child;
DROP TABLE IF EXISTS father; CREATE TABLE child(
child_id INT PRIMARY KEY auto_increment NOT NULL,
child_name VARCHAR(20)
); CREATE TABLE father(
father_id INT PRIMARY KEY auto_increment NOT NULL,
father_name VARCHAR(20),
child_id INT
); ALTER TABLE father ADD CONSTRAINT fk_child_id FOREIGN KEY (child_id) REFERENCES child(child_id); INSERT INTO child(child_name) VALUES ("Guo Xiang");
INSERT INTO child(child_name) VALUES ("Zhang Wuji");
INSERT INTO father(father_name, child_id) VALUES ("Guo Jing", 1);
INSERT INTO father(father_name, child_id) VALUES ("Zhang Cuishan", 2);

father&child

②创建Java工程,导入相应的jar包

③创建配置文件conf.xml和数据库配置文件db.properties

 <?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="db.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${name}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments> <mappers>
<mapper resource="org/mybatis/mapping/fatherMapper.xml"/>
</mappers>
</configuration>

conf.xml

 driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mytest
name = root
password = root

db.properties

④创建实体类Father和Child

 package org.mybatis.domain;

 public class Child {

     private int child_id;
private String child_name; public int getChild_id() {
return child_id;
}
public void setChild_id(int child_id) {
this.child_id = child_id;
}
public String getChild_name() {
return child_name;
}
public void setChild_name(String child_name) {
this.child_name = child_name;
} @Override
public String toString() {
return "[Child = child_id:" + child_id + ", child_name:" + child_name + "]";
} }

Child

 package org.mybatis.domain;

 public class Father {

     private int father_id;
private String father_name;
private Child child; public int getFather_id() {
return father_id;
}
public void setFather_id(int father_id) {
this.father_id = father_id;
}
public String getFather_name() {
return father_name;
}
public void setFather_name(String father_name) {
this.father_name = father_name;
} public Child getChild() {
return child;
}
public void setChild(Child child) {
this.child = child;
}
@Override
public String toString() {
return "[Father = father_id:" + father_id + ", father_name:" + father_name
+ ", child:" + child + "]";
} }

Father

⑤创建sql映射文件fatherMapper.xml

 <?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="org.mybatis.mapping.fatherMapper"> <!-- 方式一:嵌套结果 -->
<!-- <select id="getChild" parameterType="int" resultMap="ChildMap"> -->
<!-- select * from child c, father f where c.child_id = f.child_id and f.father_id=#{id} -->
<!-- </select> --> <!-- <resultMap type="org.mybatis.domain.Father" id="ChildMap"> -->
<!-- <id property="father_id" column="father_id"/> -->
<!-- <result property="father_name" column="father_name" /> -->
<!-- <association property="child" javaType="org.mybatis.domain.Child"> -->
<!-- <id property="child_id" column="child_id"/> -->
<!-- <result property="child_name" column="child_name"/> -->
<!-- </association> -->
<!-- </resultMap> --> <!-- 方式二:嵌套查询 -->
<select id="getChild" parameterType="int" resultMap="ChildMap">
select * from father where father_id=#{id}
</select> <resultMap type="org.mybatis.domain.Father" id="ChildMap">
<id property="father_id" column="father_id"/>
<result property="father_name" column="father_name" />
<collection property="child" column="child_id" select="getChildCollection">
</collection>
</resultMap> <select id="getChildCollection" resultType="org.mybatis.domain.Child">
select * from child where child_id=#{child_id}
</select> </mapper>

fatherMapper.xml

⑥向配置文件中注册 fatherMapper.xml 文件【已添加,查看第③步】

⑦测试类

 package org.mybatis.app;

 import java.io.InputStream;

 import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import org.mybatis.domain.Father; public class TestOneToOne { SqlSession session; @Before
public void beforeLoad() {
InputStream inputStream =
TestOneToOne.class.getClassLoader().getResourceAsStream("conf.xml");
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
session = sqlSessionFactory.openSession();
} @Test
public void testOneToOne() {
// 根据fatherID得到child
String statement = "org.mybatis.mapping.fatherMapper.getChild";
Father father = session.selectOne(statement,2);
session.close();
System.out.println(father.getFather_name() + "'s child is "
+ father.getChild().getChild_name());
}
}

TestOneToOne

⑧结构图

fatherMapper.xml中有两种方式,两种方式的结果一样

【Mybatis】一对一实例的更多相关文章

  1. mybatis一对一映射配置详解

    听说mybatis一对一有三种写法,今天我试了一下. 数据库表准备 为了偷懒,我直接就拿用户权限菜单里的菜单表和菜单与权限的中间表做实现,他们原来是多对多的关系,这边我假设这两张表是一对一. 表  g ...

  2. mybatis 一对一关联 association 返回空值

    mybatis 一对一关联 association 返回空值 最近学习spring mvc + mybatis开发,看的书是<Spring MVC+Mybatis开发 从入门到精通>,在学 ...

  3. Java基础-SSM之mybatis一对一关联

    Java基础-SSM之mybatis一对一关联 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表)  1>.创建husbands和wifes表并建 ...

  4. Java基础-SSM之mybatis一对一外键关联

    Java基础-SSM之mybatis一对一外键关联 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表)  1>.创建husbandsfk和wife ...

  5. MyBatis一对一查询

    ---------------------siwuxie095                                 MyBatis 一对一查询         以订单和用户为例,即 相对订 ...

  6. Mybatis一对一映射

    一.Mybatis一对一映射 本例讲述使用mybatis开发过程中常见的一对一映射查询案例.只抽取关键代码和mapper文件中的关键sql和配置,详细的工程搭建和Mybatis详细的流程代码可参见&l ...

  7. spring+mybatis结合实例

    1.通过上两篇文章的学习,大致了解了spring和mybatis的架构和使用原理,下面这篇文章就将给出两者结合的一个小实例,通过该实例进一步探索这两个框架的魅力,工程所需要的所有jar包都在链接:ht ...

  8. mybatis一对一关联关系映射

    mybatis一对一关联关系映射 在关联关系中,有一对一,一对多,多对多三种关联关系. 一对一关系:在操作上,任意一方引入对方的主键作为外键. 一对多关系:在"多"的一方添加&qu ...

  9. mybatis 一对一关联映射实例

    在实际项目开发中,经常存在一对一的关系,如一个人对应一张身份证信息,这就是一对一的关系.下面是一个简单的实例: 1.建表过程我就省略了,主要是一张Person表,一张IDCard表,其相关属性见步骤2 ...

随机推荐

  1. 【转】UniGUI Session管理說明

    [转]UniGUI Session管理說明 (2015-12-29 15:41:15) 转载▼   分类: uniGUI 台中cmj朋友在uniGUI中文社区QQ群里发布的,转贴至此. UniGUI ...

  2. Android框架式编程之MVP架构

    MVP(Model-View-Presenter)模式.是将APP的结构分为三层:View - Presenter - Model. View 1. 提供UI交互 2. 在presenter的控制下修 ...

  3. 关于height、offsetheight、clientheight、scrollheight、innerheight、outerheight的区别一览

    平时,不管在pc端页面还是移动端页面,因为我们一般很少会设置某个块的的高度,但是呢,我有时候有需要取到这些高度以便于我们方便进行判断和下一步的编写.一般这个时候我都是直接的获取一个块的高度.heigh ...

  4. SUDO:/ETC/SUDOERS 可被任何人写 解决方案

    问题一: sudo: /etc/sudoers is world writablesudo: no valid sudoers sources found, quittingsudo: unable ...

  5. Python 离线工作环境搭建

    准备 在断网的和联网的机器安装pip,下载地址https://pypi.python.org/pypi/pip 在联网的开发机器上安装好需要的包 例如: pip3 install paramiko p ...

  6. Python Socket请求网站获取数据

     Python Socket请求网站获取数据 ---阻塞 I/O     ->收快递,快递如果不到,就干不了其他的活 ---非阻塞I/0 ->收快递,不断的去问,有没有送到,有没有送到,. ...

  7. 【LeetCode】13. 罗马数字转整数

    题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为 ...

  8. Linux学习笔记之七————Linux常用命令之编辑器、服务器

    <1>gedit编辑器 gedit是一个Linux环境下的文本编辑器,类似windows下的写字板程序,在不需要特别复杂的编程环境下,作为基本的文本编辑器比较合适.   <2> ...

  9. Python:使用基于事件驱动的SAX解析XML

    SAX的特点: 是基于事件的 API 在一个比 DOM 低的级别上操作 为您提供比 DOM 更多的控制 几乎总是比 DOM 更有效率 但不幸的是,需要比 DOM 更多的工作 基于对象和基于事件的接口 ...

  10. 剖析QMenu & Qt完全定制化菜单

    贴张效果图:  定制包括: 1. 周边阴影 2. 菜单项的元素(分割符, 控制ICON大小, 文字显示位置与颜色, 子菜单指示符) 菜单内的效果, 部分可以使用stylesheet实现, 但要做到这样 ...