第一步:建数据库表

CREATE TABLE tb_card(
  id INT PRIMARY KEY,
  code VARCHAR(18)
)

CREATE TABLE tb_person(
  id INT PRIMARY KEY,
  name VARCHAR(18),
  sex VARCHAR(18),
  age INT,
  card_id INT UNIQUE,
  FOREIGN key (card_id) REFERENCES tb_card(id)
)

第二步:创建将要与数据库表字段映射的类Card和Person类,以及获取SqlSession对象的FKSqlSessionFactory类;

配置mybatis的配置文件mybatis-config.xml文件以及日志log4j.properties文件。

第三步:创建mapper文件

/MyBatisRelationMapping/src/com/web/mybatis/mapper/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="com.web.mybatis.mapper.CardMapper">
    <!-- 根据id查询Card,返回Card对象 -->
    <select id="selectCardById" parameterType="int" resultType="com.web.mybatis.domain.Card">
        SELECT * FROM tb_card WHERE id=#{id}
    </select>
</mapper>

/MyBatisRelationMapping/src/com/web/mybatis/mapper/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="com.web.mybatis.mapper.PersonMapper">   
    <!-- 映射Person对象的resultMap -->
    <resultMap type="com.web.mybatis.domain.Person" id="personMapper">
        <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="com.web.mybatis.mapper.CardMapper.selectCardById" 
           javaType="com.web.mybatis.domain.Card"/>
    </resultMap>
    <!-- 根据id查询Person,返回resultMap -->
    <select id="selectPersonById" parameterType="int" resultMap="personMapper">
        SELECT * FROM tb_person WHERE id=#{id}
    </select>
</mapper>

第四步:创建与mapper文件同名的接口类

MyBatis官方手册建议通过mapper接口的代理对象访问mybatis,该对象关联了SqlSession对象,接口名称与mapper文件同名,方法名和参数也必须好xml文件中的元素id属性和parameterType属性一致。

/MyBatisRelationMapping/src/com/web/mybatis/mapper/PersonMapper.java

package com.web.mybatis.mapper;

import com.web.mybatis.domain.Person;

public interface PersonMapper {
    /**
     * 根据id查询Person
     * 方法名和参数必须和xml文件中的<select.../>元素的id属性和parameterType属性一致
     */
    Person selectPersonById(Integer id);
}

第五步:测试类

package com.web.mybatis.test;

import org.apache.ibatis.session.SqlSession;

import com.web.mybatis.domain.Person;
import com.web.mybatis.factory.FKSqlSessionFactory;
import com.web.mybatis.mapper.PersonMapper;

public class Test {
    
    public static void oneToOneTest() {
        SqlSession session = FKSqlSessionFactory.getSqlSession();
        //获得mapper接口的代理对象
        PersonMapper pm = session.getMapper(PersonMapper.class);
        //直接调用接口的方法,查询id为1的Person数据
        Person p = pm.selectPersonById(1);    
        System.out.println(p.toString());
        System.out.println(p.getCard().toString());
        session.commit();
        session.close();
    }
    
    public static void main(String[] args) {
        oneToOneTest();
    }

}

 

相关文章: