lf-driver=com.mysql.jdbc.Driver
lf-url=jdbc:mysql://localhost:3306/test?allowMultiQueries=true&useUnicode=true&characterEncoding=utf8
lf-user=LF
lf-password=LF
<?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="cn.zr.mybatismore.mapper.ClassTeamMapper">
<!-- 一对多 通过班名字查询班里学生的信息 -->
<resultMap type="cn.zr.mybatismore.entity.ClassTeam" id="classInfo">
<id column="classid" property="classid"/>
<result column="classname" property="classname"/>
<collection property="students" ofType="cn.zr.mybatismore.entity.Student">
<id column="idnum" property="idnum"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="classid" property="classid"/>
</collection>
</resultMap>
<select id="queryStudetsByClassname" parameterType="java.lang.String" resultMap="classInfo">
SELECT
c.classid,c.classname,s.idnum,s.name,s.age
FROM
class c
INNER JOIN
student s
ON
s.classid = c.classid
WHERE
c.classname = #{classname}
</select>
<!-- 一对多 通过多条查询语句来实现 -->
<resultMap type="cn.zr.mybatismore.entity.ClassTeam" id="classTeamInfo">
<id column="classid" property="classid"/>
<result column="classname" property="classname"/>
<collection property="students" ofType="cn.zr.mybatismore.entity.Student" column="classid" select="queryStudents">
<id column="idnum" property="idnum"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="classid" property="classid"/>
</collection>
</resultMap>
<select id="queryInfoByclassname" parameterType="java.lang.String" resultMap="classTeamInfo">
SELECT classid,classname FROM class WHERE classname=#{classname}
</select>
<select id="queryStudents" parameterType="int" resultType="cn.zr.mybatismore.entity.Student">
SELECT idnum,name,age,classid FROM student WHERE classid = #{classid}
</select>
<!-- END 一对多 通过多条查询语句来实现 -->
</mapper>
<?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="cn.zr.mybatismore.mapper.StudentMapper">
<!-- 一对一 关系映射 -->
<resultMap type="cn.zr.mybatismore.entity.Student" id="studentInfo">
<id column="idnum" property="idnum"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="classid" property="classid"/>
<association property="classTeam" javaType="cn.zr.mybatismore.entity.ClassTeam">
<id column="classid" property="classid"/>
<result column="classname" property="classname"/>
</association>
</resultMap>
<!-- 一对一(根据idnum查询学生的信息以及他所在的班级) -->
<select id="queryStudentById" parameterType="int" resultMap="studentInfo">
SELECT
s.idnum,s.name,s.age,s.classid,c.classname
FROM
student s INNER JOIN class c
ON
s.classid = c.classid
WHERE
s.idnum = #{idnum}
</select>
<!-- 通过多查询来实现 一对一的效果 -->
<resultMap type="cn.zr.mybatismore.entity.Student" id="stuInfo">
<id column="idnum" property="idnum"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="classid" property="classid"/>
<association property="classTeam" javaType="cn.zr.mybatismore.entity.ClassTeam" column="classid" select="queryClassByClassId">
<id column="classid" property="classid"/>
<result column="classname" property="classname"/>
</association>
</resultMap>
<select id="queryStuById" parameterType="int" resultMap="stuInfo">
SELECT idnum,name,age,classid FROM student WHERE idnum = #{idnum}
</select>
<select id="queryClassByClassId" parameterType="int" resultType="cn.zr.mybatismore.entity.ClassTeam">
SELECT classid,classname FROM class WHERE classid = #{classid}
</select>
<!-- END 通过多查询来实现 一对一的效果 -->
</mapper>
<?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>
<properties resource="mybatis/config/db.properties"></properties>
<!-- 配置环境 -->
<environments default="development">
<environment id="development">
<!-- 配置事务管理器的类型 -->
<transactionManager type="JDBC"/>
<!-- 配置数据源相关的属性 -->
<dataSource type="UNPOOLED">
<property name="driver" value="${lf-driver}"/>
<property name="url" value="${lf-url}"/>
<property name="username" value="${lf-user}"/>
<property name="password" value="${lf-password}"/>
</dataSource>
</environment>
</environments>
<!--END 配置环境 -->
<!-- 配置映射路径 -->
<mappers>
<mapper resource="mybatis/config/mapper/StudentMapper.xml"/>
<mapper resource="mybatis/config/mapper/ClassTeamMapper.xml" />
</mappers>
<!-- END 配置映射路径 -->
</configuration>
package cn.zr.mybatismore.entity;
import java.util.List;
public class ClassTeam {
private int classid;
private String classname;
private List<Student> students;
public int getClassid() {
return classid;
}
public void setClassid(int classid) {
this.classid = classid;
}
public String getName() {
return classname;
}
public void setClassname(String classname) {
this.classname = classname;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
public ClassTeam() {
}
public ClassTeam(int classid, String classname, List<Student> students) {
this.classid = classid;
this.classname = classname;
this.students = students;
}
@Override
public String toString() {
return "ClassTeam [classid=" + classid + ", classname=" + classname
+ ", students=" + students + "]";
}
}
package cn.zr.mybatismore.entity;
public class Student {
private int idnum;
private String name;
private int age;
private int classid;
private ClassTeam classTeam;
public ClassTeam getClassTeam() {
return classTeam;
}
public void setClassTeam(ClassTeam classTeam) {
this.classTeam = classTeam;
}
public int getIdnum() {
return idnum;
}
public void setIdnum(int idnum) {
this.idnum = idnum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getClassid() {
return classid;
}
public void setClassid(int classid) {
this.classid = classid;
}
public Student() {
}
public Student(int idnum, String name, int age, int classid,
ClassTeam classTeam) {
this.idnum = idnum;
this.name = name;
this.age = age;
this.classid = classid;
this.classTeam = classTeam;
}
@Override
public String toString() {
return "student [idnum=" + idnum + ", name=" + name + ", age=" + age
+ ", classid=" + classid + ", classTeam=" + classTeam + "]";
}
}
package cn.zr.mybatismore.mapper;
import java.util.List;
import cn.zr.mybatismore.entity.ClassTeam;
public interface ClassTeamMapper {
/**
* 根据班名查询班里学生的相关信息
*/
List<ClassTeam> queryStudetsByClassname(String string);
/**
* 根据班名查询班里学生的相关信息(多语句来实现)
*/
List<ClassTeam> queryInfoByclassname(String string);
}
package cn.zr.mybatismore.mapper;
import cn.zr.mybatismore.entity.Student;
public interface StudentMapper {
/**
* 通过id来查询学生信息以及所在班级
*/
Student queryStudentById(int i);
/**
* 通过id来查询学生信息以及所在班级 (多查询)
*/
Student queryStuById(int i);
}
package cn.zr.mybatismore.utils;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionManager;
import cn.zr.mybatismore.entity.ClassTeam;
import cn.zr.mybatismore.entity.Student;
import cn.zr.mybatismore.mapper.ClassTeamMapper;
import cn.zr.mybatismore.mapper.StudentMapper;
public class TestMore {
public static void main(String[] args) {
TestMore testMore = new TestMore();
// testMore.queryStudentById();
// testMore.queryStuById();
// testMore.queryStudetsByClassname();
testMore.queryInfoByclassname();
}
private static SqlSessionManager sqlSessionManager ;
private static StudentMapper studentMapper ;
private static ClassTeamMapper classTeamMapper;
//通过代码块来读取配置文件
static{
String resource = "mybatis/config/mybatis-config.xml";
try {
Reader reader = Resources.getResourceAsReader(resource);
sqlSessionManager = SqlSessionManager.newInstance(reader);
studentMapper = sqlSessionManager.getMapper(StudentMapper.class);
classTeamMapper = sqlSessionManager.getMapper(ClassTeamMapper.class);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 通过id来查询学生信息以及所在班级
*/
public void queryStudentById() {
Student student = studentMapper.queryStudentById(10011);
if (student==null) {
System.out.println("操作失败");
}else {
System.out.println(student);
}
}
/**
* 通过id来查询学生信息以及所在班级 (多查询)
*/
private void queryStuById() {
Student student = studentMapper.queryStuById(10011);
if (student==null) {
System.out.println("操作失败");
}else {
System.out.println(student);
}
}
/**
* 根据班名查询班里学生的相关信息
*/
public void queryStudetsByClassname() {
List<ClassTeam> list = classTeamMapper.queryStudetsByClassname("一班");
if (list.isEmpty()) {
System.out.println("操作失败");
}else {
System.out.println(list);
}
}
/**
* 根据班名查询班里学生的相关信息(多语句来实现)
*/
public void queryInfoByclassname() {
List<ClassTeam> list = classTeamMapper.queryInfoByclassname("一班");
if (list.isEmpty()) {
System.out.println("操作失败");
}else {
System.out.println(list);
}
}
}