比如:一个 老师拥有多个学生。
对于老师而言,就是一对多的关系
环境搭建1.环境搭建,和mybatis-06一样
实体类:
package com.gongyi.pojo;
import lombok.Data;
@Data
public class Student {
private int id;
private String name;
private int tid;
}
package com.gongyi.pojo;
import lombok.Data;
import java.util.List;
@Data
public class Teacher {
private int id;
private String name;
//一个老师拥有多个学生
private List students;
}
按照结果嵌套处理
按照查询嵌套处理 小结select s.id sid,s.name sname,t.name tname,t.id tid from student s,teacher t where s.tid = t.id and t.id = #{tid}
1.关联-association【多对一】
2.集合-collection【一对多】
3.JavaType & ofType
- javaType 用来指定实体类中属性的类型
- ofType用来指定映射到List或者集合中的pojo类型,泛型中的约束类型
注意点:
- 保证SQL的可读性,尽量保证通俗易懂
- 注意一对多和多对一中,属性名和字段的问题
- 如果问题不好排查错误,可以使用日志,建议使用log4j
慢SQL 1s vs 1000s
面试高频
- MySQL引擎
- InnoDB底层原理
- 索引
- 索引优化
代码结构图:
核心代码:
pojo
package com.gongyi.pojo;
import lombok.Data;
@Data
public class Student {
private int id;
private String name;
private int tid;
}
package com.gongyi.pojo;
import lombok.Data;
import java.util.List;
@Data
public class Teacher {
private int id;
private String name;
//一个老师拥有多个学生
private List students;
}
dao
package com.gongyi.dao;
public interface StudentMapper {
}
package com.gongyi.dao;
import com.gongyi.pojo.Teacher;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface TeacherMapper {
//获取老师
List getTeacher1();
//获取指定老师下的所有学生及老师的信息
Teacher getTeacher(@Param("tid") int id);
Teacher getTeacher2(@Param("tid") int id);
}
utils
package com.gongyi.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
//sqlSessionFactory -->sqlSession
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//使用mybatis第一步:获取sqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = null;
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession(true);
}
}
resource
db.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8 username=root password=123456
mybatis-config.xml
实体类映射文件
select * from teacher; select s.id sid,s.name sname,t.name tname,t.id tid from student s,teacher t where s.tid = t.id and t.id = #{tid} select * from mybatis.teacher where id = #{tid} select * from mybatis.student where tid=#{tid}
测试类
import com.gongyi.dao.TeacherMapper;
import com.gongyi.pojo.Teacher;
import com.gongyi.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
public class MyTest {
@Test
public void testGetTeacher1() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
for (Teacher teacher : sqlSession.getMapper(TeacherMapper.class).getTeacher1()) {
System.out.println(teacher);
}
sqlSession.close();
}
@Test
public void testGetTeacher() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
Teacher teacher = mapper.getTeacher(1);
System.out.println(teacher);
sqlSession.close();
}
@Test
public void testGetTeacher2() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
Teacher teacher = mapper.getTeacher2(1);//teacher id为何变为了0
System.out.println(teacher);
sqlSession.close();
}
}



