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”))。