总结
- 一对一用的是association
- 一对多用的是collection
- 多对一用的是association
- 多对多就是两个一对多用的是collection
association(一对一)
比如:一个班主任只属于一个班级,一个班级也只能有一个班主任。
实现方式
- 使用嵌套结果映射来处理重复的联合结果的子集
- 通过执行另外一个SQL映射语句来返回预期的复杂类型
代码实现
1.创建表test_user
CREATE TABLE `test_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`address` varchar(20) DEFAULT NULL,
`phone` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
2.创建表article
CREATE TABLE `article` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`articleTitle` varchar(20) DEFAULT NULL,
`articleContent` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
3.创建实体Article
package entity;
public class Article {
private Integer id;
private String articleTitle;
private String articleContent;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getArticleTitle() {
return articleTitle;
}
public void setArticleTitle(String articleTitle) {
this.articleTitle = articleTitle;
}
public String getArticleContent() {
return articleContent;
}
public void setArticleContent(String articleContent) {
this.articleContent = articleContent;
}
}
4.创建TestUser,里面有一个Article类型的属性article
package entity;
public class TestUser {
private Integer id;
private String name;
private String address;
private String phone;
private Article article;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Article getArticle() {
return article;
}
public void setArticle(Article article) {
this.article = article;
}
}
5.创建UserMapper类
package mapper;
import entity.TestUser;
import entity.User;
public interface UserMapper {
TestUser getUserArtileById(int id);
}
第一种方式配置
<?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="mapper.UserMapper">
<resultMap id="userArtileMap" type="testUser">
<id property="id" column="id" jdbcType="INTEGER" javaType="java.lang.Integer"></id>
<result property="name" jdbcType="VARCHAR" column="name" javaType="java.lang.String"></result>
<result property="address" jdbcType="VARCHAR" column="address" javaType="java.lang.String"></result>
<result property="phone" jdbcType="VARCHAR" column="phone" javaType="java.lang.String"></result>
<association property="article" javaType="Article">
<id property="id" jdbcType="INTEGER" column="id" javaType="java.lang.Integer"></id>
<result property="articleTitle" jdbcType="VARCHAR" column="articleTitle" javaType="java.lang.String"></result>
<result property="articleContent" jdbcType="VARCHAR" column="articleContent" javaType="java.lang.String"></result>
</association>
</resultMap>
<select id="getUserArtileById" parameterType="int" resultMap="userArtileMap">
select * from test_user t,article a where t.id = a.id and t.id = #{id}
</select>
</mapper>
第二种方式配置
<?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="mapper.UserMapper">
<!--第二种配置-->
<resultMap id="userArtileMap" type="testUser">
<id property="id" column="id" jdbcType="INTEGER" javaType="java.lang.Integer"></id>
<result property="name" jdbcType="VARCHAR" column