Mapper

问题:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-10-14 16:41:27.546 ERROR 42324 --- [  restartedMain] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Field userMapper in com.example.demo.service.impl.UserServiceImpl required a bean of type 'com.example.demo.dao.UserMapper' that could not be found.


Action:

Consider defining a bean of type 'com.example.demo.dao.UserMapper' in your configuration.


解决办法是 在dao层的UserMapper上加上@Mapper

package com.example.demo.dao;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

/**
 * Created by fucheng on 2018/4/29.
 */
@Mapper     //声明是一个Mapper,与springbootApplication中的@MapperScan二选一写上即可
@Repository
public interface UserMapper {

    User selectUserByName(String name);

}
### 关于 Spring 和 MyBatis 中 @Mapper 注解的使用方法及常见问题 #### 1. @Mapper 的基本功能 `@Mapper` 是 MyBatis 提供的一个注解,主要用于标识一个接口作为 MyBatis 的 Mapper 接口。当该注解被应用到某个接口上时,MyBatis 会在运行时为该接口动态生成实现类,并将其注册到 Spring 容器中以便后续依赖注入和调用[^2]。 #### 2. 如何在项目中使用 @Mapper? 为了使 `@Mapper` 生效并让 Spring 自动扫描和管理所有的 Mapper 接口,可以采用以下两种方式之一: - **单个接口标记法** 在每一个 Mapper 接口上单独加上 `@Mapper` 注解即可。这种方式适合小型项目或者只需要少量 Mapper 接口的情况。 ```java @Mapper public interface UserMapper { @Select("SELECT * FROM users WHERE id = #{id}") User findById(int id); } ``` - **批量扫描法** 如果项目中有多个 Mapper 接口,则可以通过配置 `@MapperScan` 来指定需要扫描的包路径。这通常是在项目的启动类或配置类中完成。 ```java @SpringBootApplication @MapperScan("com.example.mapper") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 这种方式更加高效且易于维护,尤其适用于大型项目[^3]。 #### 3. 常见问题及其解决方案 ##### (1) Mapper 接口未被识别 如果发现某些 Mapper 接口无法正常工作,可能是因为它们没有被正确地加载到 Spring 容器中。以下是几种常见的原因及解决办法: - **忘记加 @Mapper 或者 @MapperScan** 确保所有需要使用的 Mapper 接口都被打上了 `@Mapper` 注解,或者通过 `@MapperScan` 正确指定了包名。 - **XML 映射文件缺失** 当前版本支持基于注解的方式定义 SQL 语句,但如果仍然使用 XML 文件,则需确认对应的 `.xml` 文件已放置在正确的目录下,并且其命名与 Mapper 接口一致[^4]。 ##### (2) 方法参数绑定失败 有时可能会遇到传入参数未能成功绑定至 SQL 查询中的情况。这是由于 MyBatis 默认只允许简单类型的变量直接传递给占位符 `${}` 或 `#{}` 。对于复杂对象(如实体类),则需要注意字段名称匹配以及 getter/setter 是否存在等问题。 ##### (3) 自动生成主键返回值为空 针对数据库自增列设置为主键的情形,默认情况下执行插入操作后不会立即获取新记录的实际 ID 值。此时可通过如下方式进行调整: ```java @Insert("INSERT INTO user(username,password,email) VALUES(#{username},#{password},#{email})") @Options(useGeneratedKeys=true,keyProperty="id",keyColumn="id") int insertUser(User user); ``` 上述代码片段展示了如何利用 `@Options` 属性告知框架开启此特性。 #### 4. 手动扩展 @Mapper 功能 虽然官方已经提供了一个标准版的 `@Mapper` 实现,但在特定场景下我们也可以自行定制化需求。例如创建一个新的名为 `CustomMapper` 的注解来代替默认行为: ```java package com.custom.annotations; import org.springframework.stereotype.Component; import java.lang.annotation.*; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Component public @interface CustomMapper {} ``` 如此一来便可以在原有基础上增加额外逻辑处理[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潺泓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值