先准备两张数据库表用来数据演示
表1
Create Table
CREATE TABLE `tb_card` (
`id` int NOT NULL AUTO_INCREMENT,
`code` varchar(18) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
表2
Create Table
CREATE TABLE `tb_person` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(18) DEFAULT NULL,
`sex` varchar(18) DEFAULT NULL,
`age` int DEFAULT NULL,
`card_id` int DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `card_id` (`card_id`),
CONSTRAINT `tb_person_ibfk_1` FOREIGN KEY (`card_id`) REFERENCES `tb_card` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
数据你们自行插入(表2中 card_id有外键约束 数据插入需要注意)
第一步
创建Card、Person对象分别映射tb_card、tb_person
Card
package cn.liziy.entity;
import java.io.Serializable;
import java.util.Objects;
/**
* @ClassName Card
* @Author:Liziy
* @Date 2020/8/6 15:08
* @Description: 身份证实体类
**/
public class Card implements Serializable {
private static final long serialVersionUID = 5337253881741214405L;
private Integer id;
private String code;
public Card() {
}
public Card(Integer id, String code) {
this.id = id;
this.code = code;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Card card = (Card) o;
return Objects.equals(id, card.id) &&
Objects.equals(code, card.code);
}
@Override
public int hashCode() {
return Objects.hash(id, code);
}
@Override
public String toString() {
return "Card{" +
"id=" + id +
", code='" + code + '\'' +
'}';
}
}
Person(注意private Card card)
package cn.liziy.entity;
import java.io.Serializable;
import java.util.Objects;
/**
* @ClassName Person
* @Author:Liziy
* @Date 2020/8/6 15:12
* @Description: 身份信息实体类
**/
public class Person implements Serializable {
private static final long serialVersionUID = -4609455187831607128L;
private Integer id;
private String name;
private String sex;
private Integer age;
//个人与身份证一一对应,一个人对应一个身份证
private Card card;
public Person(Integer id, String name, String sex, Integer age, Card card) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
this.card = card;
}
public Person() {
}
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 String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Card getCard() {
return card;
}
public void setCard(Card card) {
this.card = card;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return Objects.equals(id, person.id) &&
Objects.equals(name, person.name) &&
Objects.equals(sex, person.sex) &&
Objects.equals(age, person.age) &&
Objects.equals(card, person.card);
}
@Override
public int hashCode() {
return Objects.hash(id, name, sex, age, card);
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", card=" + card +
'}';
}
}
第二步
mybatis编写SQL以及Dao接口的编写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="cn.liziy.dao.CardDao">
<!-- 根据id查询Card, 返回Card对象 -->
<select id="selectCardById" parameterType="int" resultType="cn.liziy.entity.Card">
SELECT
id,
code
FROM tb_card
WHERE id = #{id}
</select>
</mapper>
package cn.liziy.dao;
import cn.liziy.entity.Card;
public interface CardDao {
Card selectCardById(Integer id);
}
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="cn.liziy.dao.PersonDao">
<!-- 根据id查询Person,返回resultMap -->
<select id="selectPersonById" parameterType="int"
resultMap="personMap">
SELECT
id,
name,
sex,
age,
card_id
FROM tb_person
WHERE id = #{id}
</select>
<!-- 映射Person对象的resultMap -->
<resultMap type="cn.liziy.entity.Person" id="personMap">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="age" column="age"/>
<!-- 一对一关联映射:association -->
<association property="card" column="card_id"
select="cn.liziy.dao.CardDao.selectCardById"
javaType="cn.liziy.entity.Card"/>
</resultMap>
</mapper>
package cn.liziy.dao;
import cn.liziy.entity.Person;
public interface PersonDao {
Person selectPersonById(Integer id);
}
第三步
servic层编写
package cn.liziy.service;
import cn.liziy.entity.Person;
public interface PersonService {
Person selectPersonById(Integer id);
}
package cn.liziy.service.impl;
import cn.liziy.dao.PersonDao;
import cn.liziy.entity.Person;
import cn.liziy.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @ClassName PersonServiceImpl
* @Author:Liziy
* @Date 2020/8/6 15:46
* @Description:
**/
@Service
public class PersonServiceImpl implements PersonService {
@Autowired
PersonDao personDao;
public Person selectPersonById(Integer id) {
return personDao.selectPersonById(id);
}
}
第四步
Controller层编写
package cn.liziy.controller;
import cn.liziy.entity.Person;
import cn.liziy.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @ClassName PerosnController
* @Author:Liziy
* @Date 2020/8/6 15:48
* @Description:
**/
@Controller
public class PerosnController {
@Autowired
PersonService personService;
@GetMapping("/person/{id}")
public @ResponseBody
Person person(@PathVariable Integer id){
return personService.selectPersonById(id);
}
}
测试
效果: