mybatis一对一映射

1)如图

2)创建students.sql和cards.sql

drop table students;
drop table cards;
create table cards(
    id    int(5)    primary key,
    num varchar(20)
);
create table students(
    id    int(5)    primary key,
    name varchar(10),
    cid int(5),
    constraint cid_fk foreign key(cid) references cards(id)
);
insert into cards(id,num) values(1,‘111‘);
insert into students(id,name,cid) values(1,‘哈哈‘,1);

3)创建Students.java和Card.java

public class Card {
    private Integer id;
    private String num;
    private Student student;
    public Card(){}
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getNum() {
        return num;
    }
    public void setNum(String num) {
        this.num = num;
    }
    public Student getStudent() {
        return student;
    }
    public void setStudent(Student student) {
        this.student = student;
    }
}
public class Student {
    private Integer id;
    private String name;
    private Card card;
    public Student(){}
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Card getCard() {
        return card;
    }
    public void setCard(Card card) {
        this.card = card;
    }
}

4)创建StudentMapper.xml和CardMapper.xml

CardMapper.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="cardNamespace">
    <resultMap type="loaderman.one2one.Card" id="cardMap">
        <id property="id" column="id" />
        <result property="num" column="num" />
    </resultMap>
</mapper>

StudentMapper.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="studentNamespace">
    <resultMap type="loaderman.one2one.Student" id="studentMap">
        <id property="id" column="id" />
        <result property="name" column="name"/>
        <association property="card" resultMap="cardNamespace.cardMap"/>
    </resultMap>
    <select id="findById" parameterType="int" resultMap="studentMap">
        select s.id,s.name,c.id,c.num
        from students s inner join cards c
        on s.cid = c.id
        and s.id = #{id}
    </select>
</mapper>

5)创建StudentCardDao.java

public class StudentCardDao {
    /**
     * 查询1号【学生】
     */
    public Student findById(int id) throws Exception{
        SqlSession sqlSession = null;
        try{
            sqlSession = MybatisUtil.getSqlSession();
            return sqlSession.selectOne("studentNamespace.findById",id);
        }catch(Exception e){
            e.printStackTrace();
            throw e;
        }finally{
            MybatisUtil.closeSqlSession();
        }
    }
    public static void main(String[] args) throws Exception{
        StudentCardDao dao = new StudentCardDao();
        Student student = dao.findById(1);
        System.out.println(student.getId()+":"+student.getName());
        System.out.println(student.getCard().getId()+":"+student.getCard().getNum());
    }
}

原文地址:https://www.cnblogs.com/loaderman/p/10064562.html

时间: 2024-10-23 12:29:10

mybatis一对一映射的相关文章

mybatis一对一映射配置详解

听说mybatis一对一有三种写法,今天我试了一下. 数据库表准备 为了偷懒,我直接就拿用户权限菜单里的菜单表和菜单与权限的中间表做实现,他们原来是多对多的关系,这边我假设这两张表是一对一. 表  gl_role_men:id,role_id,menu_id     --------->  实体类 GlrolemenuModel  private String id;private String roleId;private String menuId;private MenuModel men

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

MyBatis高级查询 一对一映射

drop database if exists simple; create database simple; use simple; drop table if exists sys_user; create table sys_user ( id bigint not null auto_increment comment '用户ID', user_name varchar(50) comment '用户名', user_password varchar(50) comment '密码',

mybatis一对一关联关系映射

mybatis一对一关联关系映射 在关联关系中,有一对一,一对多,多对多三种关联关系. 一对一关系:在操作上,任意一方引入对方的主键作为外键. 一对多关系:在"多"的一方添加"一"的一方的主键作为外键. 多对多关系:产生中间表引入两张表的主键作为外键,将两个主键作为联合主键或者引入新的字段作为这个中间表的主键. 一对一关联关系 例如person和IDcard,一个人只有一个身份证号,而一个身份证号只对应一个人. 以上是person表和IDcard表. public

MyBatis系列:(6)一对一映射

0.准备SQL语句(mysql) CREATE TABLE cards(     cid INT(5) PRIMARY KEY,     cnum VARCHAR(18) ); CREATE TABLE students(     sid INT(5) PRIMARY KEY,     sname VARCHAR(10),     scard_id INT(5),     CONSTRAINT students_fk FOREIGN KEY(scard_id) REFERENCES cards(

(12)Hibernate一对一映射

只要你肯努力,没有什么事情是你不能搞砸的. 需求:一个汽车(Car)有一个引擎(Engine),它是一对一的映射关系. 对于一对一的映射,有两种实现方式:基于外键的映射和基于主键的映射.这两种方式学习的重点就是映射文件的配置,推荐使用第一种方式. 1.基于外键的映射 Car.java package com.rk.hibernate.k_one2one; public class Car { private int carId; private String carName; private E

【Hibernate步步为营】--单向关联一对一映射(一)

上篇文章对多对一的关联映射做了详细的分析,它在实现上可以有两种方式,并且这两种方式实现也很简单,关键是标签<many-to-one>的使用,它分别指明了多端和一端的映射关系,这种映射关系既是对象模型中的聚合关系.接下来继续讨论关联映射. 一.唯一外键 唯一外键说的是数据库表中的每一行的外键唯一对应着另一张表中的主键,也就是说一个表的主键作为另一张表的外键,并且它们之间的关系是唯一的,这种反应到关系模型中如下图所示: 上图的两个实体表,分别为人和身份证,很明显的一个人对应着一个身份证.身份证作为

mybatis中映射文件和实体类的关联性

mybatis的映射文件写法多种多样,不同的写法和用法,在实际开发过程中所消耗的开发时间.维护时间有很大差别,今天我就把我认为比较简单的一种映射文件写法记录下来,供大家修改建议,争取找到一个最优写法~~: 以User对象和UserMap.xml为例讲解,代码如下: User为用户实体类(仅作为讲解,可以只关注引用类型变量,get/set方法省略): import com.google.common.collect.Lists; import com.gukeer.common.persisten

hibernate笔记--基于主键的单(双)向的一对一映射关系

上一节介绍的基于外键的一对一映射关系中,在Person表中有一个外键列idCard_id,对应的idCard表的主键id,至于基于主键的一对一映射关系,就是指Person表中抛弃了idcard_id这个外键列,而与idCard表共用一个主键,或者说是其外键为主键的表结构,这种基于主键的双向一对一映射关系应该这样配置: 新建一个IdCard实体类: public class IdCard { private int id; private String code; private Person p