org.apache.ibatis.binding.BindingException:无效的绑定语句(未找到):db.UserMapper.xxx
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): db.UserMapper.xxx
运行 DROPWIZARD 应用程序
时遇到异常
错误[2016-12-30 04:36:34,735] io.dropwizard.jersey.errors.LoggingExceptionMapper:处理请求时出错:6813de3aa499e307
! org.apache.ibatis.binding.BindingException:无效的绑定语句(未找到):db.UserMapper.
@Path("/user/{username}")
public class ExampleResource {
private final SqlSessionFactory sessionFactory;
public ExampleResource(SqlSessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@GET
public User getUser(@PathParam("username") String username) {
try (SqlSession session = sessionFactory.openSession())
{
UserMapper users = session.getMapper(UserMapper.class);
//session.getConfiguration().addMapper(UserMapper.class);
//UserMapper users = session.getMapper(UserMapper.class);
return users.findByUsername(username);
}
}
}
UserMapper.xml
<mapper namespace="db.UserMapper" class="db.UserMapper">
<select id="findByUsername" resultType="User">
<![CDATA[
select username,email
from user
where username = #{username}
]]>
</select>
<resultMap id="User" type="core.User">
<id column="username" property="username" />
<result column="email" property="email" />
</resultMap>
<insert id="addUser">
<![CDATA[
insert into user (username, email)
values (#{User.username}, #{User.email})
]]>
</insert>
user mapper.java
public interface UserMapper {
User findByUsername(@Param("username") String username);
void addUser(@Param("user") User user);
}
配置类:
@Valid
@NotNull
private DataSourceFactory datasourceFactory = new DataSourceFactory();
@JsonProperty("database")
public DataSourceFactory getDataSourceFactory() {
return this.datasourceFactory;
}
public void setDatabase(DataSourceFactory database) {
this.datasourceFactory = database;
}
当我们在 main class 中使用带有 dropwizard 的 mybatis 时,我们初始化
mybatisbundle,到时候提供你的mapperclass所在的包名。
在下面的代码中突出显示。
private final MybatisBundle<TestDropWizardConfiguration> mybatisBundle = new MybatisBundle<TestDropWizardConfiguration>("**com.example.helloworld**") {
@Override
public DataSourceFactory getDataSourceFactory(TestDropWizardConfiguration configuration) {
return configuration.getDataSourceFactory();
}
};
我的问题是spring没有找到mapper.xml,但是带@Test可以找到。
我的 XXXmapper.xml 和 XXXXmapper.java 在同一个位置 (src/main/java/..../)。
我将所有 XXXmapper.xml 移动到“src/main/resources/mapper”,并在 <bean id="sqlSessionFactory>
.
中添加 <property name="mapperLocations" value="classpath:mapper/*.xml" />
那就可以了!
或许您可以从 Google 搜索 "how many methods configure the XXXmapper.xml about mybatis" 。
希望对你有帮助:-)
运行 DROPWIZARD 应用程序
时遇到异常错误[2016-12-30 04:36:34,735] io.dropwizard.jersey.errors.LoggingExceptionMapper:处理请求时出错:6813de3aa499e307 ! org.apache.ibatis.binding.BindingException:无效的绑定语句(未找到):db.UserMapper.
@Path("/user/{username}")
public class ExampleResource {
private final SqlSessionFactory sessionFactory;
public ExampleResource(SqlSessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@GET
public User getUser(@PathParam("username") String username) {
try (SqlSession session = sessionFactory.openSession())
{
UserMapper users = session.getMapper(UserMapper.class);
//session.getConfiguration().addMapper(UserMapper.class);
//UserMapper users = session.getMapper(UserMapper.class);
return users.findByUsername(username);
}
}
}
UserMapper.xml
<mapper namespace="db.UserMapper" class="db.UserMapper">
<select id="findByUsername" resultType="User">
<![CDATA[
select username,email
from user
where username = #{username}
]]>
</select>
<resultMap id="User" type="core.User">
<id column="username" property="username" />
<result column="email" property="email" />
</resultMap>
<insert id="addUser">
<![CDATA[
insert into user (username, email)
values (#{User.username}, #{User.email})
]]>
</insert>
user mapper.java
public interface UserMapper {
User findByUsername(@Param("username") String username);
void addUser(@Param("user") User user);
}
配置类:
@Valid
@NotNull
private DataSourceFactory datasourceFactory = new DataSourceFactory();
@JsonProperty("database")
public DataSourceFactory getDataSourceFactory() {
return this.datasourceFactory;
}
public void setDatabase(DataSourceFactory database) {
this.datasourceFactory = database;
}
当我们在 main class 中使用带有 dropwizard 的 mybatis 时,我们初始化 mybatisbundle,到时候提供你的mapperclass所在的包名。 在下面的代码中突出显示。
private final MybatisBundle<TestDropWizardConfiguration> mybatisBundle = new MybatisBundle<TestDropWizardConfiguration>("**com.example.helloworld**") {
@Override
public DataSourceFactory getDataSourceFactory(TestDropWizardConfiguration configuration) {
return configuration.getDataSourceFactory();
}
};
我的问题是spring没有找到mapper.xml,但是带@Test可以找到。
我的 XXXmapper.xml 和 XXXXmapper.java 在同一个位置 (src/main/java/..../)。
我将所有 XXXmapper.xml 移动到“src/main/resources/mapper”,并在 <bean id="sqlSessionFactory>
.
中添加 <property name="mapperLocations" value="classpath:mapper/*.xml" />
那就可以了!
或许您可以从 Google 搜索 "how many methods configure the XXXmapper.xml about mybatis" 。 希望对你有帮助:-)