up:: 项目初始化创建SpringBoot项目(必看)

说明:

(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配置文件中,配置数据库;(重要!!!)

 
     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了

@Resource与@Autowired注入有啥区别? 🤗 ● 通过【自动装配注解简介】和【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序列化工具;

然后,又可以参考【响应输出结果】,【Json序列化】,【利用Ajax动态获取后端的JSON数据】;这三篇博客可知,因为我们已经配置了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文件的位置;

可以参考【初始化工具类MyBatisUtils】;同时,通过【回顾Mapper接口开发过程】可以知道,在Mybatis项目中,因为在xml文件中我们指定了Mapper接口的位置,所以我们只需要在mybatis-config.xml文件中配置Mapper.xml中就行了,而不用配置Mapper接口的位置了;

Spring MVC和Mybatis整合项目中: 我们是通过在applicationContext.xml中,配置Mapper扫描器去扫描Mapper接口,进而也能去获取Mapper.xml文件了的方式来实现的;如,可以参考【Spring与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.运行项目,观察效果;

Question

SpringBoot中如何配置Maven环境? 🤗

  1. application文件配置xml地址:mybatis.mapper-locations=classpath:mappers/*.xml
  2. 启动类上配置进入xml文件的接口类,进行扫描: @MapperScan(basePackages = “com.imooc.mall.model.dao”)

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不显示红色波浪线,所以对于原本出错的地方,我们就没办法去修复了;

Question

为何IDEA对注入的Mapper会报红? 🤗 我们需要明白的是,爆红不是语法错误,而是mapper是属于mybatis的,Idea不认识,所以就友好的报了个红,即使爆红还是可以正常运行的,如果想要解决爆红,推荐阅读idea 注入 mapper 报错报红的几种解决方案