班主任和班级是一对一关系,以此为模型来学习mybatis一对一关联查询
班主任bean对象定义:
package com.mybatis.bean; 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; } }
班级bean对象定义:
package com.mybatis.bean; public class Classes { 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; } }
班级mapper接口定义:
package com.mybatis.inter; import com.mybatis.bean.Classes; public interface IClassesOperation { public Classes getClasses(int id); }
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> <!-- 命名别名 --> <typeAliases> <typeAlias alias="Classes" type="com.mybatis.bean.Classes" /> <typeAlias alias="Teacher" type="com.mybatis.bean.Teacher" /> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/test" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com/mybatis/bean/Classes.xml" /> </mappers> </configuration>
班级SQL映射文件定义,association来实现一对一关联
<?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.mybatis.inter.IClassesOperation"> <resultMap type="Classes" id="ClassesResultMap"> <id property="id" column="c_id" /> <result property="name" column="c_name" /> <association property="teacher" javaType="Teacher"> <id property="id" column="t_id" /> <result property="name" column="t_name" /> </association> </resultMap> <select id="getClasses" parameterType="int" resultMap="ClassesResultMap"> select * from teacher t,class c where t.t_id=c.teacher_id and c.c_id=#{id} </select> </mapper>
测试:
package com.mybatis.test; import java.io.IOException; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import com.mybatis.bean.Classes; import com.mybatis.inter.IClassesOperation; import com.mybatis.util.MybatisUtil; public class Test { public static void main(String[] args) { SqlSessionFactory factory=null; SqlSession session=null; try { factory=MybatisUtil.getSqlSessionFactory(); session=factory.openSession(); IClassesOperation classesOperation = session.getMapper(IClassesOperation.class); Classes classes = classesOperation.getClasses(2); System.err.println(classes.getTeacher().getName()); } catch (IOException e) { e.printStackTrace(); }finally { session.close(); } } }