关于 Mybatis一对一关系的映射详解

关于 Mybatis一对一关系的映射

先准备两张表 , 数据库使用的Mysql

  

CREATE TABLE person(

    pno INT(10) PRIMARY KEY AUTO_INCREMENT ,     pname VARCHAR(20)   )
CREATE TABLE card(

    cno INT(10) PRIMARY KEY AUTO_INCREMENT ,     cname VARCHAR(20) ,     pno INT(10) REFERENCES person(pno)   )

创建两个实体类

人的实体类

public class Person {
    private Integer pno;
    
    private String pname; public Integer getPno() { return pno; } public void setPno(Integer pno) { this.pno = pno; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public String toString() { return "Person [pno=" + pno + ", pname=" + pname + "]"; } }

身份证实体类

public class Card {
    private Integer cno;
    
    private String cname; private Person person; public Integer getCno() { return cno; } public void setCno(Integer cno) { this.cno = cno; } public String getCname() { return cname; } public void setCname(String cname) { this.cname = cname; } public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } public String toString() { return "Card [cno=" + cno + ", cname=" + cname + ", person=" + person + "]"; } }

提示: 尽量把实体类名和数据库中的表名一致 , 实体类中的属性名和表中属性名一致

  

  

然后呢就可以写对于数据库操作的接口 , 和对映的映射文件了

先写一个对于人的简单查询

人的操作接口

public interface PersonMapper {
    /**
     * @category 无条件查询所有的Person数据
     * @return */ public List<Person> findAll(); /** * @category 根据人的pno查询 * @param pno * @return */ public Person find(Integer pno); }

PersonMapper 映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 定义dtd文件 --> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 接口操作与数据操作绑定 cn.hong.mapper.PersonMapper 是你的PersonMapper接口路径 --> <mapper namespace="cn.hong.mapper.PersonMapper"> <!-- 将实体类和数据库中的表绑定 --> <resultMap type="cn.hong.bean.Person" id="pMap"> <!-- 主键 property指定实体类属性 | column指定数据库表中的属性 | javaType实体类中属性的类型 --> <id property="pno" column="pno" javaType="Integer"/> <!-- 普通属性 property指定实体类属性 | column指定数据库表中的属性 | javaType实体类中属性的类型 --> <result property="pname" column="pname" javaType="String"/> </resultMap> <!-- 接口查询操作 id为接口内的方法名 | resultMap为实体和数据对应值 --> <select id="find" resultMap="pMap"> <!-- 注意SQL语句不能以;结尾否则会报错 --> SELECT * FROM PERSON <where> <if test="pno!=null"> and pno=#{pno} </if> </where> </select> </mapper>

身份证接口

public interface CardMapper {
    
    /**
     * @category 查询Card
     * @param Integer * @return Card */ public Card find(Integer no); }

接口对应的映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 定义dtd文件 --> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 接口操作与数据操作绑定 cn.hong.mapper.CardMapper 是你的CardMapper接口路径 --> <mapper namespace="cn.hong.mapper.CardMapper"> <!-- 将实体类和数据库中的表绑定 --> <resultMap type="cn.hong.bean.Card" id="cMap"> <!-- 主键 property指定实体类属性 | column指定数据库表中的属性 | javaType实体类中属性的类型 --> <id property="cno" column="cno" javaType="Integer"/> <!-- 普通属性 property指定实体类属性 | column指定数据库表中的属性 | javaType实体类中属性的类型 --> <result property="cname" column="cname" javaType="String"/> <!-- association 指类属性 | property指实体类中的Person类属性 | column指的是数据库中标的属性 | 
        select 调用 cn.hong.mapper.PersonMapper 空间中的 find 并不是接口中的find方法 --> <association property="person" column="pno" select="cn.hong.mapper.PersonMapper.find" /> </resultMap> <!-- 接口查询操作 id为接口内的方法名 | resultMap为实体和数据对应值 --> <select id="find" resultMap="cMap"> <!-- 注意SQL语句不能以;结尾否则会报错 --> SELECT * FROM Card <where> <if test="pno!=null"> and pno=#{pno} </if> </where> </select> </mapper>

以上对于mybatis一对一配置的一种方法 , 相比于其他方法这种更加难一点 , 难理解这个其他的也就没问题了!

如果觉得帮到了你就点个赞吧

猜你喜欢

转载自www.cnblogs.com/loveYahong/p/mybatisStart.html