Mybatis一对一

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
25
CREATE 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
5
public class Card implements Serializable{

private Integer id;
private String code;
//getter,setter

1
2
3
4
5
6
7
8
public class Person implements Serializable{

private Integer id;
private String name;
private String sex;
private Integer age;
private Card card;
//getter,setter

3.mapper和mybatis-config.xml配置

mapper配置:

1
2
3
4
5
6
7
8
//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="org.fkit.mapper.CardMapper">
<select id="selectCardById" parameterType="int" resultType="org.fkit.domain.Card">
SELECT * FROM tb_card WHERE id = #{id}
</select>
</mapper>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//PersonMapper.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="org.fkit.mapper.PersonMapper">
<select id="selectPersonById" parameterType="int" resultMap="personMapper">
select * from tb_person where id = #{id}
</select>
<resultMap id="personMapper" type="org.fkit.domain.Person">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="age" column="age"/>
<association property="card" column="card_id"
select="org.fkit.mapper.CardMapper.selectCardById"
javaType="org.fkit.domain.Card"/>
</resultMap>
</mapper>

在此可以给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'}}

-------------本文结束 感谢您的阅读-------------