Exception in thread “main” org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.heima.service.com.CustomerMapper.addCustomer
at org.apache.ibatis.binding.MapperMethod
S
q
l
C
o
m
m
a
n
d
.
<
i
n
i
t
>
(
M
a
p
p
e
r
M
e
t
h
o
d
.
j
a
v
a
:
223
)
a
t
o
r
g
.
a
p
a
c
h
e
.
i
b
a
t
i
s
.
b
i
n
d
i
n
g
.
M
a
p
p
e
r
M
e
t
h
o
d
.
<
i
n
i
t
>
(
M
a
p
p
e
r
M
e
t
h
o
d
.
j
a
v
a
:
48
)
a
t
o
r
g
.
a
p
a
c
h
e
.
i
b
a
t
i
s
.
b
i
n
d
i
n
g
.
M
a
p
p
e
r
P
r
o
x
y
.
c
a
c
h
e
d
M
a
p
p
e
r
M
e
t
h
o
d
(
M
a
p
p
e
r
P
r
o
x
y
.
j
a
v
a
:
59
)
a
t
o
r
g
.
a
p
a
c
h
e
.
i
b
a
t
i
s
.
b
i
n
d
i
n
g
.
M
a
p
p
e
r
P
r
o
x
y
.
i
n
v
o
k
e
(
M
a
p
p
e
r
P
r
o
x
y
.
j
a
v
a
:
52
)
a
t
c
o
m
.
s
u
n
.
p
r
o
x
y
.
SqlCommand.<init>(MapperMethod.java:223) at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48) at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:59) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52) at com.sun.proxy.
SqlCommand.<init>(MapperMethod.java:223)atorg.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48)atorg.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:59)atorg.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)atcom.sun.proxy.Proxy2.addCustomer(Unknown Source)
at cn.heima.Servlet.com.Test.test1(Test.java:32)
at cn.heima.Servlet.com.Test.main(Test.java:37)
出现这个问题的原因有以下几个
1.没有在Java工程里,建立相应的接口
2.中namespace没有填写正确的接口地址
3.接口名和映射xml配置文件名不一致
4.在映射文件里写sql语句时,id=“”,id 里面的值没有填写或者填写有误。
5.接口中没有相应的方法,在映射文件里写sql语句时,id=“”。却填写了相应的方法
例如:
insert into customer(name,password1,password2,customername,gender,email,birthday) values(#{name},#{password1},# {password2},#{customername},#{gender},#{email},#{birthday});
解决方案:在定义接口 和映射xml文件时候,先查看接口中有没有相应的方法,在检查接口名和映射xml配置文件名是否一致。
将二者一致后,即可解决问题。
如:接口定义名称:UserOperation.java
映射xml名称: UserOperation.xml
解释:
为什么需要保持接口名和映射文件xml名保持一致?
答:这里体现了一个编程思想,面向接口编程。
面向接口编程有两种常用的形式
1.接口<------->实现类(一一对应)
2.接口<------>配置文件(一一对应)
这里配置文件又分为两种。1. xml配置文件 2. properties配置文件
保持接口名和配置文件名保持一致,有利于读者清晰的知道这个配置文件就是这个接口的实现。