Browse Source

同步最新的 sql 脚本
编写 mapper 的代码模板

YunaiV 5 years ago
parent
commit
18b6dfa068

File diff suppressed because it is too large
+ 127 - 266
sql/ruoyi-vue-pro.sql


+ 14 - 0
src/main/java/cn/iocoder/dashboard/framework/mybatis/core/query/QueryWrapperX.java

@@ -44,6 +44,13 @@ public class QueryWrapperX<T> extends QueryWrapper<T> {
         return this;
     }
 
+    public QueryWrapperX<T> neIfPresent(String column, Object val) {
+        if (val != null) {
+            return (QueryWrapperX<T>) super.ne(column, val);
+        }
+        return this;
+    }
+
     public QueryWrapperX<T> gtIfPresent(String column, Object val) {
         if (val != null) {
             return (QueryWrapperX<T>) super.gt(column, val);
@@ -51,6 +58,13 @@ public class QueryWrapperX<T> extends QueryWrapper<T> {
         return this;
     }
 
+    public QueryWrapperX<T> geIfPresent(String column, Object val) {
+        if (val != null) {
+            return (QueryWrapperX<T>) super.ge(column, val);
+        }
+        return this;
+    }
+
     public QueryWrapperX<T> betweenIfPresent(String column, Object val1, Object val2) {
         if (val1 != null && val2 != null) {
             return (QueryWrapperX<T>) super.between(column, val1, val2);

+ 2 - 6
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/dept/SysDeptMapper.java

@@ -1,21 +1,17 @@
 package cn.iocoder.dashboard.modules.system.dal.mysql.dao.dept;
 
+import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX;
 import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptListReqVO;
 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.Date;
 import java.util.List;
 
 @Mapper
-public interface SysDeptMapper extends BaseMapper<SysDeptDO> {
-
-    default List<SysDeptDO> selectList() {
-        return selectList(new QueryWrapper<>());
-    }
+public interface SysDeptMapper extends BaseMapperX<SysDeptDO> {
 
     default List<SysDeptDO> selectList(SysDeptListReqVO reqVO) {
         return selectList(new QueryWrapperX<SysDeptDO>().likeIfPresent("name", reqVO.getName())

+ 0 - 4
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/dict/SysDictDataMapper.java

@@ -31,10 +31,6 @@ public interface SysDictDataMapper extends BaseMapperX<SysDictDataDO> {
                 .orderByAsc("dict_type", "sort"));
     }
 
-    default List<SysDictDataDO> selectList() {
-        return selectList(new QueryWrapper<>());
-    }
-
     default List<SysDictDataDO> selectList(SysDictDataExportReqVO reqVO) {
         return selectList(new QueryWrapperX<SysDictDataDO>().likeIfPresent("label", reqVO.getLabel())
                         .likeIfPresent("dict_type", reqVO.getDictType())

+ 0 - 5
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/dict/SysDictTypeMapper.java

@@ -6,7 +6,6 @@ import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX;
 import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeExportReqVO;
 import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypePageReqVO;
 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictTypeDO;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
@@ -37,8 +36,4 @@ public interface SysDictTypeMapper extends BaseMapperX<SysDictTypeDO> {
         return selectOne(new QueryWrapperX<SysDictTypeDO>().eq("name", name));
     }
 
-    default List<SysDictTypeDO> selectList() {
-        return selectList(new QueryWrapper<>());
-    }
-
 }

+ 27 - 5
src/main/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenEngine.java

@@ -3,9 +3,12 @@ package cn.iocoder.dashboard.modules.tool.service.codegen.impl;
 import cn.hutool.extra.template.TemplateConfig;
 import cn.hutool.extra.template.TemplateEngine;
 import cn.hutool.extra.template.TemplateUtil;
+import cn.iocoder.dashboard.common.pojo.PageResult;
 import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
+import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX;
 import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolCodegenColumnDO;
 import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolCodegenTableDO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.springframework.stereotype.Component;
 
 import java.util.HashMap;
@@ -27,22 +30,41 @@ public class ToolCodegenEngine {
      * 模板引擎,由 hutool 实现
      */
     private final TemplateEngine templateEngine;
+    /**
+     * 全局通用变量映射
+     */
+    private final Map<String, Object> globalBindingMap = new HashMap<>();
 
     public ToolCodegenEngine() {
+        // 初始化 TemplateEngine 属性
         TemplateConfig config = new TemplateConfig();
         config.setResourceMode(TemplateConfig.ResourceMode.CLASSPATH);
         this.templateEngine = TemplateUtil.createEngine(config);
+        // 初始化基础 bindingMap
+        initGlobalBindingMap();
+    }
+
+    private void initGlobalBindingMap() {
+        // 全局配置
+        globalBindingMap.put("basePackage", "cn.iocoder.dashboard.modules"); // TODO 基础包
+        // 全局 Java Bean
+        globalBindingMap.put("pageResultClassName", PageResult.class.getName());
+        // DO 类,独有字段
+        globalBindingMap.put("baseDOFields", ToolCodegenBuilder.BASE_DO_FIELDS);
+        globalBindingMap.put("baseDOClassName", BaseDO.class.getName());
+        globalBindingMap.put("QueryWrapperClassName", QueryWrapperX.class.getName());
+        globalBindingMap.put("BaseMapperClassName", BaseMapper.class.getName());
     }
 
     public void execute(ToolCodegenTableDO table, List<ToolCodegenColumnDO> columns) {
+        // 创建 bindingMap
         Map<String, Object> bindingMap = new HashMap<>();
         bindingMap.put("table", table);
         bindingMap.put("columns", columns);
-        bindingMap.put("basePackage", "cn.iocoder.dashboard.modules"); // TODO 基础包
-        // DO 类,独有字段
-        bindingMap.put("baseDOFields", ToolCodegenBuilder.BASE_DO_FIELDS);
-        bindingMap.put("baseDOClassName", BaseDO.class.getName());
-        String result = templateEngine.getTemplate("codegen/dal/do.vm").render(bindingMap);
+        bindingMap.putAll(globalBindingMap);
+        // 执行生成
+//        String result = templateEngine.getTemplate("codegen/dal/do.vm").render(bindingMap);
+        String result = templateEngine.getTemplate("codegen/dal/mapper.vm").render(bindingMap);
         System.out.println(result);
     }
 

+ 42 - 0
src/main/resources/codegen/dal/mapper.vm

@@ -0,0 +1,42 @@
+package ${basePackage}.${table.moduleName}.dal.mysql.dao.${table.businessName};
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import ${pageResultClassName};
+import ${QueryWrapperClassName};
+import ${BaseMapperClassName};
+import ${basePackage}.${table.moduleName}.dal.mysql.dataobject.${table.businessName}DO;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ${table.className}Mapper extends BaseMapperX<${table.className}DO> {
+
+    default PageResult<${table.className}DO> selectPage(${table.className}PageReqVO reqVO) {
+        return selectPage(reqVO, new QueryWrapperX<${table.className}DO>()
+#foreach ($column in $columns)
+#if (${column.listOperation})
+#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写
+#if (${column.listOperationCondition} == "=")##情况一,= 的时候
+            .eqIfPresent("${column.column_name}", reqVO.get${JavaField}())
+#end
+#if (${column.listOperationCondition} == "!=")##情况二,!= 的时候
+            .neIfPresent("${column.column_name}", reqVO.get${JavaField}())
+#end
+#if (${column.listOperationCondition} == ">")##情况三,> 的时候
+        .gtIfPresent("${column.column_name}", reqVO.get${JavaField}())
+#end
+#if (${column.listOperationCondition} == ">=")##情况四,>= 的时候
+        .geIfPresent("${column.column_name}", reqVO.get${JavaField}())
+#end
+#if (${column.listOperationCondition} == "<")##情况五,< 的时候
+        .gtIfPresent("${column.column_name}", reqVO.get${JavaField}())
+#end
+#if (${column.listOperationCondition} == "<=")##情况六,<= 的时候
+        .geIfPresent("${column.column_name}", reqVO.get${JavaField}())
+#end
+#end
+#end
+        );
+    }
+
+}