MyBatis 关联查询


一 :一对一查询:

 

建立t_student表和t_card表:

create table T_CARD
(
  CARDID   NUMBER not null,
  CARDNAME VARCHAR2(10)
);

alter table T_CARD
  add primary key (CARDID);

create table T_STUDENT
(
  STUDENTID   NUMBER not null,
  STUDENTNAME VARCHAR2(10),
  CARDID      NUMBER
);

alter table T_STUDENT
  add primary key (STUDENTID);

alter table T_STUDENT
  add constraint CARDID foreign key (CARDID)
  references T_CARD (CARDID);


创建持久化类:

package com.web.entity;

public class AStudent {
	private Integer studentId;
	private String studentName;
	private ACard acard;
	public Integer getStudentId() {
		return studentId;
	}
	public void setStudentId(Integer studentId) {
		this.studentId = studentId;
	}
	public String getStudentName() {
		return studentName;
	}
	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}
	public ACard getAcard() {
		return acard;
	}
	public void setAcard(ACard acard) {
		this.acard = acard;
	}
	
}



package com.web.entity;

public class ACard {
	private Integer cardId;
	private String cardName;
	public Integer getCardId() {
		return cardId;
	}
	public void setCardId(Integer cardId) {
		this.cardId = cardId;
	}
	public String getCardName() {
		return cardName;
	}
	public void setCardName(String cardName) {
		this.cardName = cardName;
	}
	
}

映射文件:

<?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.pb.dao.StudentDao">
	<resultMap type="AStudent" id="ts">
		<id property="studentId" column="studentId" />
		<result property="studentName" column="studentName" />
		<association property="acard" column="cardId" javaType="ACard">
			<id property="cardId" column="cardId" />
			<result property="cardName" column="cardName" />
		</association>
	</resultMap>
	<select id="selectonetoone" resultMap="ts" parameterType="AStudent">
		select
		s.studentid,s.studentname,c.cardname from t_student s
		left join t_card c
		on s.cardid=c.cardid
		where s.studentid=#{studentId}
	</select>
	
</mapper>

二:多对一关联查询:

学生表和班级表:

create table classes(
classesid number primary key,
classesname varchar2(10)
);

create table student(
studentid number primary key,
studentname varchar2(10),
classesid number,
CONSTRAINT classesid FOREIGN KEY (classesid) REFERENCES classes(classesid)
)

insert into classes values(1,'1班');
insert into classes values(2,'2班');

insert into student values(1,'aa',1);
insert into student values(2,'a',2);

持久化类:

package com.web.entity;

public class Student {
	private Integer studentId;
	private String studentName;
	private Classes classes;
	public Integer getStudentId() {
		return studentId;
	}
	public void setStudentId(Integer studentId) {
		this.studentId = studentId;
	}
	public String getStudentName() {
		return studentName;
	}
	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}
	public Classes getClasses() {
		return classes;
	}
	public void setClasses(Classes classes) {
		this.classes = classes;
	}
	
}

package com.web.entity;

import java.util.HashSet;
import java.util.Set;

public class Classes {
	private Integer classesId;
	private String classesName;
	
	public Integer getClassesId() {
		return classesId;
	}
	public void setClassesId(Integer classesId) {
		this.classesId = classesId;
	}
	public String getClassesName() {
		return classesName;
	}
	public void setClassesName(String classesName) {
		this.classesName = classesName;
	}
	
	
}

映射文件:

<?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.pb.dao.StudentDao">
	<resultMap type="Student" id="ts">
		<id property="studentId" column="studentId" />
		<result property="studentName" column="studentName" />
		<association property="classes" column="classesId"
			javaType="Classes">
			<id property="classesId" column="classesId" />
			<result property="classesName" column="classesName" />
		</association>
	</resultMap>
	<select id="selectonetoone" resultMap="ts" parameterType="Student">
		select
		s.studentid,s.studentname,c.classesname
		from
		student s
		left join classes c
		on s.classesid=c.classesid
		where s.studentid=#{studentId}
	</select>

</mapper>

SqlSession:

package com.web.dao;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.web.entity.Student;

public class StudentDao {
	private int res=-1;
	private SqlSession sqlSession=null;
	public  SqlSession getSqlSession(){
		
		try{
			String resource="mybatis-config.xml";
			InputStream is=Resources.getResourceAsStream(resource);
			SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
			sqlSession=sqlSessionFactory.openSession(true);
			
			
		}catch(Exception e){
			System.out.println("出错");
			e.printStackTrace();
		}
		return sqlSession;
	}
	
	
	public Student findTStudentById(Integer id){
		sqlSession=getSqlSession();
		Student s=sqlSession.selectOne("selectonetoone", id);
		return s;
	}
}

测试:


package com.web.test;

import com.web.dao.StudentDao;
import com.web.entity.Student;


public class Test {

	public static void main(String[] args) {
		StudentDao sd=new StudentDao();
		Student a=sd.findTStudentById(1);
		System.out.println(a.getClasses().getClassesName());
	}

}



















































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值