【Mybatis】一对一实例
①创建数据库和表,数据库为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】一对一实例的更多相关文章
- mybatis一对一映射配置详解
听说mybatis一对一有三种写法,今天我试了一下. 数据库表准备 为了偷懒,我直接就拿用户权限菜单里的菜单表和菜单与权限的中间表做实现,他们原来是多对多的关系,这边我假设这两张表是一对一. 表 g ...
- mybatis 一对一关联 association 返回空值
mybatis 一对一关联 association 返回空值 最近学习spring mvc + mybatis开发,看的书是<Spring MVC+Mybatis开发 从入门到精通>,在学 ...
- Java基础-SSM之mybatis一对一关联
Java基础-SSM之mybatis一对一关联 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建husbands和wifes表并建 ...
- Java基础-SSM之mybatis一对一外键关联
Java基础-SSM之mybatis一对一外键关联 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建husbandsfk和wife ...
- MyBatis一对一查询
---------------------siwuxie095 MyBatis 一对一查询 以订单和用户为例,即 相对订 ...
- Mybatis一对一映射
一.Mybatis一对一映射 本例讲述使用mybatis开发过程中常见的一对一映射查询案例.只抽取关键代码和mapper文件中的关键sql和配置,详细的工程搭建和Mybatis详细的流程代码可参见&l ...
- spring+mybatis结合实例
1.通过上两篇文章的学习,大致了解了spring和mybatis的架构和使用原理,下面这篇文章就将给出两者结合的一个小实例,通过该实例进一步探索这两个框架的魅力,工程所需要的所有jar包都在链接:ht ...
- mybatis一对一关联关系映射
mybatis一对一关联关系映射 在关联关系中,有一对一,一对多,多对多三种关联关系. 一对一关系:在操作上,任意一方引入对方的主键作为外键. 一对多关系:在"多"的一方添加&qu ...
- mybatis 一对一关联映射实例
在实际项目开发中,经常存在一对一的关系,如一个人对应一张身份证信息,这就是一对一的关系.下面是一个简单的实例: 1.建表过程我就省略了,主要是一张Person表,一张IDCard表,其相关属性见步骤2 ...
随机推荐
- JavaWeb核心之Servlet
servlet规范:包含三个技术点 1)servlet技术 2)filter技术---过滤器 3)listener技术---监听器 Servlet快速入门 实现步骤: 1)创建类实现Servlet接口 ...
- java基础-三元运算符
1.三元运算符的格式 /* 三元运算符 (条件表达式)?表达式1:表达式2; 如果条件为true,整个表达式结果是表达式1: 如果条件为false,整个表达式结果是表达式2: 注意:三元运算符不能单独 ...
- Singleton Summary
Java Singleton: Singleton pattern restricts the instantiation of a class and ensures that only one i ...
- string Type
Notes from C++ Primer Operations Operations of string support lots of operations of sequential conta ...
- document.domain实现不同域名跨域
利用document.domain 实现跨域:前提条件:这两个域名必须属于同一个基础域名!而且所用的协议,端口都要一致,否则无法利用document.domain进行跨域. 两个子域名:aaa.xxx ...
- bootstrap教程,SQL
版权声明:未经博主允许不得转载 SQL DDL数据定义语言 TPL事务处理语言 DCL数据控制语言 DML数据操作语言 DML SELECT INSERT UPDATE DELETE Join从句 J ...
- bootstrap使用之多个弹窗和拖动效果[开发篇]
有时开发一些特效,自己感觉挺爽的,像操作自己电脑一样操作你的网页,这里就介绍一个使用bootstrap的一点多窗口和拖动效果吧! 这里,我们不使用静态打开的的方式,low...,1.添加一个a链接 触 ...
- OpenStack-Ocata版+CentOS7.6 云平台环境搭建 —9.块存储服务(cinder)部署配置
块存储服务部署相关块存储服务(cinder)为实例提供块存储.存储的分配和消耗是由块存储驱动器,或者多后端配置的驱动器决定的.还有很多驱动程序可用:NAS/SAN,NFS,ISCSI,Ceph等.典型 ...
- Git - 基础介绍
Git Git - HomePage Git - CHEAT SHEET 开源的分布式版本控制系统,用于敏捷高效地管理项目版本. 下载与安装Git https://git-scm.com/downlo ...
- Mac-让 Finder 显示隐藏文件和文件夹
打开「终端」,输入以下内容,然后「Return」键,这样就把隐藏的文件和文件夹显示了: defaults write com.apple.finder AppleShowAllFiles -boole ...