从小白开始学习SpringCloud(四)
这一个博客我们来记录下消费者通过调用生产者的服务来操作数据库
1.在生产者的pom.xml中添加对mysql的依赖
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </d.ependency>
2.在生产者的application.yml中添加一些数据库的配置
server: port: 8011 spring: application: name: springcloud-user-reg datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/new_schema?characterEncoding=utf-8&useSSL=false username: root password: root eureka: client: service-url: defaultZone: http://localhost:8000/eureka mybatis: mapper-locations: classpath:mapper/*.xml
3.在生产者中建立以下的目录结构
4.我的数据库中只有id,name两个字段,在common中添加People类,peopel类中的变量名称一定要和数据库的一样,这个很重要,很重要,很重要,我就这个问题浪费了俩小时,如果不知道common的用法的可以去看我的上一篇博客https://www.cnblogs.com/837634902why/p/10958925.html内容也不多挺好理解的,如果实在觉得麻烦我们可以在每一个使用到这个类的项目下都新建一个People类,但我强烈建议不要这么写.
package com.example.common; public class User { private Integer userId; private String userName; public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Override public String toString() { return "User{" + "userId=" + userId + ", userName='" + userName + '\'' + '}'; } }
5.添加mapper接口,代码如下
package com.example.common; public class People { private String id; private String name; public String getUserId() { return id; } public void setUserId(String userId) { this.id = userId; } public String getUserName() { return name; } public void setUserName(String userName) { this.name = userName; } }
6.添加mapper的实现类UserMapper,但是这个下面没用到(*_*)
package com.example.springcloudprovider.mapper.user; /** * * * @author hmilyylimh * * @version 0.0.1 * * @date 2017-10-19 * */ public class UserMapper { }
7.添加用户service接口IUserService
package com.example.springcloudprovider.service; import com.example.common.People; import java.util.List; /** * 简单用户链接Mysql数据库微服务(通过@Service注解标注该类为持久化操作对象)。 * * @author hmilyylimh * * @version 0.0.1 * * @date 2017-10-19 * */ public interface IUserService { List<People> findAllUsers(); }
8.添加接口实现类UserServiceImpl,如果iUserMapper标红了,不要慌,没事
package com.example.springcloudprovider.service.impl;
import com.example.common.People;
import com.example.springcloudprovider.mapper.IUserMapper;
import com.example.springcloudprovider.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List;
/**
* 简单用户链接Mysql数据库微服务(通过@Service注解标注该类为持久化操作对象)。
*
* @author hmilyylimh
*
* @version 0.0.1
*
* @date 2017-10-19
*
*/
@Service
public class UserServiceImpl implements IUserService
{
@Autowired
IUserMapper iUserMapper;
@Override
public List<People> findAllUsers()
{ return iUserMapper.findAllUsers(); }
}
9.在UserController中添加这个访问数据库的服务
package com.example.springcloudprovider.controller; import com.example.common.People; import com.example.common.User; import com.example.springcloudprovider.service.IUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; /** * 用户微服务Controller。 * * @author hmilyylimh * * @version 0.0.1 * * @date 2017-10-19 * */ @RestController public class UserController { @Autowired private IUserService iuService; @GetMapping("/simple/list") public List<People> findUserList() { return this.iuService.findAllUsers(); ...... }
10.此时http://127.0.0.1:8011/simple/list就可以看到以下信息了
11.在消费者中调用生产者的服务,在消费者中的UserController中加入以下代码
@GetMapping("query") public List<People> queryOrder(){ List forObject = restTemplate.getForObject("http://SPRINGCLOUD-USER-REG/simple/list", List.class); return forObject; }
12.在服务器中输入http://127.0.0.1:8021/query
可以看到和上面一样的结果
13.错误总结
(1)如果mapper链接数据库没有返回任何值,很有可能是类中的字段和数据库中的字段名字不一样,我们调用标准的接口获取数据库的值时,他是通过名称将数据库中的值和我们的类联系起来的,名字不一样当然查找不到东西了.
(2)如果报的错提到了com.mysql.jdbc.Driver和com.mysql.cj.jdbc.Driver,是因为数据版本比较高不允许再通过com.mysql.jdbc.Driver来链接数据库,把他换成com.mysql.cj.jdbc.Driver就可以了
14.附上我参考的链接https://blog.csdn.net/YLIMH_HMILY/article/details/78287373