第一步:建数据库表
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(); } }