mybatis关联映射一对一

在项目开发中,会存在一对一的关系,比如一个人只有一个身份证,一个身份证只能给一个人使用,这就是一对一关系。一对一关系使用主外键关联。

table.sql,在数据库中创建如下两个表并插入数据

CREATE TABLE T_CARD(
    ID INT PRIMARY KEY AUTO_INCREMENT,
    CODE VARCHAR(20)
);
INSERT INTO T_CARD(CODE)VALUES('130113198701274657');

CREATE TABLE T_PERSON(
    ID INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20) DEFAULT NULL,
    SEX CHAR(20) DEFAULT NULL,
    AGE INT(11) DEFAULT NULL,
    CARD_ID INT UNIQUE,
 FOREIGN KEY(CARD_ID) REFERENCES T_CARD(ID)
);
INSERT INTO T_PERSON(NAME,SEX,AGE,CARD_ID) VALUES('张三','男','23',1);

mybatis-config.xml



  

    
    
        
    
    
    
    
    
      
      
      
        
        
        
        
      
    
  
  
  
    
    
  

PersonMapper.xml







    
        
        
        
        
    

    
        
            SELECT LAST_INSERT_ID() AS ID
        
        INSERT INTO t_person(name,sex,age,card_id)
        VALUES(#{name},#{sex},#{age},#{card.id})    
    

    
    

    
    
        
        
        
        
        
        
    

CardMapper.xml






    
    

    
        
        
    

    
        
            SELECT LAST_INSERT_ID() AS ID
        
        INSERT INTO T_CARD(id,code)
        VALUES(?,?)
    


Card.java

public class Card implements Serializable {
    
    private Integer id;  // 主键id
    private String code; // 身份证编号
}

Person.java

public class Person implements Serializable {

    private Integer id;  // 主键id
    private String name; // 姓名
    private String sex;  // 性别
    private Integer age; // 年龄
    
    // 人和身份证是一对一的关系,即一个人只有一个身份证
    private Card card; 

CardMapper.java

public interface CardMapper {

    void insertCard(Card card);

}

PersonMapper.java

public interface PersonMapper {

    /**
     * 根据id查询Person
     */
    Person selectPersonById(Integer id);


    /**
     * 插入数据
     * @param person
     */
    void insertPerson(Person person);

}

SqlSessionFactoryUtil.java

package com.rookie.bigdata.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

public class SqlSessionFactoryUtil {
    
    private static SqlSessionFactory sqlSessionFactory = null;
    
    // 初始化创建SqlSessionFactory对象
    static{
        try {
            // 读取mybatis-config.xml文件
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder()
                    .build(inputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    // 获取SqlSession对象的静态方法
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }

    // 获取SqlSessionFactory的静态方法
    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }

}

测试代码进行增查操作

package com.rookie.bigdata.test;


import com.rookie.bigdata.domain.Card;
import com.rookie.bigdata.domain.Person;
import com.rookie.bigdata.mapper.CardMapper;
import com.rookie.bigdata.mapper.PersonMapper;
import com.rookie.bigdata.utils.SqlSessionFactoryUtil;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.transaction.Transaction;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.junit.Test;


public class OneToOneTest {

    @Test
    public  void test() throws Exception {
        // 创建Session实例
        SqlSession session = SqlSessionFactoryUtil.getSqlSession();

        // 获得mapper接口的代理对象
        PersonMapper pm = session.getMapper(PersonMapper.class);
        // 直接调用接口的方法,查询id为1的Peson数据
        Person p = pm.selectPersonById(1);
        // 打印Peson对象
        System.out.println(p);
        // 打印Person对象关联的Card对象
        System.out.println(p.getCard());

        // 提交事务
        session.commit();
        // 关闭Session
        session.close();
    }

    @Test
    public void test1() throws Exception {
        SqlSession sqlSession = SqlSessionFactoryUtil.getSqlSession();
        TransactionFactory transactionFactory = new JdbcTransactionFactory();
        Transaction tx = transactionFactory.newTransaction(sqlSession
                .getConnection());

        Card card = new Card();
        card.setCode("130442154542048521");

        Person person = new Person();
        person.setName("lisi");
        person.setSex("男");
        person.setAge(30);
        person.setCard(card);


        PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
        CardMapper cardMapper = sqlSession.getMapper(CardMapper.class);

        cardMapper.insertCard(card);
        personMapper.insertPerson(person);

        System.out.println(card.getId());

       tx.commit();


    }


}

进行测试完美解决

你可能感兴趣的:(mybatis关联映射一对一)