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

                                         作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.准备测试环境(创建数据库表)

 1>.创建husbandsfk和wifesfk表

 use yinzhengjie;

 create table husbandsfk(id int primary key auto_increment , hname varchar(20)) ;

 create table wifesfk(id int primary key  auto_increment , wname varchar(20) , hid int , CONSTRAINT fk_hid FOREIGN KEY (hid) references husbandsfk(id)) ;

 alter table wifesfk add constraint unq_hid unique (hid) ;

2>.添加Maven依赖

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.org.yinzhengjie</groupId>
<artifactId>Mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.1</version>
</dependency>
</dependencies>
</project>

3>.目录结构如下:

二.编写自定义类

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.mybatis.domain.one2one.fk; public class Husband {
private Integer id ;
private String hname ;
private Wife wife; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getHname() {
return hname;
} public void setHname(String hname) {
this.hname = hname;
} public Wife getWife() {
return wife;
} public void setWife(Wife wife) {
this.wife = wife;
}
}

Husband.java 文件内容

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.mybatis.domain.one2one.fk; public class Wife {
private Integer id ;
private String wname ;
private Husband husband ; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getWname() {
return wname;
} public void setWname(String wname) {
this.wname = wname;
} public Husband getHusband() {
return husband;
} public void setHusband(Husband husband) {
this.husband = husband;
}
}

Wife.java 文件内容

三.编写配置文件

 <?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>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!--注意 : “?characterEncoding=utf-8&amp;autoReconnect=true&amp;failOverReadOnly=false&amp;allowMultiQueries=true” 表示开启批处理模式-->
<property name="url" value="jdbc:mysql://localhost:5200/yinzhengjie?characterEncoding=utf-8&amp;autoReconnect=true&amp;failOverReadOnly=false&amp;allowMultiQueries=true"/>
<property name="username" value="root"/>
<property name="password" value="yinzhengjie"/>
</properties> <!-- 我们使用typeAliases标签给我们自定义类起个别名。-->
<typeAliases>
<typeAlias type="cn.org.yinzhengjie.mybatis.domain.one2one.fk.Husband" alias="_HusbandFK" />
<typeAlias type="cn.org.yinzhengjie.mybatis.domain.one2one.fk.Wife" alias="_WifeFK" />
</typeAliases> <environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 我们使用mapper标签指定映射文件,使用resource指定具体的路径,如果没有写绝对路径,默认的根路径就在resources目录中-->
<mapper resource="HusbandFKMapper.xml"/>
<mapper resource="WifeFKMapper.xml"/>
</mappers>
</configuration>

mybatis-config.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="husbandsfk">
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
insert into husbandsfk(hname) values(#{hname}) ;
</insert> <select id="selectOne" resultMap="rm_Husband">
select
h.id hid,
h.hname hhname ,
w.id wid ,
w.wname wwname ,
w.hid whid
from
husbandsfk h left outer join wifesfk w on w.hid = h.id
where
h.id = #{id}
</select> <resultMap id="rm_Husband" type="_HusbandFK">
<id column="hid" property="id"/>
<result column="hhname" property="hname" />
<association property="wife" javaType="_WifeFK" column="whid">
<id column="wid" property="id"/>
<result column="wwname" property="wname"/>
<association property="husband" javaType="_HusbandFk" column="whid">
<id column="hid" property="id"/>
<result column="hhname" property="hname"/>
</association>
</association>
</resultMap>
</mapper>

HusbandFKMapper.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="wifesfk">
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
insert into wifesfk(wname , hid) values(#{wname} , #{husband.id}) ;
</insert> </mapper>

WifeFKMapper.xml 文件内容

四.编写测试代码

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.mybatis.test; import cn.org.yinzhengjie.mybatis.domain.one2one.fk.Husband;
import cn.org.yinzhengjie.mybatis.domain.one2one.fk.Wife;
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 org.junit.Test; import java.io.InputStream; /**
* 测试一对一
*/
public class TestOne2OneFK {
/**
* 测试插入
*/
@Test
public void testInsert() throws Exception {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(in);
SqlSession sess = sf.openSession();
Husband h1 = new Husband();
h1.setHname("liyapeng");
Wife w1 = new Wife();
w1.setWname("wangfei");
h1.setWife(w1);
w1.setHusband(h1); sess.insert("husbandsfk.insert" , h1) ;
sess.insert("wifesfk.insert" , w1) ; sess.commit();
sess.close();
System.out.println("插入成功!");
} /**
* 测试查询
*/
@Test
public void testSelectOne() throws Exception {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(in);
SqlSession sess = sf.openSession();
Husband husband = (Husband) sess.selectOne("husbandsfk.selectOne", 1);
System.out.println(husband.getHname());
sess.commit();
sess.close();
}
}

  运行以上代码查看数据库内容如下:

Java基础-SSM之mybatis一对一外键关联的更多相关文章

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

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

  2. Java基础-SSM之mybatis多对多关联

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

  3. Java基础-SSM之mybatis一对多和多对一关系映射

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

  4. Java基础-SSM之mybatis的统计函数和分页查询

    Java基础-SSM之mybatis的统计函数和分页查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  5. Java基础-SSM之mybatis的树形控件(自关联)

    Java基础-SSM之mybatis的树形控件(自关联) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建areas表: use y ...

  6. Java基础-SSM之mybatis快速入门篇

    Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...

  7. Hibernate5.2之一对一外键关联(五)

                                                     Hibernate5.2之一对一外键关联(五) 一.简介 上篇文章中笔者介绍了Hibernate关联关 ...

  8. Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联

    2018-11-10  22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate ...

  9. hibernate5(12)注解映射[4]一对一外键关联

    在实际博客站点中,文章内容的数据量非常多,它会影响我们检索文章其他数据的时间,如查询公布时间.标题.类别的等. 这个时候,我们能够尝试将文章内容存在还有一张表中,然后建立起文章--文章内容的一对一映射 ...

随机推荐

  1. 【ORACLE】oracle数据库用户密码复杂度配置

    -- 设置密码复杂度 SQL> @ /u01/app/oracle/product/11.2.0/db_1/rdbms/admin/utlpwdmg.sql -- 测试 SQL> alte ...

  2. Asp.Net_HttpModule的应用

    IHttpModule向实现类提供模块初始化和处置事件. IHttpModule包含兩個方法: public void Init(HttpApplication context);public voi ...

  3. 绕过用编码方式阻止XSS攻击的几个例子

    阻止攻击的常用方法是:在将HTML返回给Web浏览器之前,对攻击者输入的HTML进行编码.HTML编码使用一些没有特定HTML意义的字符来代替那些标记字符(如尖括号).这些替代字符不会影响文本在web ...

  4. 【Beta阶段】第四次Scrum Meeting!

    每日任务内容: 本次会议为第四次Scrum Meeting会议~ 由于本次会议女生今日因身体不适未参与会议,故在宿舍楼开会,大家集会15分钟. 队员 昨日完成任务 明日要完成任务 刘乾 #130 学习 ...

  5. 【MOOC EXP】Linux内核分析实验二报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000  [操作系统是如何工作的]   教学内 ...

  6. 《Linux内核分析》第二周学习笔记

    <Linux内核分析>第二周学习笔记 操作系统是如何工作的 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...

  7. FASIC: A Fast-recovery, Adaptively Spanning In-band Control Plane in Software-Defined Network

    2017 IEEE Global Communications Conference 问题:in-band网络中如果物理链路阻塞或者硬件故障,导致控制器的消息不能及时到达各个交换机导致网络不一致甚至某 ...

  8. 第二个Sprint冲刺第五天(燃尽图)

  9. vs2013安装过程及使用心得

    进入http://www.itellyou.cn/ 方法/步骤 1 1:点击中文简体 2:钩出前面的空格 3:点击详细信息 4:复制到网页进行搜索迅雷下载   等待下载完成之后,双击文件 我们双击文件 ...

  10. Window环境下RabbitMQ的安装和配置教程

    一.安装 首先,RabbitMQ基于Erlang语言环境,所以需要先安装Erlang. Erlang下载地址:http://www.erlang.org/downloads 按照安装程序默认安装完成就 ...