springBoot+dubbo整合MyBatis-Plus - 脚手架系列(二)

MyBatis-Plus是一个Mybatis增强版工具,在MyBatis上扩充了其它功能没有改变基本功能,也就是只做封装增强不做改变,为了简化开发提交效率而存在,不需要写XML等sql语句就可实现。

1、简述

        项目整体结构:

        springBoot+dubbo整合MyBatis-Plus - 脚手架系列(二)_第1张图片 

        本文基于脚手架系列第一篇的基础上进行改造整合,有需要的同学可以根据需求自取:

        Idea创建springBoot+dubbo脚手架(dubo+nacos)- 脚手架系列(一)

        本文是脚手架系列的第二篇,有兴趣的同学可以进入导航页进行学习:

        从零开始duboo脚手架搭建

2、 脚本准备

CREATE TABLE
    USER
    (
        id INT NOT NULL AUTO_INCREMENT COMMENT '用户编号',
        username VARCHAR(64) COLLATE utf8mb4_bin COMMENT '账号',
        password VARCHAR(32) COLLATE utf8mb4_bin COMMENT '密码',
        create_time DATETIME COMMENT '创建时间',
        deleted bit COMMENT '是否删除。0-未删除;1-删除',
        PRIMARY KEY (id),
        CONSTRAINT idx_username UNIQUE (username)
    )
    ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

3、整合MyBatis-Plus

        我们需要分别对dubbo-apidubbo-providedubbo-consumer

        dubbo-api: 公共服务接口

        dubbo-provide: 服务提供者

        dubbo-consumer: 服务消费者

3.1 dubbo-api改造

springBoot+dubbo整合MyBatis-Plus - 脚手架系列(二)_第2张图片

 dubbo-api这边主要加上我们对接的测试接口和数据库实体就可

pom



    4.0.0
    com.dubboscaffold
    dubbo-api
    0.0.1-SNAPSHOT
    dubbo-api
    Demo project for Spring Boot

    
        1.8
        UTF-8
        UTF-8
        2.3.7.RELEASE
    

    
    
        com.dubboscaffold
        dubboparent
        0.0.1-SNAPSHOT
        ../pom.xml
    

    

        
            org.projectlombok
            lombok
            1.16.10
            provided
        

        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.2.0
        

        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        

    

在上一篇的基础上引入了 lombok 和 mybatis-plus-boot-starter。

UserService

public interface UserService {

    User selectByUsername(String username);

    List selectByIds(Collection ids);

    IPage selectPageByCreateTime(IPage page, String createTime);

    void insertUser(User user);
}

User

@Data
@TableName(value = "user")
public class User implements Serializable {

    /**
     * 用户编号
     */
    private Integer id;
    /**
     * 账号
     */
    private String username;
    /**
     * 密码(明文)
     *
     * ps:生产环境下,千万不要明文噢
     */
    private String password;
    /**
     * 创建时间
     */
    private Date createTime;
    /**
     * 是否删除
     */
    @TableLogic
    private Integer deleted;
}

 @TableLogic 注解,设置该字段为逻辑删除的标记。

3.2 dubbo-provide改造

springBoot+dubbo整合MyBatis-Plus - 脚手架系列(二)_第3张图片

 dubbo-provide这边涉及到了数据库的连接,需要改造的地方会比其他模块相对多些

pom



    4.0.0
    com.dubboscaffold
    dubbo-provider
    0.0.1-SNAPSHOT
    dubbo-provider
    Demo project for Spring Boot

    
        1.8
        UTF-8
        UTF-8
        2.3.7.RELEASE
    

    
    
        com.dubboscaffold
        dubboparent
        0.0.1-SNAPSHOT
        ../pom.xml
    

    

        
        
            com.dubboscaffold
            dubbo-api
            0.0.1-SNAPSHOT
        

        
            org.projectlombok
            lombok
            1.16.10
            provided
        

        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
         
            mysql
            mysql-connector-java
            5.1.48
        

        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.2.0
        

        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
        
            com.alibaba.cloud
            spring-cloud-starter-dubbo
        

        
        
            org.apache.dubbo
            dubbo
            2.7.4.1
        
        
            org.apache.dubbo
            dubbo-spring-boot-starter
            2.7.4.1
        

        
        
            com.alibaba.nacos
            nacos-client
            1.2.1
        
        
            org.apache.dubbo
            dubbo-registry-nacos
            2.7.4.1
        

        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
    


DubboProviderApplication

@SpringBootApplication
@MapperScan(basePackages = "com.dubboscaffold.dubboprovider.mapper")
public class DubboProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }

}

启动类需要加上MapperScan,扫描对应 Mapper 接口所在的包路径

application.yml

server:
  port: 8081
  # datasource 数据源配置内容
spring:
  application:
    name: dubbo-provider
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/dubbo_master?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: root

# mybatis-plus 配置内容
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。
  global-config:
    db-config:
      id-type: auto # ID 主键自增
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
  mapper-locations: classpath*:mapper/*.xml
  type-aliases-package: com.dubboscaffold.dubboapi.entity

# logging
logging:
  level:
    # dao 开启 debug 模式 mybatis 输入 sql
    cn:
      iocoder:
        springboot:
          lab12:
            mybatis:
              mapper: debug

# dubbo 配置项,对应 DubboConfigurationProperties 配置类
dubbo:
  # Dubbo 应用配置
  application:
    name: user-service-provider # 应用名
  # Dubbo 注册中心配
  registry:
    address: nacos://192.168.160.128:8848 # 注册中心地址
  # Dubbo 服务提供者协议配置
  protocol:
    port: -1 # 协议端口。使用 -1 表示随机端口。
    name: dubbo # 使用 `dubbo://` 协议。更多协议,可见 http://dubbo.apache.org/zh-cn/docs/user/references/protocol/introduction.html 文档
  # Dubbo 服务提供者配置
  provider:
    timeout: 1000 # 【重要】远程服务调用超时时间,单位:毫秒。默认为 1000 毫秒
    TestService:
      version: 1.0.0
  # 配置扫描 Dubbo 自定义的 @Service 注解,暴露成 Dubbo 服务提供者
  scan:
    base-packages: com.dubboscaffold.dubboprovider.service.impl

本次新增数据源datasource、mybatis-plus配置、logging日志输出

UserMapper

@Repository
public interface UserMapper extends BaseMapper {

    //使用QueryWrapper构造相对灵活的条件,可以避免一些动态Sql的编写
    default User selectByUsername(@Param("username") String username) {
        return selectOne(new QueryWrapper().eq("username", username));
    }

    List selectByIds(@Param("ids") Collection ids);

    //演示分页组件
    default IPage selectPageByCreateTime(IPage page, @Param("createTime") String createTime) {
        return selectPage(page,
                new QueryWrapper().gt("create_time", createTime));
    }

}

 Mapper的接口名必须与xml对应上

UserMapper.xml




    
        id, username, password, create_time
    

    

要对应上UserMapper的路径地址 

UserServiceImpl

@Component
@Service(timeout = 10000)
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public User selectByUsername(String username) {
        return userMapper.selectByUsername(username);
    }

    @Override
    public List selectByIds(Collection ids) {
        return userMapper.selectByIds(ids);
    }

    @Override
    public IPage selectPageByCreateTime(IPage page, String createTime) {
        return userMapper.selectPageByCreateTime(page,createTime);
    }

    @Override
    public void insertUser(User user) {
        userMapper.insert(user);
    }


}
@Service(timeout = 10000)设置接口超时时间

 3.3 dubbo-consumer改造

springBoot+dubbo整合MyBatis-Plus - 脚手架系列(二)_第4张图片

 dubbo-consumer消费者这边只需要新增一个controller就行

pom



    4.0.0
    com.dubboscaffold
    dubbo-consumer
    0.0.1-SNAPSHOT
    dubbo-consumer
    Demo project for Spring Boot

    
        1.8
        UTF-8
        UTF-8
        2.3.7.RELEASE
    

    
    
        com.dubboscaffold
        dubboparent
        0.0.1-SNAPSHOT
        ../pom.xml
    

    

        
        
            com.dubboscaffold
            dubbo-api
            0.0.1-SNAPSHOT
        

        
            org.springframework.boot
            spring-boot-starter-web
            2.5.5
        

        
        
            org.springframework.boot
            spring-boot-starter
        

        
        
            org.apache.dubbo
            dubbo
            2.7.4.1
        
        
            org.apache.dubbo
            dubbo-spring-boot-starter
            2.7.4.1
        

        
        
            com.alibaba.nacos
            nacos-client
            1.2.1
        
        
            org.apache.dubbo
            dubbo-registry-nacos
            2.7.4.1
        

    


application.yml

spring:
  application:
    name: dubbo-consumer
server:
  port: 8082

# dubbo 配置项,对应 DubboConfigurationProperties 配置类
dubbo:
  # Dubbo 应用配置
  application:
    name: user-service-consumer # 应用名
  # Dubbo 注册中心配置
  registry:
    address: nacos://192.168.160.128:8848 # 注册中心地址
  # Dubbo 消费者配置
  consumer:
    timeout: 1000 # 【重要】远程服务调用超时时间,单位:毫秒。默认为 1000 毫秒
    TestService:
      version: 1.0.0

UserController

@RestController
@RequestMapping("/user")
public class UserController {

    @Reference
    private UserService userService;

    @RequestMapping("/insertDemo")
    public void insertUser(){
        User user = new User();
        user.setUsername(UUID.randomUUID().toString());
        user.setPassword("123");
        user.setCreateTime(new Date());
        user.setDeleted(0);
        userService.insertUser(user);
    }

    @RequestMapping("/selectByUsername")
    public User selectByUsername(String username){
        return userService.selectByUsername(username);
    }

    @RequestMapping("/selectByIds")
    public List selectByIds(String ids){
        String[] idArr = ids.split(",");
        List list = Arrays.asList(idArr);
        return userService.selectByIds(list);
    }

    @RequestMapping("/selectPageByCreateTime")
    public IPage selectPageByCreateTime(int currentPage,int pageSize,String createTime){
        //int currentPage = 1; //当前页数:显示第一页数据
        //Integer pageSize = 2;    //每页显示多少:每页显示2条数据
        Page page = new Page(currentPage,pageSize);
        return userService.selectPageByCreateTime(page,createTime);
    }

}

4、项目启动

分别先后启动dubbo-provide,dubbo-consumer

通过postman访问/user/insertDemo接口进行数据添加,如果没有报错就是新增成功了

http://127.0.0.1:8082/user/insertDemo

springBoot+dubbo整合MyBatis-Plus - 脚手架系列(二)_第5张图片

 有了数据后可通过/user/selectPageByCreateTime进行分页查询

springBoot+dubbo整合MyBatis-Plus - 脚手架系列(二)_第6张图片

 剩下的根据id和用户名进行查询的接口大家可以自己试试看,这样子整合MyBatis-Plus就算完成。

你可能感兴趣的:(分布式脚手架搭建,分布式,mysql)