说明:
(1)本篇博客内容和需要注意的点:
? ? ? ? ? ●?application.properties文件中,配置数据库;(包括数据库连接字符串、数据库驱动类、用户名、密码)(同时设置了项目的接口为8083)
? ? ? ? ? ●?走了一遍Controller-Service-Dao全流程;
? ? ? ? ? ●?注入的时候,更多的可以使用@Autowired而不是@Resource了;
? ? ? ? ? ●?配置Mapper.xml和Mapper接口的位置:在application.properties配置文件中,指定Mapper.xml文件的位置;;;同时,总结了【单纯的Mybatis项目】【Spring?MVC和Mybatis整合项目】中,如何配置;
? ? ? ? ? ●?涉及到了【注入Mapper接口对象时,如何解决IDEA“报错”的问题】;
目录
一:在application.properties文件中,配置数据库;?
1.前面,我们生成了大量的Mapper接口和mapper.xml文件,这些是需要连接数据库的;但又因为,项目没有配置数据库;所以,此时程序是跑不起来的;
2.在application.properties配置文件中,配置数据库;(重要!!!)
3.此时,我们在运行项目,发现其跑起来了;
二:走一遍Controller-Service-Dao流程;
1.实体类、Mapper接口、Mapper.xml文件,在前面已经通过【mybatis-generator】插件,自动生成了;
2.创建Service层;
(1)创建UserService接口,定义一个查询用户的方法getUser()方法;
(2)创建UserServiceImpl实现类,去实现getUser()方法;
3.创建Controller层;
4.在application.properties配置文件中,指定Mapper.xml文件的位置;(同时,总结了【单纯的Mybatis项目】【Spring?MVC和Mybatis整合项目】中,如何配置Mapper.xml和Mapper接口的位置;)
5.在MallAppliccation程序入口类处,使用【@MapperScan注解】,指定Mapper接口的位置;(同时,总结了【单纯的Mybatis项目】【Spring?MVC和Mybatis整合项目】中,如何配置Mapper.xml和Mapper接口的位置;)
6.运行项目,观察效果;
7.一个小问题:Service注入Mapper对象时,由于IDEA不识别,而导致的红色波浪线问题;
?
一:在application.properties文件中,配置数据库;?
1.前面,我们生成了大量的Mapper接口和mapper.xml文件,这些是需要连接数据库的;但又因为,项目没有配置数据库;所以,此时程序是跑不起来的;
如果,此时我们启动项目:
2.在application.properties配置文件中,配置数据库;(重要!!!)
spring.datasource.name=imooc_mall_datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/imooc_mall?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=12345
说明:
(1)配置内容说明;?
3.此时,我们在运行项目,发现其跑起来了;
二:走一遍Controller-Service-Dao流程;
1.实体类、Mapper接口、Mapper.xml文件,在前面已经通过【mybatis-generator】插件,自动生成了;
2.创建Service层;
(1)创建UserService接口,定义一个查询用户的方法getUser()方法;
(2)创建UserServiceImpl实现类,去实现getUser()方法;
说明:
(1)这儿注入的时候,为什么要用@Autowired而不是@Resource了
? ? ? ? ? ●?通过【Spring IoC容器与Bean管理22:使用注解方式实现Spring IoC三:自动装配注解(对象依赖注入);自动装配注解之【按类型装配注解】(@Autowired)的使用和缺点;】和【Spring IoC容器与Bean管理23:使用注解方式实现Spring IoC四:自动装配注解(对象依赖注入);自动装配注解之【按名称装配注解】(@Resource)的使用;】这两篇博客能迅速知道:这里使用@Autowired或者@Resource都可以用来装配bean。不同的是@Autowired 属于Spring的注解,@Resource属于JDK的注解。@Autowired默认按类型装配 ,@Resource默认按照名称进行装配。
? ? ? ? ? ●?而且,如果我们的文件命名、书写,都按照Spring的规范来的话,@Autworied注解是完全没问题的;所以,既然这儿这样用了;那就说明在实际开发中,@Autowired注解也是可以普遍应用的;
(2)自然,要记得在UserServiceImpl类上使用@Service注解,以便让IoC容器管理这个对象;
3.创建Controller层;
说明:
(1)我们在创建Spring?Boot项目的时候,通过【spring-boot-starter-parent】;其就会,自动引入Jackson这款JSON序列化工具;
然后,又可以参考【SpringMVC入门与数据绑定11:响应输出结果;(@ResponseBody简介;ModelAndView引入;)】,
【RESTful开发风格6:RESTful基本使用四:JSON序列化;(jackson组件,以及其中的 @JsonFormat注解来解决时间问题;)】,
【SSM开发书评网13:图书列表分页及查询三:图书分页查询(2);(Controller部分;前端部分开发了一半)】;这三篇博客可知,因为我们已经配置了jackson,所以其可以自动把【方法返回的实体对象】序列化为【JSON字符串】;即,上面方法返回的User对象,其会自动把User对象序列化为JSON字符串;
4.在application.properties配置文件中,指定Mapper.xml文件的位置;(同时,总结了【单纯的Mybatis项目】【Spring?MVC和Mybatis整合项目】中,如何配置Mapper.xml和Mapper接口的位置;)
mybatis.mapper-locations=classpath:mappers/*.xml
说明:
(1)如下解释:
(2)上面的情况进一步介绍:
? ? ? ? ? ●?单纯使用Mybatis框架的时候:我们需要在mybatis-config.xml文件中,配置Mapper.xml文件的位置;
可以参考【MyBatis入门五:MyBatis基本使用三:MyBatisUtils工具类;以查询为例,演示mybatis的一个工作流程;】;
同时,通过【OA系统十二:设置默认首页顶部导航栏的用户名 ;(【基于Xml配置下,使用Mapper接口】的方式!!!!!)】可以知道,在Mybatis项目中,因为在xml文件中我们指定了Mapper接口的位置,所以我们只需要在mybatis-config.xml文件中配置Mapper.xml中就行了,而不用配置Mapper接口的位置了;
? ? ? ? ? ●?Spring?MVC和Mybatis整合项目中:我们是通过在applicationContext.xml中,配置Mapper扫描器去扫描Mapper接口,进而也能去获取Mapper.xml文件了的方式来实现的;如,可以参考【SSM开发书评网5:项目准备与SSM整合三:Spring与Mybatis整合;(引依赖,配置数据源,配置SqlSessionFactory,配置Mapper接口扫描器,创建mybatis配置文件)】;
? ? ? ? ? ●?但是,这儿Spring?Boot项目中,我们直接配置去扫描mapper.xml文件了;能够感觉到,Spring?Boot项目,针对Mybatis的内容,作了一定程度的封装;
所以,能够感觉到,Spring?Boot,Spring?MVC在整合Mybatis这件事上,具体做法是不同的;虽然其中的细节自己不清楚,但可以肯定其底层原理是一样的;只是上层的封装效果不同而已;
(3)然后,上面顺便设置了项目的接口为8083;
5.在MallAppliccation程序入口类处,使用【@MapperScan注解】,指定Mapper接口的位置;(同时,总结了【单纯的Mybatis项目】【Spring?MVC和Mybatis整合项目】中,如何配置Mapper.xml和Mapper接口的位置;)
说明:
(1)上面配置后,Spring就能知道我们的Mapper接口在哪儿了,也就能去创建Mapper接口对应的对象了;
6.运行项目,观察效果;
7.一个小问题:Service注入Mapper对象时,由于IDEA不识别,而导致的红色波浪线问题;
之所以,上面会提示红色波浪线是因为:对于IDEA来说,要想在UserServiceImpl类中注入UserMapper对象,那么UserMapper类上(它其实是个接口啦)就需要有一些注解来提示的;;否则IDEA也不知道UserMapper类是否可以被引入;
………………
但是,我们在入口处的配置,制定了Mapper接口的位置;;;其实,这儿的配置是给Mybatis识别用的;
即,【Mapper接口在哪儿】这个信息,我们告诉了Mybatis,没有告诉IDEA;;;所以,上面IDEA会提示红色波浪线;
………………………………
为此,我们可以在Mapper接口上使用@Repository注解,这样以后IDEA就会认为这个Mapper接口是个资源,然后我们在Service类中注入Mapper对象的时候,IDEA就不会提示红色波浪线了;(能够感受到在Mapper接口上,使用@Repository注解,是不太符合Spring规范的;;;;即,在Mapper接口上使用@Repository注解,有点应付IDEA的意思)
目前,能够明白,上面的红色波浪线,丝毫不影响程序的正常运行,其仅仅是IDEA不识别导致的;;;但是,这个红色波浪线,很容易让我们误以为程序是有问题的;所以,尽量消除这种波浪线是有必要的;
自然,我们也可以在IDEA中,设置不显示红色波浪线;;;但是这种方法不能用,杀伤面太大;;;因为,比如有的地方,我们程序编写错了,其应该有红色波浪线提示的,但是因为我们设置了IDEA不显示红色波浪线,所以对于原本出错的地方,我们就没办法去修复了;
|