zoukankan      html  css  js  c++  java
  • ruoyi-plus-server(一):引入Mybatis-Plus

    背景:著名开源管理系统ruoyi-vue是基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统(https://gitee.com/y_project/RuoYi-Vue)

    需求:站在巨人的肩膀上打造一个更符合自己使用习惯的管理系统

    源码:https://gitee.com/baohaipeng/ruoyi-plus-server

    方法:

       一、下载资源,项目跑起来

        1、下载地址:https://gitee.com/y_project/RuoYi-Vue.git

        2、按照官方提供的sql文件,创建数据库

        3、打开ruoyi项目修改数据库连接(application-druid.yml),修改redis等其他配置后,启动无误代表项目源码正常、数据库正常

        4、为示区别,修改包名(com.ruoyi——>com.bhp.ruoyiplus),此时不能直接启动,还需修改以下两处

         ①typeAliasesPackage

          

           ②ApplicationConfig

          

          备注:可以在这里直接改为com.bhp.ruoyiplus.project.**.mapper,也可以把这里的@MapperScan删掉,加在启动类。由于后期我想将该包发布成依赖供其他项目使用,为避免冲突,我选择删掉该处注解,在启动类上进行扫描

          

       二、引入lombok,对象代码更干净

        1、版本:1.16.10

        2、依赖

    <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
    </dependency>

     

        三、引入MP,sql操作更简便

        1、官方文档:https://mp.baomidou.com/

        2、版本:3.3.0

        3、依赖

    <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.3.0</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-extension</artifactId>
                <version>3.3.0</version>
            </dependency>

       四、project目录下新建demo模块

        1、数据库脚本

    CREATE TABLE `demo`  (
      `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
      `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `des` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
    
    INSERT INTO `demo` VALUES ('1', 'demomom', '');

        2、目录结构

               3、模块代码

         ①Demo

    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableField;
    import com.baomidou.mybatisplus.annotation.TableId;
    import com.baomidou.mybatisplus.annotation.TableName;
    import lombok.Data;
    
    
    /**
     * @ClassName Demo
     * @Description TODO
     * @Author 北海派
     * @Date 2020/5/18 19:24
     * @Version 1.0
     **/
    @Data
    @TableName("demo")
    public class Demo{
    
        @TableId(value = "id", type = IdType.UUID)
        private String id;
        @TableField("name")
        private String name;
        @TableField("des")
        private String des;
    }

          ②DemoMapper

    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.bhp.ruoyiplus.project.demo.domain.Demo;
    
    /**
     * @ClassName DemoMapper
     * @Description TODO
     * @Author 北海派
     * @Date 2020/5/18 19:30
     * @Version 1.0
     **/
    public interface DemoMapper extends BaseMapper<Demo> {
    }

          ③DemoService

    import com.baomidou.mybatisplus.extension.service.IService;
    import com.bhp.ruoyiplus.project.demo.domain.Demo;
    
    /**
     * @ClassName DemoService
     * @Description TODO
     * @Author 北海派
     * @Date 2020/5/18 19:32
     * @Version 1.0
     **/
    public interface DemoService extends IService<Demo> {
    }

            ④DemoServiceImpl

    import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    import com.bhp.ruoyiplus.project.demo.domain.Demo;
    import com.bhp.ruoyiplus.project.demo.mapper.DemoMapper;
    import com.bhp.ruoyiplus.project.demo.service.DemoService;
    import org.springframework.stereotype.Service;
    
    /**
     * @ClassName DemoServiceImpl
     * @Description TODO
     * @Author 北海派
     * @Date 2020/5/18 19:32
     * @Version 1.0
     **/
    @Service
    public class DemoServiceImpl  extends ServiceImpl<DemoMapper, Demo> implements DemoService {
    }

          ⑤DemoController

    import com.bhp.ruoyiplus.framework.web.controller.BaseController;
    import com.bhp.ruoyiplus.project.demo.domain.Demo;
    import com.bhp.ruoyiplus.project.demo.service.DemoService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @ClassName DemoController
     * @Description TODO
     * @Author 北海派
     * @Date 2020/5/18 19:22
     * @Version 1.0
     **/
    @RestController
    @RequestMapping("/demo")
    public class DemoController extends BaseController {
    
        @Autowired
        private DemoService demoService;
    
        @GetMapping()
        public Demo get(){
            Demo demo = demoService.getById("1");
            return demo;
        }
    }

         4、重启项目,用Postman获取验证码、登录获取token、访问接口,报如下错误

          

           原因:项目使用的mybatis及其相关配置MP中自带的mybatis冲突,需要排除项目中的依赖及配置

         ①修改POM文件,删除如下依赖

          

          ②修改配置文件,删除application.yml中的mybatis配置,增加MP配置      

    # MyBatis配置
    #mybatis:
    #    # 搜索指定包别名
    #    typeAliasesPackage: com.bhp.ruoyiplus.project.**.domain
    #    # 配置mapper的扫描,找到所有的mapper.xml映射文件
    #    mapperLocations: classpath*:mybatis/**/*Mapper.xml
    #    # 加载全局的配置文件
    #    configLocation: classpath:mybatis/mybatis-config.xml
    
    # MyBatis-Plus配置
    mybatis-plus:
      mapper-locations: classpath*:mybatis/**/*Mapper.xml
      #实体扫描
      typeAliasesPackage: com.bhp.ruoyiplus.project.**.domain

          ③删除MybatisConfig配置类

          

             ④重启项目,再次访问接口,响应正常

          

          ⑤修改DemoController,测试框架统一响应,与框架分页响应是否正常,经测试接口均正常

    import com.bhp.ruoyiplus.framework.web.controller.BaseController;
    import com.bhp.ruoyiplus.framework.web.domain.AjaxResult;
    import com.bhp.ruoyiplus.framework.web.page.TableDataInfo;
    import com.bhp.ruoyiplus.project.demo.domain.Demo;
    import com.bhp.ruoyiplus.project.demo.service.DemoService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @ClassName DemoController
     * @Description TODO
     * @Author 北海派
     * @Date 2020/5/18 19:22
     * @Version 1.0
     **/
    @RestController
    @RequestMapping("/demo")
    public class DemoController extends BaseController {
    
        @Autowired
        private DemoService demoService;
    
        @GetMapping()
        public AjaxResult get() {
            Demo demo = demoService.getById("1");
            if (null==demo){
                return AjaxResult.error("无数据");
            }
            return AjaxResult.success(demo);
        }
    
        @GetMapping("/list")
        public TableDataInfo getList() {
            startPage();
            return getDataTable(demoService.list());
        }
    }
    备注:因为该接口使用的是MP的内置方法,如果响应正常,说明MP已经引入成功,并且分页使用也正常。MP本身也带有分页插件,此处选择继续使用框架提供的pagehelper,目前这个地方不是很关键,后期需要时,会进行变更。
  • 相关阅读:
    跨域请求携带cookie
    vue单文件组件实例1:简单单文件组件
    vue单文件组件实例2:简单单文件组件
    vue路由1:基本使用
    项目中常用的javascript/jquery操作
    vue计算属性和侦听器
    专题8:javascript中事件
    普通文件的上传(表单上传和ajax文件异步上传)
    python导入包出错:ImportError: No module named XXXXX

  • 原文地址:https://www.cnblogs.com/java-bhp/p/12919916.html
Copyright © 2011-2022 走看看