多对多映射就是两个实体之间是多对多的关系,例如老师和学生之间,可能是一个老师对应多个学生,同理一个学生可能对多个老师,那么怎么使用Mybatis程序怎么写出多对多关系???
1.先在entity包中新建两个实体类,一个是学生类,另一个就是教师类,以学生类为主体,完成多表查询操作:
student类
package com.baidu.lmj.entity;
public class TStudent {
private int id;
private String username;
private int cid;
private TTeachter tea;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public TTeachter getTea() {
return tea;
}
public void setTea(TTeachter tea) {
this.tea = tea;
}
}
teachter类
package com.baidu.lmj.entity;
import java.util.List;
public class TTeachter {
private int id;
private String tname;
private List<TStudent> list;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
public List<TStudent> getList() {
return list;
}
public void setList(List<TStudent> list) {
this.list = list;
}
}
2.在dao包中分别建一个TTeachter.java和TStudent.java,并且定义一些常用的方法,方法如下所示:
TTeachter.java
package com.baidu.lmj.dao;
import java.util.List;
import com.baidu.lmj.entity.TTeachter;
public interface TTeachterdao {
public List<TTeachter> SelectAllTTeachter();
public List<TTeachter> SelectAllTTeachter1();
}
TStudent.java
package com.baidu.lmj.dao;
import java.util.List;
public interface TStudent {
public List<TStudent> SelectAllStudent();
public List<TStudent> SelectAllStudent1();
}
3.在entity包中建立TStudent.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.baidu.lmj.dao.TStudentDao">
<resultMap type="com.baidu.lmj.entity.TStudent" id="map01">
<id column="sid" property="id"/>
<result column="username" property="username"/>
<collection property="tea" ofType="com.baidu.lmj.entity.TTeachter">
<id column="tid" property="id"/>
<result column="tname" property="tname"/>
</collection>
</resultMap>
<select id="SelectAllStudent" resultMap="map01">
select a.id AS sid,username,c.id AS tid,c.tname from t_student a INNER JOIN t_s_t b ON a.id=b.sid INNER JOIN t_teacher c ON b.tid=c.id
</select>
<resultMap type="com.baidu.lmj.entity.TStudent" id="map02">
<id column="id" property="id"/>
<result column="username" property="username"/>
<collection property="tea" column="id" ofType="com.baidu.lmj.entity.TTeachter" select="id001">
<id column="id" property="id"/>
<result column="tname" property="tname"/>
</collection>
</resultMap>
<select id="SelectAllStudent1" resultMap="map02">
select * FROM t_student
</select>
<select id="id001" parameterType="int" resultType="com.baidu.lmj.entity.TTeachter">
select * FROM t_s_t a INNER JOIN t_teacher b ON a.tid=b.id WHERE a.sid=1
</select>
</mapper>
4.在biz包中新建TStudentBiz.java类,进行业务层构建
package com.baidu.lmj.biz;
import java.io.IOException;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.baidu.lmj.dao.TStudentDao;
import com.baidu.lmj.entity.TStudent;
import com.baidu.lmj.util.SessionFactory;
public class TStudentBiz {
TStudentDao dao;
public List<TStudent> getAllTStudent(){
List<TStudent> list=null;
try {
SqlSession session=SessionFactory.getSession();
dao=session.getMapper(TStudentDao.class);
list=dao.SelectAllStudent();
SessionFactory.ClosedSession(session);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
public List<TStudent> getAllTStudent1(){
List<TStudent> list=null;
try {
SqlSession session=SessionFactory.getSession();
dao=session.getMapper(TStudentDao.class);
list=dao.SelectAllStudent1();
SessionFactory.ClosedSession(session);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
}
5.在Main.java类里面进行测试并运行,测试代码如下所示:
package com.baidu.lmj.Main;
import java.util.List;
import com.baidu.lmj.biz.TStudentBiz;
import com.baidu.lmj.entity.TStudent;
import com.baidu.lmj.entity.TTeachter;
public class Main1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// TStudentBiz biz=new TStudentBiz();
//
// List<TStudent> list=biz.getAllTStudent();
//
// for(TStudent stu:list)
// {
// System.out.println("查询的学生是"+stu.getUsername());
// System.out.println("他的教师是************************");
//
// for(TTeachter te:stu.getTea())
// {
// System.out.println(te.getTname());
// }
// System.out.println("****************结束********************");
// }
TStudentBiz biz=new TStudentBiz();
List<TStudent> list=biz.getAllTStudent1();
for(TStudent stu:list)
{
System.out.println("查询的学生是"+stu.getUsername());
System.out.println("他的教师是************************");
for(TTeachter te:stu.getTea())
{
System.out.println(te.getTname());
}
System.out.println("****************结束********************");
}
}
}