1.首先是环境的配置
Pojo实体类的编写:
package Pojo;
import lombok.Data;
@Data
public class User {
private int id;
private String name;
private String password;
private Userboss userboss;
public User(int id, String name, String password, Userboss userboss) {
this.id = id;
this.name = name;
this.password = password;
this.userboss = userboss;
}
public Userboss getUserboss() {
return userboss;
}
public void setUserboss(Userboss userboss) {
this.userboss = userboss;
}
public User() {
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
", userboss=" + userboss +
'}';
}
}
package Pojo;
import lombok.Data;
import java.util.List;
@Data
public class Userboss {
private int id;
private String name;
private String password;
private List<User> users;
}
Dao包的编写,主要是接口Mapper和相应的xml文件的配置
配套的多对一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="Dao.UserbossMapper">
<resultMap id="usermap2" type="Pojo.Userboss">
<id column="tId" property="id" />
<result column="tname" property="name"/>
<result column="tpsw" property="password"/>
<collection property="users" ofType="Pojo.User">
<result property="password" column="spsw"/>
<result column="sId" property="id"/>
<result property="name" column="sName"/>
</collection>
</resultMap>
<select id="findall1" resultMap="usermap2">
select t.id tId,t.name tname,t.psw tpsw,s.id sId,s.name sName ,s.psw spsw from usersboss t ,users s where t.id = s.tid
</select>
</mapper>
配置的一对多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="Dao.UserMapper">
<select id="findall" resultMap="usermap1">
SELECT s.id sid, s.name sname ,s.psw spsw, t.name tname,t.id tid,t.psw tpsw
FROM users s,usersboss t
WHERE s.tid = t.id
</select>
<resultMap id="usermap1" type="Pojo.User">
<id column="sid" property="id" />
<result column="sname" property="name"/>
<result column="spsw" property="password"/>
<association property="userboss" javaType="Pojo.Userboss">
<result property="name" column="tname"/>
<result property="password" column="tpsw"/>
<result property="id" column="tid"/>
</association>
</resultMap>
</mapper>
配套的数据库如下:
注意要进行两个表的联结
2.查询的说明
我这里都采用的是按照结果嵌套处理,同时还有这另外按照查询嵌套处理,这里不多介绍。
小结
-
关联 - association【多对一】
-
集合 - collection【一对多】
-
javaType & ofType
-
javaType 用来指定实体类中属性的类型
-
ofType 用来指定映射到List或者集合中pojo类型,泛型中的约束类型。
-
3.运行结果展示
测试程序:
测试结果:
多对一:
一对多:
4.总结
注意点
-
保证sql的可读性,尽量保证通俗易懂
-
注意一对多和多对一中,属性和字段的问题
-
如果问题不好排查错误,可以使用日志,建议使用Log4j