数据库的设计:
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());
}
}
}
结果: