0.前期准备
数据库配置:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25CREATE TABLE tb_clazz
(
  id   INT AUTO_INCREMENT
    PRIMARY KEY,
  CODE VARCHAR(18) NULL,
  name VARCHAR(18) NULL,
  CONSTRAINT TB_CLAZZ_id_uindex
  UNIQUE (id)
)
CREATE TABLE tb_student
(
  id       INT AUTO_INCREMENT
    PRIMARY KEY,
  NAME     VARCHAR(18) NULL,
  sex      CHAR(3)     NULL,
  age      INT         NULL,
  clazz_id INT         NULL,
  CONSTRAINT TB_STUDENT_id_uindex
  UNIQUE (id),
  CONSTRAINT TB_STUDENT_tb_clazz_id_fk
  FOREIGN KEY (clazz_id) REFERENCES tb_clazz (id)
)
CREATE INDEX TB_STUDENT_tb_clazz_id_fk
  ON tb_student (clazz_id);
一个clazz对应多个student。
log4j.properties需要进行配置:1
2
3
4
5
6
7log4j.rootLogger=ERROR, stdout
#log4j.logger.org.fkit.mapper.UserMapper=DEBUG
log4j.logger.org.fkit.mapper=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
在mybatis-config.xml中配置一下mapper和懒加载:1
2<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
配置pojo类:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22//Student.java
package org.fkit.domain;
public class Student {
    private Integer id;
    private String name;
    private String sex;
    private Integer age;
    private Clazz clazz;
//getter,setter
//Clazz.java
package org.fkit.domain;
import java.util.List;
public class Clazz {
    private Integer id;
    private String code;
    private String name;
    private List<Student> students;
//getter,setter
1.配置StudentMapper和ClazzMapper
| 1 | //StudentMapper.xml | 
| 1 | //StudentMapper.java | 
| 1 | //ClazzMapper.xml | 
| 1 | //ClazzMapper.java | 
测试代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38//OneToMany.java
package org.fkit.test;
import org.apache.ibatis.session.SqlSession;
import org.fkit.domain.Clazz;
import org.fkit.factory.FKSqlSessionFactory;
import org.fkit.mapper.ClazzMapper;
public class OneToMany {
    public static void main(String args[])throws Exception {
        SqlSession sqlSession = FKSqlSessionFactory.getSqlSession();
        OneToMany oneToMany = new OneToMany();
        oneToMany.testSelectClazzById(sqlSession);
        sqlSession.commit();
        sqlSession.close();
    }
    public void testSelectClazzById(SqlSession sqlSession) {
        ClazzMapper clazzMapper = sqlSession.getMapper(ClazzMapper.class);
        Clazz clazz = clazzMapper.selectClazzById(1);
        System.out.println(clazz.getId() + " " + clazz.getCode());
        System.out.println(clazz.getStudents());
    }
}
//output:
DEBUG [main] - ==>  Preparing: SELECT * FROM tb_clazz where id = ? 
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <==      Total: 1
1 j1601
DEBUG [main] - ==>  Preparing: select * from tb_student where clazz_id = ? 
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <==      Total: 2
[Student{id=1, name='jack', sex='男', age=22, clazz=Clazz{id=1, code='null', name='jack', students=null}}, Student{id=2, name='rose', sex='女', age=18, clazz=Clazz{id=2, code='null', name='rose', students=null}}]
可以看出,懒加载会只加载需要使用的(PS:如果做接口,json传数据,则冷加载相当于失效,但是可以在pojo类上加上@JsonIgnoreProperties(“fieldname”))。