三张表,通过班级 clsId=3001 查找班级和学生的信息
1. 建表 表结构如下
create table student(stuId number(4) primary key,stuName varchar2(20) not null,stuSex varchar2(4),stuBirthday date,classId number(4));create table classes(clsId number(4) primary key,clsName varchar2(20) not null,teacherId number(4));create table teacher(teacherId number(4) primary key,teacherName varchar2(20) not null,workYear number(2),professional varchar2(20));
插入一些测试数据
2. entity包下新建三个实体类和三个 同名Mapper.xml
3. mapper包内新建三个同名Mapper接口,现在不做任何处理
4. mybatis.xml 中的配置
mappers的配置===”com/yc/mybitis/entity/TeacherMapper.xml”/> </mappers> 定义别名=”com/yc/mybitis/entity”/></typeAliases>
5. mybatis工具类编写 MybatisUtil
{private static Logger log=LoggerFactory.getLogger(MybatisUtil.class);private static SqlSessionFactory factory;static{try {log.debug(“加载mybatis.xml的配置文件”);InputStream in =Resources.getResourceAsStream(“mybatis.xml”);log.debug(“加载mybatis.xml的配置文件成功”);log.debug(“通过配置文件的数据构建sql session工厂”);factory=new SqlSessionFactoryBuilder().build(in);log.debug(“通过配置文件的数据构建sql session工厂 【成功】” );log.debug(“生产sqlsession 工厂对象”);} catch (IOException e) {e.printStackTrace();log.debug(“加载mybatis.xml的配置文件失败”,e);}}public static SqlSession getSession(){SqlSession session=null;session=factory.openSession();log.debug(“生产sqlsession 工厂对象 成功”);return session;}/**** @param isAutoCommit :true: 自动提交事务, false 手动事务* @return*/public static SqlSession getSession(boolean isAutoCommit){SqlSession session=null;session=factory.openSession( isAutoCommit );log.debug(“生产sqlsession 工厂对象 成功”);return session;}}
6. 查询要求: A、嵌套查询: 通过班级 clsId=3001 查找班级和学生的信息 select * from classes where clsId =3001 select * from student where classId =3001
ClassesMapper.xml中的配置
====>=”int” resultMap=”ClassesMap”>select * from classes where clsId=#{clsId}=”getStudents” resultType=”Student”>select * from student where classId=#{clsId}</select></mapper>
这一次的查询不需要用到 StudentMapper 和TeacherMapper,就不给出内容了
7. 接口 ClassesMapper.java只有一个方法,注意方法名需要和 ClassesMapper.xml中select语句指定的 id 一致
public interface ClassesMapper {public Classes getClassesById(int clsid);}
8. Junit单元测试
{private ClassesMapper classesMapper;() throws Exception {classesMapper=MybatisUtil.getSession().getMapper(ClassesMapper.class);}() throws Exception {classesMapper=null;}() {Classes c=classesMapper.getClassesById(3001);System.out.println(c);}}
9、运行测试类。成功。
6. 查询要求 B、嵌套结果: select * from student s join classes c on c.clsId=3001 and s.classId=c.clsId
ClassesMapper.xml中的配置 ,为了避免大家混淆了两种写法,建议新建一个ClassesMapper02.xml
<mapper namespace=”com.yc.mybatis.mapper.ClassesMapper02″><!–第二种 嵌套结果 记录多条,所以不能使用 association 必须选择 collection:表示多个结果select * from student s join classes c on c.clsId=3001 and s.classId=c.clsId–>=====”StudentMap”><!–ofType:指定 list集合中的数据类型–>=====>=”int” resultMap=”ClassesMap03″>select * from student s join classes c on c.clsId=#{clsId} ands.classId=c.clsId</select></mapper>即使是不成熟的尝试,也胜于胎死腹中的策略。