1.创建SQL脚本:

CREATE TABLE t_person(
  id int(3) not null auto_increment,
  name varchar(20) default null,
  age int(3) default 0,
  primary key (id)
) charset="gb2312";

CREATE TABLE t_passport(
  id int(3),
  serial varchar(20) default NULL,
  expiry int(3) default NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_passport FOREIGN KEY (id) REFERENCES t_person(id)
)charset="gb2312";

--  t_passport主键Id 参照外键 t_person下的Id
2.创建实体类(POJO):
Person.java
package com.lixing.ibatis.entity.onetoone;

import java.io.Serializable;

public class Person implements Serializable{
  private static final long serialVersionUID = 4524251837950555570L;
  private int id;
  private String name;
  private int age;
  private Passport passport;  //Person指向Passport的引用
  
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public Passport getPassport() {
    return passport;
  }
  public void setPassport(Passport passport) {
    this.passport = passport;
  }
}

Passport.java
package com.lixing.ibatis.entity.onetoone;

public class Passport {
  private int id;
  private String serial;
  private int expiry;
  private Person person;  //Passport指向Person的引用
  
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getSerial() {
    return serial;
  }
  public void setSerial(String serial) {
    this.serial = serial;
  }
  public int getExpiry() {
    return expiry;
  }
  public void setExpiry(int expiry) {
    this.expiry = expiry;
  }
  public Person getPerson() {
    return person;
  }
  public void setPerson(Person person) {
    this.person = person;
  }  
}

3.创建Mapper接口:
PersonMapper.java
package com.lixing.ibatis.onetoone.mapper;

import com.lixing.ibatis.entity.onetoone.Person;

public interface PersonMapper {

  void insertPerson(Person person);
  Person getPerson(int id);
}
PassportMapper.java
package com.lixing.ibatis.onetoone.mapper;

import com.lixing.ibatis.entity.onetoone.Passport;

public interface PassportMapper {
  void insertPassport(Passport passport);
  Passport getPassport(int id);
}

4.创建Mapper映射XML文件:
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.lixing.ibatis.onetoone.mapper.PersonMapper">
  <parameterMap type="Person" id="parameterPersonMap">
    <parameter property="id"/>
    <parameter property="name"/>
    <parameter property="age"/>
  </parameterMap>
  
  <insert id="insertPerson"    parameterMap="parameterPersonMap">
    <selectKey    keyProperty="id" resultType="int" order="AFTER">
      SELECT LAST_INSERT_ID() AS ID
    </selectKey>
    INSERT INTO t_person(name,age)
    VALUES(#{name},#{age})
  </insert>  
  
  <resultMap type="Person" id="personMap">
    <result property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="age" column="age"/>
    <association property="passport" column="id" javaType="Passport" select="com.lixing.ibatis.onetoone.mapper.PassportMapper.getPassport">
    </association>
<!-- property:指Person中指向Passport对象的实例名称  -->
<!--select:指执行级联查询-->
  </resultMap>  
  <select id="getPerson" resultMap="personMap" parameterType="int">
    SELECT * FROM t_person
    WHERE id=#{id}
  </select>
</mapper>    
PassportMapper.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.lixing.ibatis.onetoone.mapper.PassportMapper">
  <parameterMap type="Passport" id="passportMap">
    <parameter property="id"/>
    <parameter property="serial"/>
    <parameter property="expiry"/>    
  </parameterMap>
  
  <insert id="insertPassport" parameterMap="passportMap">
    INSERT INTO t_passport(id,serial,expiry)
    VALUES(?,?,?)
  </insert>    
  
  <resultMap type="Passport" id="passportMap">
    <result property="id" column="id"/>
    <result property="serial" column="serial"/>
    <result property="expiry" column="expiry"/>
    <association property="person" column="id" select="com.lixing.ibatis.onetoone.mapper.PersonMapper.getPerson">    
    </association>

  </resultMap>
  
  <select id="getPassport" resultMap="passportMap" parameterType="int">
    SELECT *
    FROM t_passport
    WHERE id=#{id}
  </select>        
</mapper>
5.创建测试类:
package com.lixing.ibatis.test;

import java.sql.SQLException;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.transaction.Transaction;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;

import com.lixing.ibatis.entity.onetoone.Passport;
import com.lixing.ibatis.entity.onetoone.Person;
import com.lixing.ibatis.onetoone.mapper.PassportMapper;
import com.lixing.ibatis.onetoone.mapper.PersonMapper;
import com.lixing.ibatis.util.MyBatisUtil;

public class PassportMapperTest {
  private SqlSessionFactory sqlSessionFactory = null;
  private SqlSession session = null;

@Before
  public void before() {
    sqlSessionFactory = MyBatisUtil.getInstance();
    session = sqlSessionFactory.openSession();
  }

@Test
  public void testInsertPerson() throws SQLException {
    Person person = new Person();
    person.setName("李新2");
    person.setAge(25);
    
    Passport passport = new Passport();
    
    passport.setSerial("Serial2");
    passport.setExpiry(22222);
    
    
    TransactionFactory transactionFactory = new JdbcTransactionFactory();
    Transaction tx = transactionFactory.newTransaction(session
        .getConnection(), false);    
    PersonMapper personMapper = session.getMapper(PersonMapper.class);
    PassportMapper passportMapper = session.getMapper(PassportMapper.class);
    try{
      personMapper.insertPerson(person);    
      passport.setId(person.getId());
      passportMapper.insertPassport(passport);
      tx.commit();
    }catch(Exception e){
      tx.rollback();
      e.printStackTrace();
    }finally{
      tx.close();
      System.out.println(person.getId());
    }
  }

@Test
  public void testGetPerson(){
    PersonMapper personMapper=session.getMapper(PersonMapper.class);
    Person person=personMapper.getPerson(2);
    Passport passport=person.getPassport();
    System.out.println(person.getId()+"\t"+person.getName()+"\t"+person.getAge()+"\t"+passport.getSerial()+"\t"+passport.getExpiry());
    session.commit();
  }
  
  @Test
  public void testGetPassport(){
    PassportMapper passportMapper=session.getMapper(PassportMapper.class);
    Passport passport=passportMapper.getPassport(2);
    Person person=passport.getPerson();
    System.out.println(passport.getId()+"\t"+passport.getExpiry()+"\t"+person.getName());
  }

@After
  public void after() {
     session.close();
  }
}

6.Mybatis配置文件:
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <settings>
    <!-- changes from the defaults for testing -->
    <setting name="cacheEnabled" value="false" />
    <setting name="useGeneratedKeys" value="true" />
    <setting name="defaultExecutorType" value="REUSE" />
  </settings>
  
  <typeAliases>
    <!---->
    <typeAlias alias="Passport" type="com.lixing.ibatis.entity.onetoone.Passport" />
    
    <typeAlias alias="Person" type="com.lixing.ibatis.entity.onetoone.Person"/>
  </typeAliases>

<environments default="development">
    <environment id="development">
      <transactionManager type="JDBC" />
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/test" />
        <property name="username" value="root" />
        <property name="password" value="7501857" />
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <!---->
    <mapper resource="com/lixing/ibatis/onetoone/mapper/PassportMapper.xml" />
    
    <mapper resource="com/lixing/ibatis/onetoone/mapper/PersonMapper.xml" />
    
  </mappers>
</configuration>

最新文章

  1. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 防止暴力破解密码、提高大型信息系统安全
  2. MVC入口程序 | 简单调用及实例化
  3. tesseract-ocr 提高验证码识别率手段之---识别码库训练方法
  4. Java敏捷数据库迁移框架&mdash;&mdash;Flyway
  5. CoreLocation MKMapView
  6. Android子线程更新主界面
  7. Target runtime Apache Tomcat v6.0 is not defined. phyy Unknown Faceted Project Problem
  8. Gson 基础教程 —— 自定义类型适配器(TypeAdapter)
  9. discuz门户文章页面模板修改
  10. python学习——DAY1
  11. Scrum
  12. react入门之使用react-bootstrap当轮子造车(二)
  13. linux命令详解(一)netstat
  14. SSD: Single Shot MultiBoxDetector英文论文翻译
  15. Sublime Text3—自带快捷键介绍
  16. mysql备份命令
  17. Codeforces Round #536 (Div. 2)--1106D - Lunar New Year and a Wander
  18. LINK1104:无法打开文件&quot;\.obj&quot;原因及解决办法
  19. python中常用函数整理
  20. Vue框架的两种使用方式

热门文章

  1. 查询相应的key
  2. LightOJ - 1341唯一分解定理
  3. 【转】Chrome保存mht网页文件的方法 – 无需任何插件,完美!
  4. python基础之socket编程(TCP三次握手和四次挥手)
  5. Spring Batch教程
  6. 【CSAPP】二、信息的表示和处理
  7. 简要谈谈javascript bind 方法
  8. maven打的包中含源文件jar包
  9. Android 仿淘宝属性标签页
  10. opencv 边界确定函数