关键点: 用连接查询, 而不是用mybatis提供的属性select配置
MyBaits 3.2.6
MySQL 5.5.12
JDK1.6
模型:
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
|
CREATE
TABLE
`person` (
`id`
bigint
(20)
NOT
NULL
AUTO_INCREMENT COMMENT
'id'
,
`
name
`
varchar
(24)
NOT
NULL
COMMENT
'用户名'
,
`pswd`
varchar
(16)
NOT
NULL
COMMENT
'密码'
,
PRIMARY
KEY
(`id`)
) ENGINE=InnoDB
DEFAULT
CHARSET=utf8 COMMENT=
'用户'
CREATE
TABLE
`extinfo` (
`id`
bigint
(20)
NOT
NULL
AUTO_INCREMENT COMMENT
'id'
,
`personid`
bigint
(20)
NOT
NULL
COMMENT
'用户id'
,
`email`
varchar
(32)
DEFAULT
NULL
COMMENT
'email'
,
`qq`
bigint
(20)
DEFAULT
NULL
COMMENT
'QQ号'
,
PRIMARY
KEY
(`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6
DEFAULT
CHARSET=utf8 COMMENT=
'用户扩展信息(一个用户只能有一条扩展记录)'
CREATE
TABLE
`address` (
`id`
bigint
(20)
NOT
NULL
AUTO_INCREMENT COMMENT
'id'
,
`personid`
bigint
(20)
NOT
NULL
COMMENT
'用户id'
,
`addr`
varchar
(128)
DEFAULT
NULL
COMMENT
'地址'
,
`zipcode`
varchar
(8)
DEFAULT
NULL
COMMENT
'邮编'
,
PRIMARY
KEY
(`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10
DEFAULT
CHARSET=utf8 COMMENT=
'地址(一个用户可以有多个地址)'
CREATE
TABLE
`orders` (
`id`
bigint
(20)
NOT
NULL
AUTO_INCREMENT COMMENT
'ID'
,
`personid`
bigint
(20)
NOT
NULL
COMMENT
'用户ID'
,
`product`
varchar
(128)
NOT
NULL
COMMENT
'产品'
,
`num`
int
(11)
NOT
NULL
COMMENT
'数量'
,
PRIMARY
KEY
(`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9
DEFAULT
CHARSET=utf8
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public
class
Person
implements
Serializable {
private
long
id;
private
String name;
//用户名
private
String pswd;
//密码
private
Extinfo extinfo;
private
List addressList=
new
ArrayList(
0
);
private
List
new
ArrayList
0
);
public
class
Extinfo
implements
Serializable {
private
long
id;
private
long
personid;
//用户id
private
String email;
//email
private
long
qq;
//QQ号
public
class
Address
implements
Serializable {
private
long
id;
private
long
personid;
//用户id
private
String addr;
//地址
private
String zipcode;
//邮编
public
class
Orders
implements
Serializable {
private
long
id;
private
long
personid;
//用户ID
private
String product;
//产品
private
int
num;
//数量
|
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
|
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<
configuration
>
<
properties
resource
=
"config/jdbc.properties"
/>
<
typeAliases
>
<
package
name
=
"mypkg.entity"
/>
typeAliases
>
<
environments
default
=
"development"
>
<
environment
id
=
"development"
>
<
transactionManager
type
=
"JDBC"
/>
<
dataSource
type
=
"POOLED"
>
<
property
name
=
"driver"
value
=
"${driver}"
/>
<
property
name
=
"url"
value
=
"${url}"
/>
<
property
name
=
"username"
value
=
"${username}"
/>
<
property
name
=
"password"
value
=
"${password}"
/>
dataSource
>
environment
>
environments
>
<
mappers
>
<
mapper
resource
=
"mypkg/entity/Person.xml"
/>
<
mapper
resource
=
"mypkg/entity/Extinfo.xml"
/>
<
mapper
resource
=
"mypkg/entity/Address.xml"
/>
<
mapper
resource
=
"mypkg/entity/Orders.xml"
/>
mappers
>
configuration
>
|
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<
mapper
namespace
=
"Person"
>
<
resultMap
id
=
"rs_base"
type
=
"Person"
>
<
id
column
=
"id"
property
=
"id"
/>
<
result
property
=
"name"
column
=
"name"
/>
<
result
property
=
"pswd"
column
=
"pswd"
/>
resultMap
>
<
resultMap
id
=
"rs1"
type
=
"Person"
>
<
id
property
=
"id"
column
=
"id"
/>
<
result
property
=
"name"
column
=
"name"
/>
<
result
property
=
"pswd"
column
=
"pswd"
/>
<
association
property
=
"extinfo"
column
=
"id"
select
=
"Extinfo.queryByPersonid"
/>
<
collection
property
=
"addressList"
column
=
"id"
select
=
"Address.queryByPersonid"
/>
<
collection
property
=
"ordersList"
column
=
"id"
select
=
"Orders.queryByPersonid"
/>
resultMap
>
<
select
id
=
"find1"
parameterType
=
"string"
resultType
=
"Person"
resultMap
=
"rs1"
>
select * from person where name like "%"#{value}"%"
select
>
<
resultMap
id
=
"rs2"
type
=
"Person"
>
<
id
property
=
"id"
column
=
"p_id"
/>
<
result
property
=
"name"
column
=
"name"
/>
<
result
property
=
"pswd"
column
=
"pswd"
/>
<
association
property
=
"extinfo"
column
=
"id"
javaType
=
"extinfo"
>
<
id
property
=
"id"
column
=
"e_id"
/>
<
result
property
=
"personid"
column
=
"personid"
/>
<
result
property
=
"email"
column
=
"email"
/>
<
result
property
=
"qq"
column
=
"qq"
/>
association
>
resultMap
>
<
select
id
=
"find2"
parameterType
=
"string"
resultType
=
"Person"
resultMap
=
"rs2"
>
select *,p.id as p_id, e.id as e_id from person p left join extinfo e on p.id=e.personid
where p.name like "%"#{value}"%"
select
>
<
resultMap
id
=
"rs3"
type
=
"Person"
>
<
id
property
=
"id"
column
=
"p_id"
/>
<
result
property
=
"name"
column
=
"name"
/>
<
result
property
=
"pswd"
column
=
"pswd"
/>
<
collection
property
=
"addressList"
column
=
"id"
javaType
=
"Address"
>
<
id
property
=
"id"
column
=
"a_id"
/>
<
result
property
=
"personid"
column
=
"personid"
/>
<
result
property
=
"addr"
column
=
"addr"
/>
<
result
property
=
"zipcode"
column
=
"zipcode"
/>
collection
>
resultMap
>
<
select
id
=
"find3"
parameterType
=
"string"
resultType
=
"Person"
resultMap
=
"rs3"
>
select *,p.id as p_id, a.id as a_id from person p left join address a on p.id=a.personid
where p.name like "%"#{value}"%"
select
>
<
resultMap
id
=
"rs4"
type
=
"Person"
autoMapping
=
"true"
>
<
id
property
=
"id"
column
=
"p_id"
/>
<
result
property
=
"name"
column
=
"name"
/>
<
result
property
=
"pswd"
column
=
"pswd"
/>
<
association
property
=
"extinfo"
column
=
"id"
javaType
=
"extinfo"
>
<
id
property
=
"id"
column
=
"e_id"
/>
<
result
property
=
"personid"
column
=
"e_pid"
/>
<
result
property
=
"email"
column
=
"email"
/>
<
result
property
=
"qq"
column
=
"qq"
/>
association
>
<
collection
property
=
"addressList"
column
=
"id"
javaType
=
"Address"
>
<
id
property
=
"id"
column
=
"a_id"
/>
<
result
property
=
"personid"
column
=
"a_pid"
/>
<
result
property
=
"addr"
column
=
"addr"
/>
<
result
property
=
"zipcode"
column
=
"zipcode"
/>
collection
>
resultMap
>
<
select
id
=
"find4"
parameterType
=
"string"
resultType
=
"Person"
resultMap
=
"rs4"
>
select *,p.id as p_id, e.id as e_id, a.id as a_id,e.personid as e_pid ,a.personid as a_pid
from person p left join address a on p.id=a.personid
left join extinfo e on p.id = e.personid
where p.name like '%b%'
select
>
<
resultMap
id
=
"rs5"
type
=
"Person"
autoMapping
=
"true"
>
<
id
property
=
"id"
column
=
"p_id"
/>
<
result
property
=
"name"
column
=
"name"
/>
<
result
property
=
"pswd"
column
=
"pswd"
/>
<
association
property
=
"extinfo"
column
=
"id"
javaType
=
"extinfo"
>
<
id
property
=
"id"
column
=
"e_id"
/>
<
result
property
=
"personid"
column
=
"e_pid"
/>
<
result
property
=
"email"
column
=
"email"
/>
<
result
property
=
"qq"
column
=
"qq"
/>
association
>
<
collection
property
=
"addressList"
column
=
"id"
ofType
=
"Address"
>
<
id
property
=
"id"
column
=
"a_id"
/>
<
result
property
=
"personid"
column
=
"a_pid"
/>
<
result
property
=
"addr"
column
=
"addr"
/>
<
result
property
=
"zipcode"
column
=
"zipcode"
/>
collection
>
<
collection
property
=
"ordersList"
column
=
"id"
ofType
=
"Orders"
>
<
id
property
=
"id"
column
=
"o_id"
/>
<
result
property
=
"personid"
column
=
"o_pid"
/>
<
result
property
=
"product"
column
=
"product"
/>
<
result
property
=
"num"
column
=
"num"
/>
collection
>
resultMap
>
<
select
id
=
"find5"
parameterType
=
"string"
resultType
=
"Person"
resultMap
=
"rs5"
>
select *,p.id as p_id, e.id as e_id, a.id as a_id,e.personid as e_pid ,a.personid as a_pid,o.id as o_id,o.personid as o_pid
from person p left join address a on p.id=a.personid
left join extinfo e on p.id = e.personid
left join orders o on p.id = o.personid
where p.name like '%b%'
select
>
<
insert
id
=
"insert"
parameterType
=
"Person"
useGeneratedKeys
=
"true"
keyProperty
=
"id"
>
insert into person(name,pswd) values(#{name},#{pswd})
insert
>
<
update
id
=
"update"
parameterType
=
"Person"
>
update person set name=#{name},pswd=#{pswd} where id=#{id}
update
>
<
select
id
=
"load"
parameterType
=
"long"
resultType
=
"Person"
resultMap
=
"rs_base"
>
select * from person where id = #{value}
select
>
<
delete
id
=
"delete"
parameterType
=
"long"
>
delete from person where id = #{value}
delete
>
<
select
id
=
"load4Map"
resultType
=
"map"
>
select * from person
select
>
mapper
>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<
mapper
namespace
=
"Extinfo"
>
<
resultMap
id
=
"rs_base"
type
=
"Extinfo"
>
<
id
column
=
"id"
property
=
"id"
/>
<
result
property
=
"personid"
column
=
"personid"
/>
<
result
property
=
"email"
column
=
"email"
/>
<
result
property
=
"qq"
column
=
"qq"
/>
resultMap
>
<
select
id
=
"queryByPersonid"
parameterType
=
"long"
resultType
=
"Extinfo"
resultMap
=
"rs_base"
>
select * from extinfo where personid=#{value}
select
>
mapper
>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<
mapper
namespace
=
"Address"
>
<
resultMap
id
=
"rs_base"
type
=
"Address"
>
<
id
column
=
"id"
property
=
"id"
/>
<
result
property
=
"personid"
column
=
"personid"
/>
<
result
property
=
"addr"
column
=
"addr"
/>
<
result
property
=
"zipcode"
column
=
"zipcode"
/>
resultMap
>
<
select
id
=
"queryByPersonid"
parameterType
=
"long"
resultType
=
"Address"
resultMap
=
"rs_base"
>
select * from address where personid=#{value}
select
>
mapper
>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<
mapper
namespace
=
"Orders"
>
<
resultMap
id
=
"rs_base"
type
=
"Orders"
>
<
id
column
=
"id"
property
=
"id"
/>
<
result
property
=
"personid"
column
=
"personid"
/>
<
result
property
=
"product"
column
=
"product"
/>
<
result
property
=
"num"
column
=
"num"
/>
resultMap
>
<
select
id
=
"queryByPersonid"
parameterType
=
"long"
resultType
=
"Orders"
resultMap
=
"rs_base"
>
select * from orders where personid=#{value}
select
>
mapper
>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#全局日志配置
log4j.rootLogger=debug, stdout
#包下所有类的日志级别
log4j.logger.org.apache.ibatis=debug
log4j.logger.java.sql.
Connection
=info, stdout
log4j.logger.java.sql.Statement=debug, stdout
log4j.logger.java.sql.PreparedStatement=debug, stdout
#日志输出到控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %m%n
#关闭Spring日志
log4j.category.org.springframework =
OFF
|
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
|
D:\jdk1.
6
.0_45\bin\java -Didea.launcher.port=
7533
-Didea.launcher.bin.path=C:\IDEA.
13.0
.
1
\bin -Dfile.encoding=UTF-
8
-classpath D:\jdk1.
6
.0_45\jre\lib\charsets.jar;D:\jdk1.
6
.0_45\jre\lib\deploy.jar;D:\jdk1.
6
.0_45\jre\lib\javaws.jar;D:\jdk1.
6
.0_45\jre\lib\jce.jar;D:\jdk1.
6
.0_45\jre\lib\jsse.jar;D:\jdk1.
6
.0_45\jre\lib\management-agent.jar;D:\jdk1.
6
.0_45\jre\lib\plugin.jar;D:\jdk1.
6
.0_45\jre\lib\resources.jar;D:\jdk1.
6
.0_45\jre\lib\rt.jar;D:\jdk1.
6
.0_45\jre\lib\ext\dnsns.jar;D:\jdk1.
6
.0_45\jre\lib\ext\localedata.jar;D:\jdk1.
6
.0_45\jre\lib\ext\sunjce_provider.jar;D:\jdk1.
6
.0_45\jre\lib\ext\sunmscapi.jar;D:\jdk1.
6
.0_45\jre\lib\ext\sunpkcs11.jar;D:\IdeaProjects\mybaitsdemo2\out\production\mybaitsdemo2;D:\IdeaProjects\mybaitsdemo2\lib\asm-
3.3
.
1
.jar;D:\IdeaProjects\mybaitsdemo2\lib\junit-
4.0
.jar;D:\IdeaProjects\mybaitsdemo2\lib\cglib-
2.2
.
2
.jar;D:\IdeaProjects\mybaitsdemo2\lib\log4j-
1.2
.
16
.jar;D:\IdeaProjects\mybaitsdemo2\lib\mybatis-
3.2
.
6
.jar;D:\IdeaProjects\mybaitsdemo2\lib\slf4j-api-
1.7
.
5
.jar;D:\IdeaProjects\mybaitsdemo2\lib\javassist-
3.17
.
1
-GA.jar;D:\IdeaProjects\mybaitsdemo2\lib\slf4j-log4j12-
1.7
.
5
.jar;D:\IdeaProjects\mybaitsdemo2\lib\commons-logging-
1.1
.
1
.jar;D:\IdeaProjects\mybaitsdemo2\lib\mysql-connector-java-
5.1
.
17
-bin.jar;C:\IDEA.
13.0
.
1
\lib\idea_rt.jar com.intellij.rt.execution.application.AppMain mypkg.dao.PersonDAO
2014
-
03
-
27
18
:
11
:
13
org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:
139
) ==> Preparing: select *,p.id
as
p_id, e.id
as
e_id, a.id
as
a_id,e.personid
as
e_pid ,a.personid
as
a_pid,o.id
as
o_id,o.personid
as
o_pid from person p left join address a on p.id=a.personid left join extinfo e on p.id = e.personid left join orders o on p.id = o.personid where p.name like
'%b%'
2014
-
03
-
27
18
:
11
:
13
org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:
139
) ==> Parameters:
2014
-
03
-
27
18
:
11
:
13
org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:
139
) <== Total:
15
Person{id=
1
, name=
'张三b'
, pswd=
'111'
}
Address{id=
1
, personid=
1
, addr=
'adsaaaa'
, zipcode=
'2342342'
}
Address{id=
2
, personid=
1
, addr=
'werwqfqw'
, zipcode=
'2234234'
}
Address{id=
3
, personid=
1
, addr=
'qwefaz'
, zipcode=
'2342342'
}
Orders{id=
1
, personid=
1
, product=
'aaa'
, num=
2
}
Person{id=
2
, name=
'李四b'
, pswd=
'222'
}
Address{id=
4
, personid=
2
, addr=
'vzczsd'
, zipcode=
'13234234'
}
Address{id=
5
, personid=
2
, addr=
'aaaaaaaaa'
, zipcode=
'2342356'
}
Address{id=
6
, personid=
2
, addr=
'asawsd'
, zipcode=
'4564565'
}
Orders{id=
2
, personid=
2
, product=
'bbb'
, num=
3
}
Orders{id=
3
, personid=
2
, product=
'ccc'
, num=
1
}
Person{id=
3
, name=
'王五b'
, pswd=
'111'
}
Address{id=
7
, personid=
3
, addr=
'jkhkky'
, zipcode=
'2342342'
}
Orders{id=
4
, personid=
3
, product=
'ddd'
, num=
3
}
Orders{id=
5
, personid=
3
, product=
'asdf'
, num=
21
}
Person{id=
5
, name=
'ggggb'
, pswd=
'password'
}
Orders{id=
7
, personid=
5
, product=
'zzdfa'
, num=
232
}
Orders{id=
8
, personid=
5
, product=
'ggg'
, num=
66
}
Person{id=
15
, name=
'testnameb'
, pswd=
'password'
}
Person{id=
19
, name=
'testnameb'
, pswd=
'password'
}
Process finished
with
exit code
0
|