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'}}