fykhlp
fykhlp
2019-03-29 17:09
采纳率: 0%
浏览 3.0k

springboot JPA的DAO报错NullPointerException

初次尝试搭建一个springboot框架,目前进行到JPA操作数据库这一步,但是继承了JpaRepository的UserDAO接口总是报空指针错误。
这是UserDAO:

@Repository
public interface UserDAO extends JpaRepository<User,Long> {
    }

这是测试类:

@Service
public class Tes {

    @Autowired
    public UserDAO user;

    public void t()
    {
        User u = new User();
        u.setAccount("ff");
        u.setName("asufhua");
        u.setPassword("123456");
        u.setQx(1);
        user.save(u);
    }
}

这是Controller,在跳转首页之前,会调用Tes类往数据库里插一条记录:

@Controller
public class HelloController {
    @RequestMapping("/")
    public String index() {
        new Tes().t();
        return "index";
    }
}

现在我每次进入首页,就会提示user.save处的空指针错误,好像这个DAO没有注入成功一样。
到现在折腾一下午了,我只能初步认定**这个DAO没有注入成功**,所以会NULL。
之前我找到的一个解决办法:把DAO和测试类放在同一个目录下就可以成功,可为什么分开放就不行?
我现在的目录结构是启动类在顶层,然后下面有dao/domain/web/service等多个子包。像这样分开放,会提示“expected at least 1 bean which qualifies as autowire candidate.”
于是我尝试在启动类加上路径扫描@MapperScan("xx.xx.dao"),就不报找不到bean的错,可以运行起来。
但是跑起来后,涉及到dao的操作又会报空指针错误。
我感觉spring怎么这么乱呢?启动类为什么不会扫描下面的子包?为什么注入后又是NULL?
哪位大侠帮帮我?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • klrslzq
    klrslzq 2020-03-27 17:18

    刚遇到类似的问题,在Controller里面创建Service实例的时候,用new xxxService()会导致Service里的xxxRepository注入失败。

    在Controller里用@Aotowired产生Service实例,就好了,原因不清楚。

        @Autowired
        AccountService accountService;
    
    点赞 1 评论
  • qq_41906761
    人到中年就秃头 2019-03-29 17:25

    dao层注解使用:

    import org.mybatis.spring.annotation.MapperScan;
    //下面这个注解
    @MapperScan
    
    点赞 评论

相关推荐