依赖:
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <!--<scope>provided</scope>--> </dependency> @Data:无参构造,get、set、tostring、hashcod、equals@AllArgsConstructor, :有参构造@NoArgsConstructor:无参构造@Getter and @Setter @FieldNameConstants @ToString @EqualsAndHashCode @RequiredArgsConstructor @Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog
@Builder @SuperBuilder @Singular @Delegate @Value @Accessors @Wither @With @SneakyThrows @val @var experimental @var @UtilityClass Lombok config system
pojo
@Data public class Teacher { private int id; private String name; } @Data public class Student { private int id; private String name; private Teacher teacher; } <!--思路: 1.查询所有的学生信息 2.根据查询出来的学生tid,寻找对应的老师! --> <select id="getStudent" resultMap="StudentTeacher" > select * from student </select> <resultMap id="StudentTeacher" type="Student"> <result property="id" column="id"/> <result property="name" column="name"/> <!--复杂的属性,我们需要单独处理,对象:association 集合:collection--> <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/> </resultMap> <select id="getTeacher" resultType="Teacher"> select * from teacher where id =#{id} </select>公用:测试类
public class MyTest { public static void main(String[] args) { SqlSession sqlSession = MybatisDao.getSqlSession(); StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); List<Student> studentList = mapper.getStudent(); for (Student student : studentList) { System.out.println(student); } sqlSession.close(); } }pojo
@Data public class Student { private int id; private String name; private int tid; } @Data public class Teacher { private int id; private String name; //一个老是拥有多个学生 private List<Student> student; }配置文件:
<!--方式一:--> <select id="getTeacher" parameterType="int" resultMap="TeacherStudent"> select s.id sid,s.name sname,t.name tname, t.id tid from teacher t,student s where tid=s.tid and tid =#{id} </select> <resultMap id="TeacherStudent" type="Teacher"> <result property="id" column="tid"/> <result property="name" column="tname"/> <collection property="student" ofType="Student"> <result property="id" column="sid"/> <result property="name" column="sname"/> <result property="tid" column="tid"/> </collection> </resultMap> <!--===============================================================================--> <!--方式二--> <select id="getTeacher2" parameterType="int" resultMap="TeacherStudent2"> select * from teacher where id=#{tid} </select> <resultMap id="TeacherStudent2" type="Teacher"> <result property="name" column="name"/> <collection property="student" column="id" javaType="ArrayList" ofType="Student" select="getStudentByTeacherId"/> </resultMap> <select id="getStudentByTeacherId" resultType="Student"> select * from student where tid=#{id} </select>测试类:
@Test public void test03(){ SqlSession sqlSession = MybatisDao.getSqlSession(); TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class); Teacher teacher = mapper.getTeacher(1); System.out.println(teacher); sqlSession.close(); } @Test public void test04(){ SqlSession sqlSession = MybatisDao.getSqlSession(); TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class); Teacher teacher = mapper.getTeacher2(1); System.out.println(teacher); sqlSession.close(); } 1.关联-association【多对一】 2.集合-collection【一对多】 3.javaType&ofType:
1.JavaType用来指定实体类中属性的类型2.ofType用来指定映射到List或者集合中的pojo类型,泛型中的约束类型!保证SQL的可读性,尽量保证通俗易懂
注意一对多和多对一中,属性名和字段的问题!
如果问题不好排查错误,可以使用日志,建议使用Log4j