14mybatis一对一关系映射

mybatis one2one

mybatis 3.4.1 one2one
--------------------------------------------------
建立表
create table db_member(
id int unsigned auto_increment,
account varchar(20) not null,
pass varchar(32) not null,
name varchar(20),
aid int unsigned,
primary key(id)
)engine=innodb charset=utf8;

create table db_address(
aid int unsigned auto_increment,
aname varchar(20) not null,
aphone varchar(11) not null,
primary key(aid)
)engine=innodb auto_increment=100 charset=utf8;

drop table db_address;
truncate db_address;

insert into db_address values(null,'河南省郑州市','13014577032');
insert into db_address values(null,'北京市朝阳区','11000242424');

select * from db_address;

insert into db_member values(null,'admin','123','李四',100);
insert into db_member values(null,'aa','aa','赵六',101);
insert into db_member(account,pass,name) values('abc','abc','王五');


select * from db_member;

maven 依赖相关的jar包
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.2</version>
</dependency>


maven 项目资源build
<build>
<finalName>${project.artifactId}</finalName>
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>

jdbc参数配置文件 src/db.properties 文件
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8&useSSL=true
db.username=root
db.password=

核心配置文件 src/conf.xml 文件
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"/>

<typeAliases>
<package name="com.fz.model"></package>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.fz.mapper"/>
</mappers>
</configuration>

实体类 com.fz.model.Address 类
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Address {
private int id;
private String name;
private String phone;
}


@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Member {
private int id;
private String account;
private String pass;
private String name;
private Address address;
}


接口及配置文件
com.fz.mapper.MemberMapper 接口映射
public interface MemberMapper {
public Member queryById(int id);
public List<Map<String,Object>> query();
public List<Map<String,Object>> queryAll();
}

com.fz.mapper.MemberMapper.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.fz.mapper.MemberMapper">

<resultMap id="mem" type="member">
<id column="id" property="id"></id>
<result property="account" column="account"></result>
<result property="pass" column="pass"></result>
<result property="name" column="name"></result>
<association property="address" javaType="address">
<id property="id" column="aid"></id>
<result property="name" column="aname"/>
<result property="phone" column="aphone"/>
</association>
</resultMap>

<resultMap id="m2" type="member">
<id column="id" property="id"/>
<result property="account" column="account"/>
<result property="pass" column="pass"/>
<result property="name" column="name"/>
<result property="address.id" column="aid"/>
<result property="address.name" column="aname"/>
<result property="address.phone" column="aphone"/>
</resultMap>

<resultMap id="aaa" type="address">
<result property="id" column="aid"/>
<result property="name" column="aname"/>
<result property="phone" column="aphone"/>
</resultMap>

<resultMap id="m3" type="member">
<id column="id" property="id"/>
<result property="account" column="account"/>
<result property="pass" column="pass"/>
<result property="name" column="name"/>
<association property="address" column="aid" resultMap="aaa" />
</resultMap>

<resultMap id="m4" type="member">
<id column="id" property="id"/>
<result property="account" column="account" />
<result property="name" column="name" />
<result property="pass" column="pass" />
<association property="address" column="aid" select="com.fz.mapper.AddressMapper.queryById" />
</resultMap>

<select id="queryById" parameterType="int" resultMap="m4">
select * from db_member m,db_address a where m.id=#{id} and m.aid=a.aid
</select>

<select id="query" resultType="HashMap">
select m.name,a.aname from db_member m,db_address a where m.aid=a.aid
</select>

<select id="queryAll" resultType="HashMap">
select m.name,a.aname from db_member m left JOIN db_address a on m.aid = a.aid
</select>
</mapper>


com.fz.mapper.AddressMapper 接口映射
public interface AddressMapper {
public Address queryById(int id);
}

com.fz.mapper.AddressMapper.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.fz.mapper.AddressMapper">
<resultMap id="aa" type="address">
<result property="id" column="aid"/>
<result property="name" column="aname"/>
<result property="phone" column="aphone"/>
</resultMap>
<select id="queryById" parameterType="int" resultMap="aa">
select * from db_address where aid = #{id}
</select>
</mapper>


-- 数据库准备
-- db_user
create table db_user(
account varchar(50) primary key,
pwd varchar(32)
)engine=innodb charset=utf8;

-- db_userinfo
create table db_userinfo(
name varchar(32),
phone varchar(11),
gender enum('男','女','保密'),
address varchar(150),
account varchar(50) unique,
constraint ufk foreign key(account) references db_user(account) on delete cascade on update cascade
)engine=innodb charset=utf8;


insert into db_user values('admin','admin');

insert into db_userinfo values('李四','13014577068','男','河南省郑州市','admin');

select * from db_user;
select * from db_userinfo;

建立实体类
src/main/java/com/fz/entity/User.java
src/main/java/com/fz/entity/UserInfo.java

延迟加载
1)、在mybatis-config.xml
<settings> 全局配置
<!-- 全局配置参数 -->
<settings>
<!-- 延迟加载总开关 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 设置按需加载 -->
<setting name="aggressiveLazyLoading" value="false"/>

<setting name="logPrefix" value="dao."/>
</settings>


2)、mapper.xml
<resultMap id="m4" type="member">
<id column="id" property="id"/>
<result property="account" column="account" />
<result property="name" column="name" />
<result property="pass" column="pass" />
<association property="address" column="aid" select="com.fz.mapper.AddressMapper.queryById" />
</resultMap>

<select id="queryById" parameterType="int" resultMap="m4">
select * from db_member m where m.id=#{id}
</select>

3)、测试代码

Member m = mdao.queryById(1);
System.out.println(m.getAccount());
System.out.println(m.getName());
只查询db_member表信息

System.out.println(m.getAddress().getName()); 开始查询db_address信息

怕什么真理无穷,进一步有一步的欢喜
原文地址:https://www.cnblogs.com/Mkady/p/7122212.html