mybatis 一对一映射
xml
<mapper namespace="com.oracle.dao.one2oneDao">
<sql id="personColum"> id,name,gender,age</sql>
<sql id="passportColum"> id ,bh,person_id</sql>
<sql id="passportColum2"> id ,bh</sql> <resultMap type="com.oracle.pojo.Passport" id="passportResultMap">
<id column="id" property="id" javaType="int" jdbcType="INTEGER"/>
<result column="bh" property="bh" javaType="string" jdbcType="VARCHAR"/>
<association property="person" column="person_id" javaType="com.oracle.pojo.Person" select="getPerson"></association>
</resultMap> <select id="getPerson" parameterType="int" resultType="com.oracle.pojo.Person">
select <include refid="personColum"></include>
from t_person_fk
where id=#{id}
</select> <select id="getPassport" parameterType="int" resultMap="passportResultMap">
select <include refid="passportColum"></include>
from t_passport_fk
where person_id=#{id}
</select>
<!-- ||||||||||||||||||||||||||||||||||| --> <resultMap type="com.oracle.pojo.Passport" id="passportResult">
<id column="id" property="id" javaType="int" jdbcType="INTEGER"/>
<result column="bh" property="bh" javaType="string" jdbcType="VARCHAR"/>
<association property="person" column="person_id" javaType="com.oracle.pojo.Person" resultMap="personResult"></association>
</resultMap> <resultMap type="com.oracle.pojo.Person" id="personResult">
<id column="id" property="id" javaType="int" jdbcType="INTEGER"/>
<result column="name" property="name" javaType="string" jdbcType="VARCHAR"/>
<result column="gender" property="gender" javaType="string" jdbcType="VARCHAR"/>
<result column="age" property="age" javaType="int" jdbcType="INTEGER"/>
</resultMap> <select id="getPersonAndPassport" parameterType="int" resultMap="passportResult">
select person.id,person.name,person.age,person.gender,
passport.id,passport.bh
from t_passport_fk passport left join
t_person_fk person on passport.person_id = person_id
where person.id=#{id}
</select>
<!-- |||||||||||||主键映射||||||||||||||||||| --> <select id="getPersonPK" parameterType="int" resultType="com.oracle.pojo.Person">
select <include refid="personColum"></include>
from t_person_pk
where id=#{id}
</select> <select id="getPassportPk" parameterType="int" resultMap="passportResultMapPK">
select <include refid="passportColum2"></include>
from t_passport_pk
where id=#{id}
</select> <resultMap type="com.oracle.pojo.Passport" id="passportResultMapPK">
<id column="id" property="id" javaType="int" jdbcType="INTEGER"/>
<result column="bh" property="bh" javaType="string" jdbcType="VARCHAR"/>
<association property="person" column="id" javaType="com.oracle.pojo.Person" select="getPersonPK"></association>
</resultMap>
Dao
public interface one2oneDao {
//////////////////外键映射
public Passport getPassport(int id); public Passport getPersonAndPassport(int id); ///////////////////////主键映射 public Passport getPassportPk(int id); }
Test
public static void main(String[] args) {
//获取数据源
String resource = "mybatis.xml";
InputStream inputStream=null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sqlSessionFactory.openSession(); one2oneDao one2onedao = session.getMapper(one2oneDao.class); // Passport passport = one2onedao.getPassport(2);
// System.out.println(passport); // Passport passport = one2onedao.getPersonAndPassport(2);
// System.out.println(passport); // Passport passportPk = one2onedao.getPassportPk(1);
// System.out.println(passportPk); session.commit();
} }
sql
/*基于外键映射*/
CREATE TABLE t_person_fk
(
id NUMBER(10) PRIMARY KEY,
name VARCHAR2(20) NOT NULL,
gender VARCHAR2(10),
age NUMBER(3) CHECK(age BETWEEN 1 AND 100)
); CREATE TABLE t_passport_fk
(
id NUMBER(10) PRIMARY KEY,
bh VARCHAR2(30) NOT NULL UNIQUE,
person_id NUMBER(10) REFERENCES t_person_fk(id) UNIQUE
); CREATE SEQUENCE t_person_fk_seq
START WITH 1
INCREMENT BY 1; CREATE SEQUENCE t_passport_fk_seq
START WITH 1
INCREMENT BY 1; /*基于主键映射*/
CREATE TABLE t_person_pk
(
id NUMBER(10) PRIMARY KEY,
name VARCHAR2(20) NOT NULL,
gender VARCHAR2(10),
age NUMBER(3) CHECK(age BETWEEN 1 AND 100)
); CREATE TABLE t_passport_pk
(
id NUMBER(10) PRIMARY KEY REFERENCES t_person_pk(id),
bh VARCHAR2(30) NOT NULL UNIQUE
); CREATE SEQUENCE t_person_pk_seq
START WITH 1
INCREMENT BY 1;
mybatis 一对一映射的更多相关文章
- Mybatis一对一映射
一.Mybatis一对一映射 本例讲述使用mybatis开发过程中常见的一对一映射查询案例.只抽取关键代码和mapper文件中的关键sql和配置,详细的工程搭建和Mybatis详细的流程代码可参见&l ...
- mybatis一对一映射配置详解
听说mybatis一对一有三种写法,今天我试了一下. 数据库表准备 为了偷懒,我直接就拿用户权限菜单里的菜单表和菜单与权限的中间表做实现,他们原来是多对多的关系,这边我假设这两张表是一对一. 表 g ...
- mybatis 一对一 映射实体类、嵌套查询
一对一 在SysUser 类中增加SysRole字段.1.sql语句将role.role_name映射到role.roleName上. 2.还可以在XML 映射文件中配置结果映射.<result ...
- Mybatis一对一映射resultMap子标签中顺序问题
直接上图 鼠标点上红线出现如下提示 The content of element type "resultMap" must match "(constructor?, ...
- 【Mybatis高级映射】一对一映射、一对多映射、多对多映射
前言 当我们学习heribnate的时候,也就是SSH框架的网上商城的时候,我们就学习过它对应的高级映射,一对一映射,一对多映射,多对多映射.对于SSM的Mybatis来说,肯定也是差不多的.既然开了 ...
- mybatis高级映射(一对一,一对多)
mybatis高级映射 一对一关联映射 需求:查询订单信息,关联查询用户信息(一个订单对应一个用户) (1)通过resultType实现 sql语句: select orders.* , USER.u ...
- Mybatis输入输出映射_动态sql_关联关系(一对一、一对多、多对多)
Mybatis输入输出映射_动态sql_关联关系(一对一.一对多.多对多)输入输出映射parameterType完成输入映射parameterType可以传入的参数有,基本数据类型(根据id查询用户的 ...
- MyBatis高级查询 一对一映射
drop database if exists simple; create database simple; use simple; drop table if exists sys_user; c ...
- MyBatis从入门到精通(九):MyBatis高级结果映射之一对一映射
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解MyBatis中实现查 ...
随机推荐
- python基础学习笔记——列表技巧
列表: 循环删除列表中的每⼀个元素 li = [, , , ] for e in li: li.remove(e) print(li) 结果: [, ] 分析原因: for的运⾏过程. 会有⼀个指针来 ...
- eclipse中tab键设置
1.点击 window->preference-,依次选择 General->Editors->Text Editors,选中右侧的 insert space for tabs;如下 ...
- ASP.NET Web Application中使用链接文件
最近重构一个内部的平台系统,作为一个平台,其下有几个子系统,每个子系统有自己的网站系统.而每个网站使用的是统一的风格,统一的验证机制,反馈系统,等等.所以,为了避免几个子系统中重复出现相同的资源或文件 ...
- 九度oj 题目1131:合唱队形
题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们 ...
- java面试题之什么是死锁、活锁、饿死和竞态条件?
死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种相互等待的现象,若无外力作用,他们将无法推进下去: 活锁:是指两个线程优先级相同,都礼让不走,就这样一直僵持下去: 饿死:在 ...
- ReSharper7.1.25.234 注册机
经常用vs做开发的人都知道,ReSharper是vistual studio必备插件之一.他的智能提示,智能感知,.net底层方法查看,测试等都非常方便,给程序员带来了巨大的效率. 但众所周知ReSh ...
- android的网络访问URL
Thread visitBaiduThread = new Thread(new VisitWebRunnable()); visitBaiduThread.start(); try ...
- elasticsearch入门使用(五) kibana&x-pack安装使用
Kibana User Guide 一.UI安装 https://www.elastic.co/downloads/kibana 下载rpm直接运行即可 二.参数配置 find / -name kib ...
- R必学包之dplyr
http://www.360doc.com/content/17/1204/10/50223086_709726679.shtml
- 接口自动化测试之HTTP协议详解
协议 简单理解,计算机与计算机之间的通讯语言就叫做协议,不同的计算机之间只有使用相同的协议才能通信.所以网络协议就是为计算机网络中进行数据交换而建立的规则,标准或约定的集合. OSI模型 1978年国 ...