项目场景:

首次接触微服务项目。从Git上拉取代码后,前端采用node.js把前端跑起来,后端找到项目入口的启动类,然后启动后端。

操作步骤

1.右击项目总文件夹,选择新建model;
2.在自己新建的model里边,进行pom配置,以及各种业务开发;
3.开发完毕之后,运行项目,报错springboot报ScannerException:character ‘@‘ that cannot start any token. (Do not use @ for indentation;
4.进行百度,在pom里边添加了相关依赖,还是报错;
5.开始进行修改。

问题描述及解决方案:

1.最初报的错误,是自己新建的模块没有添加到父pom里边,在

<models></models>

里边添加

<module>test</module>

自己的模块,问题并未得到解决;
2.上一步操作仅仅是把模块进行绑定到了整个项目中,还需要和当前项目通过

<dependency>
<groupId>com.example</groupId>
        <artifactId>test</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>

形式进行交互,这一部分是要添加到整个项目的入口的pom里边,其他的模块也需要通过该种方式进行和整个项目交互。
3.以上两步解决了,第一次存在的问题,但是又暴露了新的问题,我的controller下边的类名在整个项目里边是已经存在了的,进行修改名字;
4.报service和mapper等的名字重复,不能都修改吧;
5.以上问题就涉及到了spring的相关注解;
6.还少描述了一步,在进行dependency配置完之后,还需要进行整个项目启动类的配置,因为如果不配置的话,他就扫描不到controller下边的所有类。

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class },scanBasePackages = { "com.example.test" })

spring注解分析:

controller层的:正式开发中,是需要使用@RestController,使用@Controller的话,他调用方法,然后是要返回一个页面的。
mapper层的:正常开发使用的注解应该是@Repository,但是目前名字重复了,为解决这个问题,采用@Repository(“b”),其中的b也是可以随便起的。
service层的:正常注解应该是@Service就行,但由于我的实现类已经在当前项目存在了,为了不想修改名字,我借助注解,来进行解决。
如果当前项目中只有一个impl实现类的话,我只使用@Service注解即可
但如果不止一个,我的第二个就要采用这种方式进行注解实现@Service(“aaaa”)。
这里边的aaa可以自己随便起名。
mapper.xml层的:开头封装的数据库表中的字段,type要写实体类的完整路径,如:com.example.test.entity.SysUser。
再定义一个自己起的完整的名字路径。在定义查询方法的时候,select的resultType对应的是实体类。而resultMap对应的是自己封装好的resultMap的id.

<resultMap type="com.example.test.entity.SysUser" id="SysUserResult1">
    <id     property="userId"       column="user_id"      />
    </resultMap>
<select id="getAll" resultMap="SysUserResult1">
    select dept_id
    from sys_user
    where user_id=#{id};
</select>

关于以上解决方案在注解进行注入时,如何处理

1.mapper层的注解是@Repository(“b”),注入到serviceimpl中时,应该是这样

//@Resource(name = "b")
    @Autowired
    @Qualifier(value = "b")
    SysUserMapper sysUserMapper;

2.serviceimpl注入到controller中时,应该是这样

@Resource(name = "aaaa")
    SysUserService sysUserService;

注:我这里的service是分成了接口和实现类,上述service注解是加在impl里边的,接口service类上边不用添加注解了。

涉及到知识点

@RestController和@Controller两者区别
@Controller:访问经过他注解的方法,可以直接通过返回String跳转到jsp等模板页面。
在方法上加@ResponseBody的话,就可以返回实体对象。
@RestController:是@Controller和@ResponseBody的结合体,经过他注解的controller里的所有方法,只能返回String等实体对象。
共同点:表示spring某个类是否可以接受Http请求。