2016-12-30 69 views
0

面对异常而运行的应用程序DROPWIZARDorg.apache.ibatis.binding.BindingException:无效界语句(未找到):db.UserMapper.xxx

ERROR [2016年12月30日04:36:34735] 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); 
} 

ConfigurationClass:

@Valid 
@NotNull  

private DataSourceFactory datasourceFactory = new DataSourceFactory(); 

@JsonProperty("database") 
public DataSourceFactory getDataSourceFactory() { 
     return this.datasourceFactory; 
    } 
public void setDatabase(DataSourceFactory database) { 
    this.datasourceFactory = database; 
} 
+0

你在哪里保存了xml文件?你在使用maven吗?也发布配置文件,了解你是否在添加mapp * xml文件 –

+0

项目中的xml文件是我们保存的.yml文件。我使用这个Mapper.xml文件只映射界面,没有其他配置文件。 –

+0

不知道你是如何在dropwizard中做到这一点的,但是假设你有目录映射器,在那里你保存了所有的mapper.xml,对于SqlSessionFactoryBean你需要设置factory.setMapperLocations(“classpath:/ mapper”);在你的配置中没有你说的地方mapper.xml位于(要搜索) –

回答

0

当我们正在使用的MyBatis在主类dropwizard我们初始化 我batisbundle,当时提供你的映射类所在的包名称。 以下代码突出显示。

private final MybatisBundle<TestDropWizardConfiguration> mybatisBundle = new MybatisBundle<TestDropWizardConfiguration>("**com.example.helloworld**") { 
    @Override 
    public DataSourceFactory getDataSourceFactory(TestDropWizardConfiguration configuration) { 
     return configuration.getDataSourceFactory(); 
    } 
};