• mybatis一对一关联关系映射


     一对一关系:在操作上,任意一方引入对方的主键作为外键。

     例如 person 和 IDcard,一个人只有一个身份证号,而一个身份证号只对应一个人。

    Person 表

     IDcard 表

     

     //Person 持久化类

    public class Person {
        private Integer id; 
        private String name; 
        private Integer age; 
        private String sex; 
    
        private IdCard card; //一对一关系映射
        
       //setter/getter方法
    }

     //身份证持久化类

    public class IdCard {
        private Integer id; 
        private String code;
    }

    PersonMapper接口

    public interface PersonMapper {
        Person selectPersonById(int 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.jason.bootmybatis.mapper.PersonMapper">
    
        <resultMap id="BaseResultMap" type="cn.jason.bootmybatis.model.Person">
            <id column="id" property="id" jdbcType="INTEGER"/>
            <result column="name" property="name" jdbcType="VARCHAR"/>
            <result column="age" property="age" jdbcType="INTEGER"/>
            <result column="sex" property="sex" jdbcType="VARCHAR"/>
    
            <!--这是嵌套查询,这样不方便,开发效率比较低,需要写两处sql和mapper接口和mapper文件,比较多余,
            现在我想只写一处sql就把需求搞定,也就是写多表查询。把多表查询语句写在一个mapper文件中就可以了。-->
            <!--   <association property="card" column="card_id" javaType="IdCard"
                            select="cn.jason.bootmybatis.mapper.IdCardMapper.selectById">
               </association>-->
               
            <!--嵌套结果查询 一对一关系映射-->
            <association property="card" javaType="IdCard">
                <!--这里面的属性都是关联的那个实体的属性,都是可以在前台获取到的-->
                <id property="id" column="card_id"/><!-- id 为主键列,也就是在 tb_idcard 表中的 id 对应 tb_person 表中的 card_id -->
                <result property="code" column="code"/><!-- result表示需要查询出来的结果字段, column="code" 为tb_idcard中的字段-->
            </association>
    
        </resultMap> 
    
        <select id="selectPersonById" parameterType="Integer" resultMap="BaseResultMap">
                select p.*,idcard.code
                from tb_person p ,tb_idcard idcard
                where p.card_id=idcard.id and p.id=#{id}
        </select> 
    
    </mapper>

     Person业务层接口

    //service业务层接口
    public interface FindPersonWithIdCard {
        Person findByIdWithIdcard(int id);
    }

    业务层实现类

    @Service
    public class FindPersonWithIdCardImpl implements FindPersonWithIdCard {
        @Autowired
        private PersonMapper personMapper;
     
        @Override
        public Person findByIdWithIdcard(int id) {
            return personMapper.selectPersonById(id);
        }
    }

    控制器类

    @Controller
    public class OneToOne {
        @Autowired
        private FindPersonWithIdCard findPersonWithIdCard;
     
        @RequestMapping("/findpersonid/{id}")//restful架构风格
        public String find(@PathVariable int id, Model model) {
            model.addAttribute("personinfo", findPersonWithIdCard.findByIdWithIdcard(id));
            return "personinfo";
        }
     
    }

    页面

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org"
          xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="UTF-8">
        <title>person信息页面</title>
    </head>
    <body>
    <table>
        <thead>
        <tr>
            <th>personID</th>
            <th>姓名</th>
            <th>年龄</th>
            <th>身份证号</th>
            <th>idcardID</th>
        </tr>
        </thead>
        <tr>
            <td th:text="${personinfo.id}">personid</td>
            <td th:text="${personinfo.name}">姓名</td>
            <td th:text="${personinfo.age}">年龄</td>
            <td th:text="${personinfo.card.code}">身份证号</td>
            <td th:text="${personinfo.card.id}">idcardID</td>
        </tr>
    </table>
    </body>
    </html>

    REF

    https://www.cnblogs.com/jasonboren/p/11394758.html

    https://blog.csdn.net/abc997995674/article/details/80873053

  • 相关阅读:
    Birt报表存储过程多选参数的设置
    jQuery UI AutoComplete的使用
    关于事件的简单优化
    Java编程思想(Chapter2、4、6)
    CSS层模型
    [转]Java并发编程:Lock
    Java多线程synchronized同步
    关于Thread.currentThread()和this的差异
    关于JavaScript闭包的小问题
    ReactiveCocoa(二)
  • 原文地址:https://www.cnblogs.com/emanlee/p/15721636.html
Copyright © 2020-2023  润新知