0.前期准备
数据库配置:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25CREATE TABLE tb_card
(
  id   INT AUTO_INCREMENT
    PRIMARY KEY,
  code VARCHAR(18) NULL,
  CONSTRAINT tb_card_id_uindex
  UNIQUE (id)
)
CREATE TABLE tb_person
(
  id      INT AUTO_INCREMENT
    PRIMARY KEY,
  name    VARCHAR(18) NULL,
  sex     VARCHAR(18) NULL,
  age     INT         NULL,
  card_id INT         NULL,
  CONSTRAINT tb_person_id_uindex
  UNIQUE (id),
  CONSTRAINT tb_person_card_id_uindex
  UNIQUE (card_id),
  CONSTRAINT tb_person_tb_card_id_fk
  FOREIGN KEY (card_id) REFERENCES tb_card (id)
)
  ENGINE = Inno
身份证和人是一对一的关系,在tb_person表中,card_id为外键,对应tb_card主键,且card_id唯一,就满足了一对一的关系。
2.POJO类
 两个pojo类:
 1
2
3
4
5public class Card implements Serializable{
 private Integer id;
 private String code;
 //getter,setter
| 1 | public class Person implements Serializable{ | 
3.mapper和mybatis-config.xml配置
mapper配置:1
2
3
4
5
6
7
8//CardMapper.xml
<mapper namespace="org.fkit.mapper.CardMapper">
    <select id="selectCardById" parameterType="int" resultType="org.fkit.domain.Card">
        SELECT * FROM tb_card WHERE id = #{id}
    </select>
</mapper>
| 1 | //PersonMapper.xml | 
在此可以给PersonMapper设置一个接口:1
2
3
4
5
6
7
8
9
10
11
12//PersonMapper.java
package org.fkit.mapper;
import org.fkit.domain.Person;
public interface PersonMapper {
    /**
     * @param id
     * @return Person
     */
    Person selectPersonById(Integer id);
}
在mybatis-config.xml中配置这2个mapper:1
2<mapper resource="org/fkit/mapper/PersonMapper.xml"/>
<mapper resource="org/fkit/mapper/CardMapper.xml"/>
4.测试
测试代码:1
2
3
4
5
6
7
8
9
10//OneToOneTset.java
public class OneToOneTest {
    public static void main(String args[])throws Exception {
        SqlSession sqlSession = FKSqlSessionFactory.getSqlSession();
        Person person = sqlSession.selectOne("org.fkit.mapper.PersonMapper.selectPersonById", 1);
        System.out.println(person);
    }
}
//output:
Person{id=1, name='jack', sex='男', age=23, card=Card{id=1, code='432801198009191038'}}
因为设置了接口,也可以如此测试:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15//OneToOneTset.java
public class OneToOneTest {
    public static void main(String args[])throws Exception {
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();
        PersonMapper personMapper = session.getMapper(PersonMapper.class);
        Person person = personMapper.selectPersonById(1);
        System.out.println(person);
    }
}
//output:
Person{id=1, name='jack', sex='男', age=23, card=Card{id=1, code='432801198009191038'}}