EasyCode是什么

  • 基于IntelliJ IDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml)
  • 只要是与数据库相关的代码都可以通过自定义模板来生成。支持数据库类型与java类型映射关系配置。
  • 支持同时生成生成多张表的代码。每张表有独立的配置信息。完全的个性化定义,规则由你设置。
  • 可以直接对数据的表生成entity、controller、service、dao、mapper无需任何编码

    安装EasyCode插件

    IDEA插件EasyCode 一键生成entity、controller、service、dao、mapper(没有社区版本) - 图1

这里使用引入外部插件的方式。首先下载EasyCode插件,下载地址:
https://plugins.jetbrains.com/plugin/10954-easy-code/versions

我的百度云下载地址
链接:https://pan.baidu.com/s/1KupEaa3SXUaA5vhnL-glYA
提取码:r43x

接着:
image.png

在IDEA配置连接数据库

新建一个springboot项目,接着如下图:
IDEA插件EasyCode 一键生成entity、controller、service、dao、mapper(没有社区版本) - 图3

url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&serverTimezone=GMT%2B8

image.png

开始生成代码

IDEA插件EasyCode 一键生成entity、controller、service、dao、mapper(没有社区版本) - 图5
IDEA插件EasyCode 一键生成entity、controller、service、dao、mapper(没有社区版本) - 图6
完成了代码的生成,其结构如下:

IDEA插件EasyCode 一键生成entity、controller、service、dao、mapper(没有社区版本) - 图7

pom.xml文件

  1. <properties>
  2. <java.version>1.8</java.version>
  3. <mybatis-plus-spring-boot-starter.version>3.3.2</mybatis-plus-spring-boot-starter.version>
  4. <mybatisplus.version>2.1.4</mybatisplus.version>
  5. <druid.version>1.1.10</druid.version>
  6. </properties>
  7. <dependencies>
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-web</artifactId>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.springframework.boot</groupId>
  14. <artifactId>spring-boot-starter-test</artifactId>
  15. </dependency>
  16. <!--lombok 用来简化实体类-->
  17. <dependency>
  18. <groupId>org.projectlombok</groupId>
  19. <artifactId>lombok</artifactId>
  20. </dependency>
  21. <dependency>
  22. <groupId>com.baomidou</groupId>
  23. <artifactId>mybatis-plus-boot-starter</artifactId>
  24. <version>${mybatis-plus-spring-boot-starter.version}</version>
  25. </dependency>
  26. <!-- 数据库MySQL驱动依赖 -->
  27. <dependency>
  28. <groupId>mysql</groupId>
  29. <artifactId>mysql-connector-java</artifactId>
  30. <scope>runtime</scope>
  31. </dependency>
  32. <!--阿里Druid连接池集成SpringBoot起步依赖-->
  33. <dependency>
  34. <groupId>com.alibaba</groupId>
  35. <artifactId>druid-spring-boot-starter</artifactId>
  36. <version>${druid.version}</version>
  37. </dependency>
  38. <!-- 不增加引依赖:报错Failed to bind properties under 'spring.datasource' to javax.sql.DataSource-->
  39. <dependency>
  40. <groupId>org.slf4j</groupId>
  41. <artifactId>log4j-over-slf4j</artifactId>
  42. <version>1.7.26</version>
  43. </dependency>
  44. </dependencies>

application.yml文件

  1. server:
  2. port: 9001
  3. spring:
  4. datasource:
  5. driver-class-name: com.mysql.cj.jdbc.Driver
  6. url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&serverTimezone=GMT%2B8
  7. username: shenguangyang
  8. password: test12345678
  9. # 使用我们自己的druid数据源
  10. type: com.alibaba.druid.pool.DruidDataSource
  11. druid:
  12. initialSize: 10 #初始化连接个数
  13. minIdle: 5 #最小连接个数
  14. maxActive: 500 #最大连接个数
  15. maxWait: 60000 #最大等待时间
  16. timeBetweenEvictionRunsMillis: 60000
  17. minEvictableIdleTimeMillis: 900000
  18. validationQuery: SELECT 1 FROM DUAL
  19. testWhileIdle: true
  20. testOnBorrow: false
  21. testOnReturn: false
  22. poolPreparedStatements: true
  23. # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
  24. filters: stat,wall,log4j
  25. maxPoolPreparedStatementPerConnectionSize: 20
  26. useGlobalDataSourceStat: true
  27. connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
  28. mybatis-plus:
  29. # 扫描mapper.xml文件
  30. mapper-locations: classpath:/mapper/*Mapper.xml
  31. # 扫描实体类
  32. # typeAliasesPackage: com.example.springbootmybatisplus.entity
  33. # 主键类型
  34. global-config:
  35. #0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
  36. id-type: 0
  37. #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
  38. field-strategy: 0
  39. #驼峰下划线转换
  40. db-column-underline: true
  41. #刷新mapper 调试神器
  42. refresh-mapper: true
  43. # 数据库大写下划线转换
  44. #capital-mode: true
  45. #自定义SQL注入器
  46. configuration:
  47. map-underscore-to-camel-case: true
  48. cache-enabled: true
  49. # mybatis-plus配置控制台打印完整带参数SQL语句
  50. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

启动项目

在启动类加上@MapperScan(“com.example.demo.dao”)注解

IDEA插件EasyCode 一键生成entity、controller、service、dao、mapper(没有社区版本) - 图8

分享几个我常用的自定义模板

这种情况下生成的代码是比较原始的代码,通常不能满足我们的要求,因为我们项目中可能使用了一些其他框架,并且做了扩展,这时候就需要我们自定义模板来生成我们想要的代码。

首先打开Settings,找到Easy Code的设置,如下图所示
image.png
我只写了几个比较常用的功能, 其他具体业务可以根据自己需求添加, 以下模版支持以下几个方法

注意: 参数个人习惯用实体类, 比如User,需要一个id, 前台直接传{id:“123”}后台用User接收, 调用的时候就是user.getId()

Controller支持的方法

  • 分页查询
  • 查询全部

Dao, Service, ServiceImpl, Mapper支持的方法

  • 分页查询
  • 根据实体类查询
  • 查询全部
  • 数据总数的查询

    Controller层模板

    ```java

    定义初始变量

    set($tableName = $tool.append($tableInfo.name, “Controller”))

    设置回调

    $!callback.setFileName($tool.append($tableName, “.java”)) $!callback.setSavePath($tool.append($tableInfo.savePath, “/controller”))

    拿到主键

    if(!$tableInfo.pkColumn.isEmpty())

    set($pk = $tableInfo.pkColumn.get(0))

    end

if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}controller;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name}; import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service; import org.springframework.web.bind.annotation.*; import com.rambler.core.door.Response; import java.util.List;

import javax.annotation.Resource;

/**

  • $!{tableInfo.comment}($!{tableInfo.name})控制层 *
  • @author $!author
  • @since $!time.currTime() / @RestController @RequestMapping(“/$!tool.firstLowerCase($tableInfo.name)”) public class $!{tableName} { /*

    • 服务对象 */ @Resource private $!{tableInfo.name}Service $!tool.firstLowerCase($tableInfo.name)Service;

      /**

    • 通过主键查询单条数据 *
    • @param $!tool.firstLowerCase($tableInfo.name) 参数对象
    • @return 单条数据 */ @RequestMapping(value = “get”, method = RequestMethod.GET) public Response<$tableInfo.name> selectOne($tableInfo.name $!tool.firstLowerCase($tableInfo.name)) { $tableInfo.name result = $!{tool.firstLowerCase($tableInfo.name)}Service.selectById($!{tool.firstLowerCase($tableInfo.name)}.getId()); if(result != null){

      1. Response.createSuccessResponse("查询成功", result);

      } return Response.createErrorResponse(“查询失败”); }

      /**

    • 新增一条数据 *
    • @param $!tool.firstLowerCase($tableInfo.name) 实体类
    • @return Response对象 */ @RequestMapping(value = “insert”, method = RequestMethod.POST) public Response<$tableInfo.name> insert(@RequestBody $tableInfo.name $!tool.firstLowerCase($tableInfo.name)) { int result = $!{tool.firstLowerCase($tableInfo.name)}Service.insert($!tool.firstLowerCase($tableInfo.name)); if (result > 0) {

      1. Response.createSuccessResponse("新增成功", $!tool.firstLowerCase($tableInfo.name));

      } return Response.createErrorResponse(“新增失败”); }

      /**

    • 修改一条数据 *
    • @param $!tool.firstLowerCase($tableInfo.name) 实体类
    • @return Response对象 */ @RequestMapping(value = “update”, method = RequestMethod.PUT) public Response<$tableInfo.name> update(@RequestBody $tableInfo.name $!tool.firstLowerCase($tableInfo.name)) { $tableInfo.name result = $!{tool.firstLowerCase($tableInfo.name)}Service.update($!tool.firstLowerCase($tableInfo.name)); if (result != null) {

      1. Response.createSuccessResponse("修改成功", result);

      } return Response.createErrorResponse(“修改失败”); }

      /**

    • 删除一条数据 *
    • @param $!tool.firstLowerCase($tableInfo.name) 参数对象
    • @return Response对象 */ @RequestMapping(value = “delete”, method = RequestMethod.DELETE) public Response<$tableInfo.name> delete($tableInfo.name $!tool.firstLowerCase($tableInfo.name)) { int result = $!{tool.firstLowerCase($tableInfo.name)}Service.deleteById($!{tool.firstLowerCase($tableInfo.name)}.getId()); if (result > 0) {

      1. Response.createSuccessResponse("删除成功", null);

      } return Response.createErrorResponse(“删除失败”); }

      /**

    • 查询全部 *
    • @return Response对象 */ @RequestMapping(value = “selectAll”, method = RequestMethod.GET) public Response> selectAll() { List<$tableInfo.name> $!tool.firstLowerCase($tableInfo.name)s = $!{tool.firstLowerCase($tableInfo.name)}Service.selectAll(); if ($!tool.firstLowerCase($tableInfo.name)s != null) {

      1. Response.createSuccessResponse("查询成功", $!tool.firstLowerCase($tableInfo.name)s);

      } return Response.createErrorResponse(“查询失败”); }

      /**

    • 分页查询 *
    • @param start 偏移
    • @param limit 条数
    • @return Response对象 */ @RequestMapping(value = “selectPage”, method = RequestMethod.GET) public Response<$tableInfo.name> selectPage(Integer start, Integer limit) { List<$tableInfo.name> $!tool.firstLowerCase($tableInfo.name)s = $!{tool.firstLowerCase($tableInfo.name)}Service.selectPage(start, limit); if ($!tool.firstLowerCase($tableInfo.name)s != null) {
      1. Response.createSuccessResponse("查询成功", $!tool.firstLowerCase($tableInfo.name)s);
      } return Response.createErrorResponse(“查询失败”); }

}

  1. ```java
  2. @Override
  3. public int batchInsert(List<Article> articles) {
  4. return 0;
  5. }
  6. @Override
  7. public int update(Article article) {
  8. return 0;
  9. }
  10. @Override
  11. public int deleteById(Integer id) {
  12. return 0;
  13. }

Dao层模版

  1. ##定义初始变量
  2. #set($tableName = $tool.append($tableInfo.name, "Dao"))
  3. ##设置回调
  4. $!callback.setFileName($tool.append($tableName, ".java"))
  5. $!callback.setSavePath($tool.append($tableInfo.savePath, "/dao"))
  6. ##拿到主键
  7. #if(!$tableInfo.pkColumn.isEmpty())
  8. #set($pk = $tableInfo.pkColumn.get(0))
  9. #end
  10. #if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}dao;
  11. import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
  12. import org.apache.ibatis.annotations.Param;
  13. import java.util.List;
  14. import java.util.Map;
  15. /**
  16. * $!{tableInfo.comment}($!{tableInfo.name})表数据库访问层
  17. *
  18. * @author $!author
  19. * @since $!time.currTime()
  20. */
  21. public interface $!{tableName} {
  22. /**
  23. * 通过ID查询单条数据
  24. *
  25. * @param $!pk.name 主键
  26. * @return 实例对象
  27. */
  28. $!{tableInfo.name} selectById($!pk.shortType $!pk.name);
  29. /**
  30. * 分页查询
  31. *
  32. * @param start 查询起始位置
  33. * @param limit 查询条数
  34. * @return 对象列表
  35. */
  36. List<$!{tableInfo.name}> selectPage(@Param("start") int start, @Param("limit") int limit);
  37. /**
  38. * 查询全部
  39. *
  40. * @return 对象列表
  41. */
  42. List<$!{tableInfo.name}> selectAll();
  43. /**
  44. * 通过实体作为筛选条件查询
  45. *
  46. * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
  47. * @return 对象列表
  48. */
  49. List<$!{tableInfo.name}> selectList($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
  50. /**
  51. * 新增数据
  52. *
  53. * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
  54. * @return 影响行数
  55. */
  56. int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
  57. /**
  58. * 批量新增
  59. *
  60. * @param $!tool.firstLowerCase($!{tableInfo.name})s 实例对象的集合
  61. * @return 影响行数
  62. */
  63. int batchInsert(List<$!{tableInfo.name}> $!tool.firstLowerCase($!{tableInfo.name})s);
  64. /**
  65. * 修改数据
  66. *
  67. * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
  68. * @return 影响行数
  69. */
  70. int update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
  71. /**
  72. * 通过主键删除数据
  73. *
  74. * @param $!pk.name 主键
  75. * @return 影响行数
  76. */
  77. int deleteById($!pk.shortType $!pk.name);
  78. /**
  79. * 查询总数据数
  80. *
  81. * @return 数据总数
  82. */
  83. int count();
  84. }

Entity层模板

支持字段 + get&set + toString


  1. ##引入宏定义
  2. $!define
  3. ##使用宏定义设置回调(保存位置与文件后缀)
  4. #save("/entity", ".java")
  5. ##使用宏定义设置包后缀
  6. #setPackageSuffix("entity")
  7. ##使用全局变量实现默认包导入
  8. $!autoImport
  9. import java.io.Serializable;
  10. ##使用宏定义实现类注释信息
  11. #tableComment("实体类")
  12. public class $!{tableInfo.name} implements Serializable {
  13. private static final long serialVersionUID = $!tool.serial();
  14. #foreach($column in $tableInfo.fullColumn)
  15. #if(${column.comment})/**
  16. * ${column.comment}
  17. */#end
  18. private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
  19. #end
  20. #foreach($column in $tableInfo.fullColumn)
  21. ##使用宏定义实现get,set方法
  22. #getSetMethod($column)
  23. #end
  24. @Override
  25. public String toString(){
  26. return "$tableInfo.name {" +
  27. #foreach($column in $tableInfo.fullColumn)
  28. "$column.name : " + $column.name + ", " +
  29. #end
  30. '}';
  31. }
  32. }

Service层模版

  1. ##定义初始变量
  2. #set($tableName = $tool.append($tableInfo.name, "Service"))
  3. ##设置回调
  4. $!callback.setFileName($tool.append($tableName, ".java"))
  5. $!callback.setSavePath($tool.append($tableInfo.savePath, "/service"))
  6. ##拿到主键
  7. #if(!$tableInfo.pkColumn.isEmpty())
  8. #set($pk = $tableInfo.pkColumn.get(0))
  9. #end
  10. #if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service;
  11. import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
  12. import java.util.List;
  13. import java.util.Map;
  14. /**
  15. * $!{tableInfo.comment}($!{tableInfo.name})表服务接口
  16. *
  17. * @author $!author
  18. * @since $!time.currTime()
  19. */
  20. public interface $!{tableName} {
  21. /**
  22. * 通过ID查询单条数据
  23. *
  24. * @param $!pk.name 主键
  25. * @return 实例对象
  26. */
  27. $!{tableInfo.name} selectById($!pk.shortType $!pk.name);
  28. /**
  29. * 分页查询
  30. *
  31. * @param start 查询起始位置
  32. * @param limit 查询条数
  33. * @return 对象列表
  34. */
  35. List<$!{tableInfo.name}> selectPage(int start, int limit);
  36. /**
  37. * 查询全部
  38. *
  39. * @return 对象列表
  40. */
  41. List<$!{tableInfo.name}> selectAll();
  42. /**
  43. * 通过实体作为筛选条件查询
  44. *
  45. * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
  46. * @return 对象列表
  47. */
  48. List<$!{tableInfo.name}> selectList($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
  49. /**
  50. * 新增数据
  51. *
  52. * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
  53. * @return 影响行数
  54. */
  55. int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
  56. /**
  57. * 批量新增
  58. *
  59. * @param $!tool.firstLowerCase($!{tableInfo.name})s 实例对象的集合
  60. * @return 影响行数
  61. */
  62. int batchInsert(List<$!{tableInfo.name}> $!tool.firstLowerCase($!{tableInfo.name})s);
  63. /**
  64. * 修改数据
  65. *
  66. * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
  67. * @return 修改
  68. */
  69. $!{tableInfo.name} update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
  70. /**
  71. * 通过主键删除数据
  72. *
  73. * @param $!pk.name 主键
  74. * @return 影响行数
  75. */
  76. int deleteById($!pk.shortType $!pk.name);
  77. /**
  78. * 查询总数据数
  79. *
  80. * @return 数据总数
  81. */
  82. int count();
  83. }

ServiceImpl模版

  1. ##定义初始变量
  2. #set($tableName = $tool.append($tableInfo.name, "ServiceImpl"))
  3. ##设置回调
  4. $!callback.setFileName($tool.append($tableName, ".java"))
  5. $!callback.setSavePath($tool.append($tableInfo.savePath, "/service/impl"))
  6. ##拿到主键
  7. #if(!$tableInfo.pkColumn.isEmpty())
  8. #set($pk = $tableInfo.pkColumn.get(0))
  9. #end
  10. #if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service.impl;
  11. import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
  12. import $!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Dao;
  13. import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
  14. import org.springframework.stereotype.Service;
  15. import javax.annotation.Resource;
  16. import java.util.List;
  17. import java.util.Map;
  18. /**
  19. * $!{tableInfo.comment}($!{tableInfo.name}表)服务实现类
  20. *
  21. * @author $!author
  22. * @since $!time.currTime()
  23. */
  24. @Service("$!tool.firstLowerCase($!{tableInfo.name})Service")
  25. public class $!{tableName} implements $!{tableInfo.name}Service {
  26. @Resource
  27. private $!{tableInfo.name}Dao $!tool.firstLowerCase($!{tableInfo.name})Dao;
  28. /**
  29. * 通过ID查询单条数据
  30. *
  31. * @param $!pk.name 主键
  32. * @return 实例对象
  33. */
  34. @Override
  35. public $!{tableInfo.name} selectById($!pk.shortType $!pk.name) {
  36. return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.selectById($!pk.name);
  37. }
  38. /**
  39. * 分页查询
  40. *
  41. * @param start 查询起始位置
  42. * @param limit 查询条数
  43. * @return 对象列表
  44. */
  45. @Override
  46. public List<$!{tableInfo.name}> selectPage(int start, int limit) {
  47. return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.selectPage(start, limit);
  48. }
  49. /**
  50. * 查询所有
  51. *
  52. * @return 实例对象的集合
  53. */
  54. @Override
  55. public List<$!{tableInfo.name}> selectAll() {
  56. return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.selectAll();
  57. }
  58. /**
  59. * 根据条件查询
  60. *
  61. * @return 实例对象的集合
  62. */
  63. @Override
  64. public List<$!{tableInfo.name}> selectList($!{tableInfo.name} $!{tool.firstLowerCase($!{tableInfo.name})}) {
  65. return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.selectList($!{tool.firstLowerCase($!{tableInfo.name})});
  66. }
  67. /**
  68. * 新增数据
  69. *
  70. * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
  71. * @return 实例对象
  72. */
  73. @Override
  74. public int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
  75. return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.insert($!tool.firstLowerCase($!{tableInfo.name}));
  76. }
  77. /**
  78. * 批量新增
  79. *
  80. * @param $!tool.firstLowerCase($!{tableInfo.name})s 实例对象的集合
  81. * @return 生效的条数
  82. */
  83. @Override
  84. public int batchInsert(List<$!{tableInfo.name}> $!tool.firstLowerCase($!{tableInfo.name})s) {
  85. return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.batchInsert($!tool.firstLowerCase($!{tableInfo.name})s);
  86. }
  87. /**
  88. * 修改数据
  89. *
  90. * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
  91. * @return 实例对象
  92. */
  93. @Override
  94. public $!{tableInfo.name} update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
  95. this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.update($!tool.firstLowerCase($!{tableInfo.name}));
  96. return this.selectById($!{tool.firstLowerCase($!{tableInfo.name})}.get$!tool.firstUpperCase($pk.name)());
  97. }
  98. /**
  99. * 通过主键删除数据
  100. *
  101. * @param $!pk.name 主键
  102. * @return 是否成功
  103. */
  104. @Override
  105. public int deleteById($!pk.shortType $!pk.name) {
  106. return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.deleteById($!pk.name);
  107. }
  108. /**
  109. * 查询总数据数
  110. *
  111. * @return 数据总数
  112. */
  113. @Override
  114. public int count(){
  115. return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.count();
  116. }
  117. }

Mapper(xml)模版分享

  1. ##引入mybatis支持
  2. $!mybatisSupport
  3. ##设置保存名称与保存位置
  4. $!callback.setFileName($tool.append($!{tableInfo.name}, "Dao.xml"))
  5. $!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mapper"))
  6. ##拿到主键
  7. #if(!$tableInfo.pkColumn.isEmpty())
  8. #set($pk = $tableInfo.pkColumn.get(0))
  9. #end
  10. <?xml version="1.0" encoding="UTF-8"?>
  11. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  12. <mapper namespace="$!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Dao">
  13. <!-- 结果集 -->
  14. <resultMap type="$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}" id="$!{tableInfo.name}Map">
  15. #foreach($column in $tableInfo.fullColumn)
  16. <result property="$!column.name" column="$!column.obj.name" jdbcType="$!column.ext.jdbcType"/>
  17. #end
  18. </resultMap>
  19. <!-- 基本字段 -->
  20. <sql id="Base_Column_List">
  21. #allSqlColumn()
  22. </sql>
  23. <!-- 查询单个 -->
  24. <select id="selectById" resultMap="$!{tableInfo.name}Map">
  25. select
  26. <include refid="Base_Column_List" />
  27. from $!tableInfo.obj.name
  28. where $!pk.obj.name = #{$!pk.name}
  29. </select>
  30. <!-- 分页查询 -->
  31. <select id="selectPage" resultMap="$!{tableInfo.name}Map">
  32. select
  33. <include refid="Base_Column_List" />
  34. from $!tableInfo.obj.name
  35. limit #{start},#{limit}
  36. </select>
  37. <!-- 查询全部 -->
  38. <select id="selectAll" resultMap="$!{tableInfo.name}Map">
  39. select
  40. <include refid="Base_Column_List" />
  41. from $!tableInfo.obj.name
  42. </select>
  43. <!--通过实体作为筛选条件查询-->
  44. <select id="selectList" resultMap="$!{tableInfo.name}Map">
  45. select
  46. <include refid="Base_Column_List" />
  47. from $!tableInfo.obj.name
  48. <where>
  49. #foreach($column in $tableInfo.fullColumn)
  50. <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
  51. and $!column.obj.name = #{$!column.name}
  52. </if>
  53. #end
  54. </where>
  55. </select>
  56. <!-- 新增所有列 -->
  57. <insert id="insert" keyProperty="$!pk.name" useGeneratedKeys="true">
  58. insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($velocityHasNext), #end#end)
  59. values ( #foreach($column in $tableInfo.fullColumn)#{$!{column.name}}#if($velocityHasNext), #end#end)
  60. </insert>
  61. <!-- 批量新增 -->
  62. <insert id="batchInsert">
  63. insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($velocityHasNext), #end#end)
  64. values
  65. <foreach collection="$!tool.firstLowerCase($!{tableInfo.name})s" item="item" index="index" separator=",">
  66. (
  67. #foreach($column in $tableInfo.fullColumn)
  68. #{item.$!{column.name}}#if($velocityHasNext), #end
  69. #end
  70. )
  71. </foreach>
  72. </insert>
  73. <!-- 通过主键修改数据 -->
  74. <update id="update">
  75. update $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name}
  76. <set>
  77. #foreach($column in $tableInfo.otherColumn)
  78. <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
  79. $!column.obj.name = #{$!column.name},
  80. </if>
  81. #end
  82. </set>
  83. where $!pk.obj.name = #{$!pk.name}
  84. </update>
  85. <!--通过主键删除-->
  86. <delete id="deleteById">
  87. delete from $!{tableInfo.obj.name} where $!pk.obj.name = #{$!pk.name}
  88. </delete>
  89. <!-- 总数 -->
  90. <select id="count" resultType="int">
  91. select count(*) from $!{tableInfo.obj.name}
  92. </select>
  93. </mapper>