Spring cloud微服务搭建(三)—— Spring cloud服务提供方

接上一篇:Spring cloud微服务搭建(二)——pojo实体类

编写Spring cloud服务提供方,在父项目下新建module,选择普通的maven项目。

1、引入Maven依赖

在父项目dependencyManagement中依赖的基础上(无需指定版本号),新增导入pojo实体类模块依赖:

<dependency>
    <groupId>zuka</groupId>
    <artifactId>springcloud-api</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
2、application.yaml文件
  • 服务提供方端口号:8001

  • mybatis配置:

    • mapper-locations:mapper文件位置
    • map-underscore-to-camel-case:数据库表字段一般下划线格式,pojo实体类属性名一般camel风格,设置为true/on,则自动支持两种风格的映射。实现了字段名与属性名的松散绑定,不需要严格一致。
  • Spring的配置:

    • application名称:也是监控页面显示节点名称

    • 数据源配置:

      • url:jdbc:mysql://{server IP}:{server port}/{dbname}?useUnicode=true&characterEncoding=utf-8

      useUnicode=true&characterEncoding=utf-8,避免中文字符乱码

server:
  port: 8001

#mybatis的配置
mybatis:
  type-aliases-package: zuka.pojo
  mapper-locations: classpath:mybatis/mapper/*.xml
  #config-location: classpath:mybatis/mybatis-config.xml
  configuration:
    map-underscore-to-camel-case: on

#Spring的配置
spring:
  application:
    name: springcloud-provider
  #数据源的配置
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=utf-8
    password: 123456
    username: root
3、mapper接口定义
  • @Repository:表示为数据访问层,注入为容器中的组件。
  • @Mapper:表示为mybatis mapper的标记式注解。
@Mapper
@Repository
public interface DepartmentDao {
    public boolean addDepartment(Department department);

    public Department queryById(int id);

    public List<Department> queryForList();
}
4、mapper.xml文件(sql语句)
  • 所在路径与application.yaml文件中配置的mybatis.mapper-locations: classpath:mybatis/mapper/*.xml一致

  • namespace:mapper接口的全限定类名

  • id:mapper接口定义的方法名

    满足如上条件后,mapper.xml文件会被mybatis通过反射实例化出一个mapper接口实现类,及实现方法。达到执行sql语句的目的。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="springcloud.dao.DepartmentDao">

    <insert id="addDepartment" parameterType="pojo.Department" >
        insert into department (dept_name,database_source) values (#{deptName},DATABASE());
    </insert>

    <select id="queryById" resultType="pojo.Department" parameterType="int">
        select * from department where dept_no=#{deptNo};
    </select>

    <select id="queryForList" resultType="pojo.Department">
        select * from department;
    </select>
</mapper>
5、服务接口

简单起见,接口方法与mapper接口定义的方法一致。

public interface DeparmentService {
    public boolean addDepartment(Department department);

    public Department queryById(int id);

    public List<Department> queryForList();
}
6、服务接口实现类

@Service:标记为服务层,注入为容器中的一个组件。

重要属性DepartmentDao:访问数据库的实现类。

  • mybatis会在运行时通过反射,将mapper.xml文件实例化为一个DepartmentDao接口的实现类,实际完成数据库sql执行。
  • spring boot自动装配做了大部分工作,MybatisAutoConfiguration已经提供了 SqlSessionFactory 和 SqlSessionTemplate这两个bean,注入容器中。
  • 开发者实现简单的数据访问层,只需两步:
    • 定义mapper接口
    • 编写mapper.xml文件中sql语句。
  • 在服务层中可以直接使用mapper接口,此处为DepartmentDao,执行sql语句。
@Service
public class DepartmentServiceImp implements DeparmentService{

    @Autowired
    private DepartmentDao departmentDao;

    @Override
    public boolean addDepartment(Department department) {
        return departmentDao.addDepartment(department);
    }

    @Override
    public Department queryById(int id) {
        return departmentDao.queryById(id);
    }

    @Override
    public List<Department> queryForList() {
        return departmentDao.queryForList();
    }
}
7、控制器Controller

前端控制器用于接收url请求,调用业务代码,完成处理后,返回结果供前端页面展示。

  • @RestController:无需手写前端页面,jackson格式返回执行结果,默认页面展示。
@RestController
public class DepartmentController {
    @Autowired
    private DeparmentService deparmentService;

    @PostMapping("/dept/add")
    public boolean addDepartment(Department department){
        return deparmentService.addDepartment(department);
    }

    @GetMapping("/dept/get/{id}")
    public Department queryById(@PathVariable("id") int id){
        return deparmentService.queryById(id);
    }

    @GetMapping("/dept/list")
    public List<Department> queryForList(){
        return deparmentService.queryForList();
    }
}
8、服务启动类
  • @SpringBootApplication:标记为spring boot服务启动类

  • 启动类要放在root package下面。用户自定义的包也要在root package下。

    以便conponent-scan可以自动扫描跟主程序同级的包,自动装配成Spring bean。

@SpringBootApplication
@EnableEurekaClient
public class DepartmentProvider8001 {
    public static void main(String[] args) {
        SpringApplication.run(DepartmentProvider8001.class,args);
    }
}
9、测试执行

启动服务后,在浏览器输入http://localhost:8001/dept/list,返回页面如下:

在这里插入图片描述
更多:
Spring cloud开发环境搭建(一)——maven依赖

Spring cloud微服务搭建(二)——pojo实体类

Spring cloud微服务搭建(四)——Spring cloud 消费方

Spring cloud微服务搭建(五)——Eureka注册服务

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值