其实mybatis的关联是很灵活的,可以不用任何关联配置。这里介绍两种关联方式,可以针对于任何关联操作,不管是几对几。
方式一:利用业务实体类进行关联
sql配置
<!-- 用业务实体类进行关联 -->
<select id="selectByJoinEntity" resultType="com.obtk.entitys.JoinEntity">
SELECT s.stuId,s.stuName,s.gender,s.age,d.departName
FROM student s LEFT JOIN department d
ON s.deptIdd=d.deptId
</select>
业务实体类
package com.obtk.entitys;
import java.io.Serializable;
//业务实体
public class JoinEntity implements Serializable{
private static final long serialVersionUID = 6498540528701698221L;
private int stuId;
private String stuName;
private String gender;
private int age;
private String departName;
public JoinEntity() {
}
public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getDepartName() {
return departName;
}
public void setDepartName(String departName) {
this.departName = departName;
}
}
测试类
package com.obtk.test3;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.obtk.entitys.JoinEntity;
import com.obtk.utils.MybatisUtil;
public class TestJoinByEntity {
public static void main(String[] args) {
SqlSession session=null;
try {
//1.得到session
session=MybatisUtil.getSession();
//2.执行语句
List<JoinEntity> stuList=session.selectList("stu.selectByJoinEntity");
for(JoinEntity stu : stuList){
System.out.println(stu.getStuId()+","+stu.getStuName()+","+stu.getGender()
+","+stu.getAge()+","+stu.getDepartName());
}
} catch (Exception e) {
e.printStackTrace();
}finally{
MybatisUtil.closeSession();
}
}
}
运行结果
DEBUG - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@1d3cdaa]
DEBUG - ==> Preparing: SELECT s.stuId,s.stuName,s.gender,s.age,d.departName FROM student s LEFT JOIN department d ON s.deptIdd=d.deptId
DEBUG - ==> Parameters:
100,王燕,女,18,计算机系
101,张栋,男,21,计算机系
102,李波,男,21,艺术系
103,陈建,男,19,艺术系
104,王江洪,男,25,经管系
105,潘将,男,24,工程系
106,张斌,男,22,土木系
107,张斌,女,20,计算机系
108,刘大海,男,28,计算机系
109,刘德华,男,31,计算机系
110,周润发,男,41,艺术系
111,张学友,男,37,艺术系
112,周星驰,男,42,经管系
113,刘亦菲,女,24,工程系
114,胡歌,男,32,土木系
115,范冰冰,女,20,计算机系
116,杨幂,女,26,土木系
117,刘涛,女,27,工程系
118,周迅,女,21,工程系
119,古力娜扎,女,19,计算机系
120,黑山老妖,妖,99,null
DEBUG - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@1d3cdaa]
DEBUG - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@1d3cdaa]
DEBUG - Returned connection 30657962 to pool.
方式二:利用hashmap进行关联
sql配置
<!-- 万能关联 -->
<select id="selectByQnn" parameterType="map" resultType="hashmap">
select * from student s inner join department d
on s.deptIdd=d.deptId
where s.gender=#{sex}
and d.departName=#{deptName}
</select>
关键在于resultType="hashmap" 意思是查出来的每一行数据都映射成一个hashmap对象。
代码:
package com.obtk.test3;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import com.obtk.entitys.StudentEntity;
import com.obtk.utils.MybatisUtil;
public class TestJoinQnn {
public static void main(String[] args) {
SqlSession session=null;
try {
//4.得到session
session=MybatisUtil.getSession();
Map paramMap=new HashMap();
paramMap.put("sex", "男");
paramMap.put("deptName", "计算机系");
//5.执行语句
List<HashMap> stuList=session.selectList("stu.selectByQnn",paramMap);
for(HashMap theObj : stuList){
System.out.println(theObj.get("stuId")+","+theObj.get("gender")
+","+theObj.get("stuName")+","+theObj.get("departName"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
MybatisUtil.closeSession();
}
}
}
运行结果:
DEBUG - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@1f2cea2]
DEBUG - ==> Preparing: select * from student s inner join department d on s.deptIdd=d.deptId where s.gender=? and d.departName=?
DEBUG - ==> Parameters: 男(String), 计算机系(String)
101,男,张栋,计算机系
108,男,刘大海,计算机系
109,男,刘德华,计算机系
DEBUG - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@1f2cea2]
DEBUG - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@1f2cea2]
DEBUG - Returned connection 32689826 to pool.