- spring5x-dubbo-api #为service、web提供实体类和接口
- spring5x-dubbo-service #提供者
- spring5x-dubbo-web #消费者
spring5x-dubbo-api 搭建项目
dubbo_1.png1.实体类
package com.zja.model.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @author ZhengJa
* @description User 实体类
* @data 2019/10/29
*/
@Data
@ApiModel("用户信息实体类")
public class UserEntity implements Serializable {
@ApiModelProperty(value = "默认:mysql自增,oracle序列")
private Integer id;
@ApiModelProperty("用户名")
private String userName;
@ApiModelProperty("年龄")
private Integer age;
@ApiModelProperty("不传值,后台创建时间")
private Date createTime;
@ApiModelProperty("订单信息")
private List<OrdersEntity> ordersEntityList;
@ApiModelProperty("所属组信息")
private List<GroupEntity> groupEntityList;
}
实体类还有其他的,可以到github拉代码查看,此次讲述的重点时dubbo
2.api接口:为service、web提供的接口
package com.zja.service;
import com.github.pagehelper.PageInfo;
import com.zja.model.dto.UserEntityDTO;
import com.zja.model.entity.UserEntity;
import java.util.List;
/**
* @author ZhengJa
* @description
* @data 2019/11/14
*/
public interface UserService {
//静态插入数据:通用方法
int insertUser(UserEntity userEntity);
//动态插入数据: mysql用法,id自增
int insertUserMysql(UserEntity userEntity);
//动态插入数据:oracle用法,id使用序列
int insertUserOracle(UserEntity userEntity);
//mybatis批量插入数据:mysql用法,id自增
int mysqlBatchSaveUser(List<UserEntity> userEntities);
//mybatis批量插入数据:oracle用法,id使用序列
int oracleBatchSaveUser(List<UserEntity> userEntities);
//按id查询用户
UserEntityDTO queryUserById(Integer id);
//查询所有用户
List<UserEntity> queryAllUser();
//获取分页结果
List<UserEntity> getPagingResults(int pageNum, int pageSize);
//获取分页结果及分页信息
PageInfo<UserEntity> queryPageInfo(int pageNum, int pageSize);
//更新数据-改数据
int updateUser(UserEntity userEntity);
//删除数据
int delUser(Integer id);
}
spring5x-dubbo-service 搭建项目
基于spring5x-base 基础模块 新增功能:
- 1、spring集成 dubbo依赖和xml配置
项目架构:spring5.x+mybatis+druid/c3p0+mysql/oracle+dubbo
功能:spring项目启动自动执行sql文件; dozer映射功能
以下只贴dubbo有关配置和代码,本篇仅将dubbo使用。
1、spring集成 dubbo依赖和xml配置
dubboy依赖
<!--引入api接口层模块service、DTO、Entity-->
<dependency>
<groupId>com.zja</groupId>
<artifactId>spring5x-dubbo-api</artifactId>
<version>0.1.RELEASE</version>
</dependency>
<!--dubbo 依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.13</version>
</dependency>
spring-dubbo-provider.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!--定义当前应用名称,主要用于注册中心的信息保存,这个名称可以任意填写-->
<dubbo:application name="${dubbo.application.name}"/>
<!--定义dubbo注册中心的地址-->
<dubbo:registry protocol="zookeeper" address="${dubbo.registry.address}"/>
<!--定义dubbo所在服务执行时暴露给客户端的端口-->
<dubbo:protocol name="dubbo" port="${dubbo.protocol.port}"/>
<!--定义远程服务提供者操作的超时时间-->
<dubbo:provider timeout="${dubbo.provider.timeout}"/>
<!--定义dubbo远程服务的接口,声明需要暴露的服务接口
interface 定义的接口
ref Service 中对应实现类首字母小写
version是需要考虑到版本一致问题-->
<dubbo:service interface="com.zja.service.CascadeService" ref="cascadeServiceImpl" version="${dubbo.interface.version}"/>
<dubbo:service interface="com.zja.service.UserService" ref="userServiceImpl" version="${dubbo.interface.version}"/>
<!-- 和本地 bean 一样实现服务 -->
<bean id="cascadeService" class="com.zja.service.CascadeService" abstract="true"/>
<bean id="userService" class="com.zja.service.UserService" abstract="true"/>
</beans>
spring5x-dubbo-web 搭建项目
基于spring5x-base 基础模块 新增功能:
- 1、spring集成 dubbo依赖和xml配置
- 2、web层调用
- 3、项目的github和博客地址
项目架构:spring5.x+dubbo
以下只贴dubbo有关配置和代码,本篇仅将dubbo使用。
1、spring集成 dubbo依赖和xml配置
dubboy依赖
<!--引入api接口层模块service、DTO、Entity-->
<dependency>
<groupId>com.zja</groupId>
<artifactId>spring5x-dubbo-api</artifactId>
<version>0.1.RELEASE</version>
</dependency>
<!--dubbo 依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.0</version>
</dependency>
<!--默认是最新的3.5.x版本,而我版本安装zk是3.4.9,所以要用3.4.x版本,不然报异常-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.13</version>
</dependency>
spring-dubbo-consumer.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="${dubbo.application.name}"/>
<!--Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true"。-->
<!--可以关闭所有服务的启动时检查 -->
<dubbo:consumer check="false" />
<!--定义dubbo调用本地注册中心zk服务地址-->
<dubbo:registry id="local" protocol="zookeeper" address="${dubbo.local.registry.address}"/>
<!--定义dubbo调用远程注册中心zk服务地址-->
<!--<dubbo:registry id="remote" protocol="zookeeper" address="${dubbo.remote.registry.address}"/>-->
<!--定义dubbo所在服务执行时暴露给客户端的端口-->
<dubbo:protocol name="dubbo" port="${dubbo.protocol.port}"/>
<!-- 生成远程服务代理,可以和本地 bean 一样使用 Service-->
<!--本地(local)-->
<dubbo:reference registry="local" id="cascadeService" interface="com.zja.service.CascadeService" version="${dubbo.interface.version}"/>
<dubbo:reference registry="local" id="userService" interface="com.zja.service.UserService" version="${dubbo.interface.version}"/>
<!--本地(local)-->
<!--<dubbo:reference registry="local" interface="com.zja.service.CascadeService" id="bannerService"
version="${dubbo.interface.version}" check="false"/>-->
<!--远程(remote)-->
<!--<dubbo:reference registry="remote" id="permissionSupplier" interface="com.dist.dcc.security.auth.api.PermissionSupplier"
check="false" version="${dubbo.remote.interface.version}" />-->
</beans>
2、web层调用
package com.zja.controller;
import com.github.pagehelper.PageInfo;
import com.zja.model.entity.UserEntity;
import com.zja.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author ZhengJa
* @description MybatisController 测试类
* @data 2019/10/29
*/
@RestController
@RequestMapping("rest/dubbo")
@Api(tags = {"DubboMybatisController"}, description = "dubbo简单测试")
public class DubboMybatisController {
@Autowired
private UserService userService;
@PostMapping("insertUser")
@ApiOperation(value = "静态插入数据:通用方法,必须传id值且id>0", notes = "插入数据(id不自增或不使用序列,必须传id值且id>0)", httpMethod = "POST")
public int insertUser(@RequestBody UserEntity userEntity) {
return this.userService.insertUser(userEntity);
}
@PostMapping("insertUserMysql")
@ApiOperation(value = "动态插入数据: mysql用法 id自增,不传id值", notes = "插入数据(id自增,不传id值)", httpMethod = "POST")
public int insertUserMysql(@RequestParam String userName,@RequestParam Integer age) {
UserEntity userEntity = new UserEntity();
userEntity.setUserName(userName);
userEntity.setAge(age);
userEntity.setCreateTime(new Date());
return this.userService.insertUserMysql(userEntity);
}
@PostMapping("insertUserOracle")
@ApiOperation(value = "动态插入数据:oracle用法 id使用序列,不传id值", notes = "插入数据(id使用序列,不传id值)", httpMethod = "POST")
public int insertUserOracle(@RequestParam String userName,@RequestParam Integer age) {
UserEntity userEntity = new UserEntity();
userEntity.setUserName(userName);
userEntity.setAge(age);
userEntity.setCreateTime(new Date());
return this.userService.insertUserOracle(userEntity);
}
@PostMapping("mysqlBatchSaveUser")
@ApiOperation(value = "mybatis+mysql批量插入数据: mysql用法 id自增", notes = "插入数据(id自增)", httpMethod = "POST")
public int mysqlBatchSaveUser(@ApiParam(value = "count 批量插入几条",defaultValue = "5") @RequestParam Integer count) {
List<UserEntity> entityList = new ArrayList<>();
for (int i=0;i<count;i++){
UserEntity userEntity = new UserEntity();
userEntity.setUserName("Zhengja_"+i);
userEntity.setAge(20+i);
userEntity.setCreateTime(new Date());
entityList.add(userEntity);
}
return this.userService.mysqlBatchSaveUser(entityList);
}
@PostMapping("oracleBatchSaveUser")
@ApiOperation(value = "mybatis+oracle批量插入数据: oracle用法 id不使用序列", notes = "插入数据(id不能使用序列)", httpMethod = "POST")
public int oracleBatchSaveUser(@ApiParam(value = "count 批量插入几条",defaultValue = "5") @RequestParam Integer count) {
List<UserEntity> entityList = new ArrayList<>();
for (int i=0;i<count;i++){
UserEntity userEntity = new UserEntity();
//批量插入没有提交,无法获取递增的序列值,所以,oracle注意,id不能使用序列,会报异常 “违反唯一约束条件”
userEntity.setId(100+i);
userEntity.setUserName("Zhengja_"+i);
userEntity.setAge(20+i);
userEntity.setCreateTime(new Date());
entityList.add(userEntity);
}
return this.userService.oracleBatchSaveUser(entityList);
}
@GetMapping("queryUserById")
@ApiOperation(value = "按id查询用户", notes = "按id查询数据", httpMethod = "GET")
public Object queryUserById(@RequestParam Integer id) {
return this.userService.queryUserById(id);
}
@GetMapping("queryAllUser")
@ApiOperation(value = "查询所有用户", notes = "查询所有数据", httpMethod = "GET")
public List<UserEntity> queryAllUser() {
return this.userService.queryAllUser();
}
@GetMapping("getpage")
@ApiOperation(value = "获取分页结果", notes = "分页查询", httpMethod = "GET")
public List<UserEntity> getPagingResults(@ApiParam("页码值") @RequestParam int pageNum, @ApiParam("每页显示条数") @RequestParam int pageSize) {
return this.userService.getPagingResults(pageNum, pageSize);
}
@GetMapping("getpageinfo")
@ApiOperation(value = "获取分页结果及分页信息", notes = "分页查询", httpMethod = "GET")
public PageInfo<UserEntity> queryPageInfo(@ApiParam("页码值") @RequestParam int pageNum, @ApiParam("每页显示条数") @RequestParam int pageSize) {
return this.userService.queryPageInfo(pageNum, pageSize);
}
@PutMapping("updateUser")
@ApiOperation(value = "更新用户信息", notes = "更新数据-改数据", httpMethod = "PUT")
public int updateUser(@RequestBody UserEntity userEntity) {
return this.userService.updateUser(userEntity);
}
@DeleteMapping("delUser")
@ApiOperation(value = "删除数据", notes = "删除数据", httpMethod = "DELETE")
public int delUser(@RequestParam Integer id) {
return this.userService.delUser(id);
}
}
3、项目的github和简书博客地址
github:
博客:
网友评论