关于联表的处理

数据库的设计:


teacher表设计:


student表


teacher表

第一种方式:按结果嵌套处理

实体类:Teacher.java

public class Teacher {
	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

多个学生对应一个老师

Student.java

public class Student {
	private int id;
	private String name;
	private Teacher teacher;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Teacher getTeacher() {
		return teacher;
	}
	public void setTeacher(Teacher teacher) {
		this.teacher = teacher;
	}
}

StudentDao.java

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import util.MyBatisUtil;

import entity.Student;

public class StudentDao {
	public List<Student> getAll() throws Exception{
		SqlSession session=MyBatisUtil.getSession();
		List<Student> list=session.selectList("entity.student		Mapper.getStudents");
		session.close();
		return list;
	}
}

User   bean

package entity;

public class User {
	private int id;
	private String name;
	private String pwd;
	private String password;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", pwd=" + pwd
				+ ", password=" + password + "]";
	}
	

}

student映射配置:

<?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="entity.studentMapper">
  	<!-- 多对一的处理:
  		1、按结果嵌套
  		2、按查询嵌套处理
  	 -->
  	 <select id="getStudents" resultMap="StudentTeacher">
  	 	select s.id sid,s.name sname,s.tid stid,t.id tid,t.name tname from student s,teacher t 	where s.tid=t.id
  	 </select>
  	 <resultMap type="Student" id="StudentTeacher">
  	 	<id column="sid" property="id"/>
  	 	<result column="sname" property="name" />
  	 	<!-- 关联对象property 关联对象在Student实体类中的属性 -->
  	 	<association property="teacher" javaType="Teacher">
  	 		<id column="tid" property="id"/>
  	 		<result column="tname" property="name"/>
  	 	</association>
  	 </resultMap>
  </mapper>

MyBatis配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- environments指MyBatis可以配置多个environment,default指默认环境 -->
	<properties resource="db.properties"/>
	<!-- 为指定类型指定别名 使得mapper文件可以简化引用 -->
	<typeAliases>
		<typeAlias type="entity.User" alias="enus"></typeAlias>
		<!-- 为每个包下的所有类指定别名,默认别名是指定的类名  -->
		<package name="entity"/>
	</typeAliases>
	 <environments default="development">  
        <environment id="development">  
        <!-- jdbc这个配置直接使用jdbc的提交和回滚功能,依赖于从数据源获得链接来管理事务的整个生命周期 -->
        <!-- managed这个配置基本上什么都不做,从不提交或者回滚一个连接的事务,而是让容器来管理事务的生命周期 -->
            <transactionManager type="JDBC" />  
            <!-- pooled指的是连接池 -->
            <!-- 连接数据源类型:
                            unpooled:这个类型的数据源实现只是在每次需要的时候简单的打开和关闭连接 -->
            <dataSource type="POOLED">  
                <property name="driver" value="${driver}"/>  
                <property name="url" value="${url}" />  
                <property name="username" value="${name}" />  
                <property name="password" value="${password}" />  
            </dataSource>  
        </environment>  
    </environments> 
    
    <mappers>
    	<!-- mapper定义映射sql语句的文件 -->
		<!-- <mapper resource="entity/userMapper.xml"/> -->
		<mapper resource="entity/studentMapper.xml"/>
		<mapper class="dao.UserDao2"/> 
	</mappers>  
</configuration>	

db.prope

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
name=root
password=admin

运行:

public class test4 {
	public static void main(String[] args) throws Exception {
		StudentDao studentDao=new StudentDao();
		List<Student> list=studentDao.getAll();
		for (Student u : list) {
			System.out.println("student name ="+u.getName()+"\t student's teacher name ="+u.getTeacher().getName());
		}
		
	}
}

结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值