springboot结合mybatis,简述使用spring整合mybatis的基本步骤

  springboot结合mybatis,简述使用spring整合mybatis的基本步骤

  尽量不要使用jUnit提供的单元测试。

  提出请求,尝试使用SpringBoot提供的测试类进行测试,可以自动扫描组件,使用容器中的bean对象。

  如果其他任何组件中有被注入的对象,那么这个组件必须从SpringBoot容器中取出,然后才能使用被注入对象的功能!

  今天出现了一个错误,花了很长时间才解决,最后发现是一个很低级很基本的错误!

  这是映射器接口。使用@mapper相当于将接口的代理对象注册到bean中,但是在上下文中找不到(其实很正常)

  因为注释@Mapper是Mybatis提供的,注释@ autowritten是Spring提供的,所以IDEA可以理解Spring的上下文,但不能和Mybatis扯上关系。而且我们从@ autowritten的源代码中可以看到,默认情况下,@ autowritten要求依赖对象必须存在,所以IDEA此时只能给出红色警告。

  包com . bit . mapper;导入com . bit . POJO . user;导入org . Apache . ibatis . annotations . mapper;导入org . Apache . ibatis . annotations . param;@ mapper public interface User mapper { User select byid(@ Param( userid )整数id);}这是mapper接口对应的xml文件,也没有问题。

  ?xml版本=1.0 编码=UTF-8 ?DOCTYPE Mapper PUBLIC -//mybatis . org//DTD Mapper 3.0//EN http://mybatis . org/DTD/mybatis-3-Mapper . DTD Mapper namespace= com . bit . Mapper . user Mapper select id= select byid result type= com . bit . POJO . user select * From users where id=# { userid }/select/Mapper将java目录中的xml文件添加到resource资源中并嵌套在build标记中,没有问题。

  资源目录src/main/java/directory包含include * */*。XML/include/includes/resource/resources然后我们写服务层,一个UserService接口,和UserServiceImpl接口的一些实现类。

  在这个实现类中,注入UserMapper总是提示不能注入。我一直以为有问题(结果发现没问题)。

  写完服务实现类没问题。

  包com . bit . service;导入com . bit . mapper . user mapper;导入com . bit . POJO . user;导入org . spring framework . beans . factory . annotation . auto wired;导入org . spring framework . stereotype . service;@Servicepublic类UserServiceImpl实现UserService { @ auto wired private user mapper user mapper;@ override public user query byid(integer id){ system . out . println(进入服务);返回user mapper . select byid(id);}}然后我就直接去考了。我测试的东西呢?

  实例化UserService,创建一个对象,然后直接调用方法,看看是否可以调用UserMapper来查询数据库。然后保留空指针异常的错误。

  @ spring boot Test class BitApplicationTests { @ Test void context loads(){ UserService UserService=new UserServiceImpl();userservice . query byid(13);system . out . println(userService);system . out . println(userservice . query byid(15));system . out . println(userservice . query byid(13));}}

  一度认为mapper接口没有注入UserServcie,导致调用UserServcie的方法为空。我以为是Mapper接口的问题。如何解决各种搜索?几个小时后,我在别人的博客里找到了答案。

  我们的UserMapper是注入到UserServiceImpl中的,所以不能直接使用UserServcieIml。如果我们在其他类中使用它的函数,就必须将这个类注入到当前类中,从容器中获取这个UserService,这样才能正确调用它。不会有空指针异常,我从来没发现过。这是很低级的错误。

  正确的做法:先将其组装成当前对象,然后从容器中获取bean使用。

  @ spring boot testclass BitApplicationTests { @ auto wired private UserService UserService;@ Test void context loads(){ system . out . println(userservice . query byid(15));system . out . println(userservice . query byid(13));}}就是这样。这篇关于SpringBoot的文章详细介绍了在整合MyBatis的过程中可能遇到的问题。想了解更多关于SpringBoot MyBatis的信息,请搜索之前关于popular IT的文章或者继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: