使用mybatis_plus实现根据数据表自动生成实体类entity、controller层、service层、mapper层 极大提高开发效率

代码生成器 Mybatis_Plus 极大提高开发效率

今天在这里我又总结了mybatis_plus的又一大功能,它可以极大的提高我们呢的开发效率!

我们都知道,在开发过程中最无聊并且又必不可少的一个过程就是根据数据表去创建相应的实体类entity,以及与前端交互的controlle层和业务实现service层接口及其实现类impl,以及与持久层(数据库)交接的mapper层接口

如果说上述的过程都可以自动生成的话,那将会大大的减轻开发者的工作量,提高开发效率!

于是乎mybatis_plus的代码自动生成功能应运而生!

下面是实现过程

准备数据:

建表语句 表一:
DROP TABLE IF EXISTS `borrow_info`;
CREATE TABLE `borrow_info`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `user_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '借款用户id',
  `amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '借款金额',
  `period` int(11) NULL DEFAULT NULL COMMENT '借款期限',
  `borrow_year_rate` decimal(10, 2) NULL DEFAULT NULL COMMENT '年化利率',
  `return_method` tinyint(3) NULL DEFAULT NULL COMMENT '还款方式 1-等额本息 2-等额本金 3-每月还息一次还本 4-一次还本',
  `money_use` tinyint(3) NULL DEFAULT NULL COMMENT '资金用途',
  `status` tinyint(3) NOT NULL DEFAULT 0 COMMENT '状态(0:未提交,1:审核中, 2:审核通过, -1:审核不通过)',
  `create_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除(1:已删除,0:未删除)',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `idx_user_id`(`user_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '借款信息表' ROW_FORMAT = DYNAMIC;
建表语句 表二:
DROP TABLE IF EXISTS `borrower`;
CREATE TABLE `borrower`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `user_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '用户id',
  `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `id_card` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '身份证号',
  `mobile` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机',
  `sex` tinyint(3) NULL DEFAULT NULL COMMENT '性别(1:男 0:女)',
  `age` tinyint(3) NULL DEFAULT NULL COMMENT '年龄',
  `education` tinyint(3) NULL DEFAULT NULL COMMENT '学历',
  `is_marry` tinyint(1) NULL DEFAULT NULL COMMENT '是否结婚(1:是 0:否)',
  `industry` tinyint(3) NULL DEFAULT NULL COMMENT '行业',
  `income` tinyint(3) NULL DEFAULT NULL COMMENT '月收入',
  `return_source` tinyint(3) NULL DEFAULT NULL COMMENT '还款来源',
  `contacts_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '联系人名称',
  `contacts_mobile` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '联系人手机',
  `contacts_relation` tinyint(3) NULL DEFAULT NULL COMMENT '联系人关系',
  `status` tinyint(3) NOT NULL DEFAULT 0 COMMENT '状态(0:未认证,1:认证中, 2:认证通过, -1:认证失败)',
  `create_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除(1:已删除,0:未删除)',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `uk_user_id`(`user_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '借款人' ROW_FORMAT = DYNAMIC;

首先在项目模块的pom.xml文件中引入其所需要的依赖:

            <!--mybatis-plus-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>最新版本号</version>
            </dependency>
            <!--mybatis-plus 代码生成器-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId>
                <version>最新版本号</version>
            </dependency>
            <!-- Mybatis Plus 代码生成器模板引擎,  -->
            <dependency>
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity-engine-core</artifactId>
                <version>最新版本号</version>
            </dependency>

然后在test测试包中创建一个测试类,用于自动生成代码的实现:

package com.atguigu.srb.core;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

public class CodeGenerator {
    @Test
    public void genCode() {

        // 1、创建代码生成器对象mpg
        AutoGenerator mpg = new AutoGenerator();

        // 2、创建全局配置对象 根据需要设置全局配置的参数
        GlobalConfig gc = new GlobalConfig();
        //获取当前系统用户所创建的当前项目的路径
        String projectPath = System.getProperty("user.dir");
        //设置代码自动生成的文件所存储的路径地址
        gc.setOutputDir(projectPath + "/src/main/java");
        //设置项目作者的名字
        gc.setAuthor("baomidou");
        //如果为true 就会在代码生成后以资源管理器的形式自动打开所生成文件
        gc.setOpen(false); //生成后是否打开资源管理器
        //根据要求选择service包下的类名是否以I开头
        gc.setServiceName("%sService");	//去掉Service接口的首字母I
        //数据表的主键生成策略
        gc.setIdType(IdType.AUTO); //主键策略
        gc.setSwagger2(true);//开启Swagger2模式
        //将全局配置对象设置到代码生成器的对象中
        mpg.setGlobalConfig(gc);

        // 3、创建数据源配置对象
        DataSourceConfig dsc = new DataSourceConfig();
        //设置数据库的访问地址
        dsc.setUrl("jdbc:mysql://localhost:3306/db_baomidou?serverTimezone=GMT%2B8&characterEncoding=utf-8");
        //设置数据库驱动配置
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        //数据库的用户名
        dsc.setUsername("root");
        //数据库密码
        dsc.setPassword("1234");
        //设置数据库的种类
        dsc.setDbType(DbType.MYSQL);
        // 将数据源的配置对象也加入到代码生成器对象中
        mpg.setDataSource(dsc);

        // 4、创建包配置对象
        PackageConfig pc = new PackageConfig();
        //文件的包存储路径
        pc.setParent("com.baomidou.mybatis.plus");
        //设置实体类的包名结构 一般情况下可以直接将实体类放在pojo包下
        //pc.setEntity("pojo");
        //当然也可以放在pojo下的entity包下
        pc.setEntity("pojo.entity"); //此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。
        mpg.setPackageInfo(pc);

        // 5、创建策略配置对象
        StrategyConfig strategy = new StrategyConfig();
        //开启类以及接口名的驼峰命名规则
        strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
        //开启实体类属性名的驼峰命名规则
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
        //是否在数据表所对应的实体类上开启lombok (也就是加上@Data注解)
        strategy.setEntityLombokModel(true); // lombok
        //给逻辑删除字段加上逻辑删除注解@TableLogic    (1:表示已经逻辑删除 0:表示并未逻辑删除)
        //所谓的逻辑删除就是在统计表中数据的条数时 不将已经逻辑删除的数据(is_deleted字段为0的数据)计算在内
        strategy.setLogicDeleteFieldName("is_deleted");//逻辑删除字段名
        //根据阿里巴巴开发规范 对实体类的某些属性名字做了规范
        //对于数据表中的is_xxx的字段名 在转换为实体属性名的时候去掉is
        strategy.setEntityBooleanColumnRemoveIsPrefix(true);//去掉布尔值的is_前缀(确保tinyint(1))
        //启用restful api风格  在对应的controller类上加上@RestController注解
        //如果为false 则加上的是@Controller注解
        //而@RestController=@Controller+@ResponseBody
        //会使得后端返回的数据的格式是json格式
        strategy.setRestControllerStyle(true); //restful api风格控制器  返回json
        mpg.setStrategy(strategy);

        // 6、执行
        mpg.execute();
    }
}

至此完结!!!!

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是 mybatis-plus 3.5.1.1 版本的模板代码: Controller 模板: ```java @RestController @RequestMapping("/${table_name}") public class ${table_nameUpper}Controller { @Autowired private ${table_nameUpper}Service ${table_name}; @GetMapping("/{id}") public ${table_nameUpper}VO getById(@PathVariable("id") Long id) { ${table_nameUpper} entity = ${table_name}.getById(id); return BeanUtil.copyProperties(entity, ${table_nameUpper}VO.class); } @PostMapping public boolean save(@RequestBody ${table_nameUpper}DTO dto) { ${table_nameUpper} entity = BeanUtil.copyProperties(dto, ${table_nameUpper}.class); return ${table_name}.save(entity); } @PutMapping public boolean update(@RequestBody ${table_nameUpper}DTO dto) { ${table_nameUpper} entity = BeanUtil.copyProperties(dto, ${table_nameUpper}.class); return ${table_name}.updateById(entity); } @DeleteMapping("/{id}") public boolean delete(@PathVariable("id") Long id) { return ${table_name}.removeById(id); } @GetMapping("/list") public List<${table_nameUpper}VO> list() { List<${table_nameUpper}> entityList = ${table_name}.list(); return BeanUtil.copyProperties(entityList, ${table_nameUpper}VO.class); } @GetMapping("/page") public IPage<${table_nameUpper}VO> page(Page<${table_nameUpper}> page) { IPage<${table_nameUpper}> entityPage = ${table_name}.page(page); return entityPage.convert(entity -> BeanUtil.copyProperties(entity, ${table_nameUpper}VO.class)); } } ``` Service 模板: ```java public interface ${table_nameUpper}Service extends IService<${table_nameUpper}> { } ``` ServiceImpl 模板: ```java @Service public class ${table_nameUpper}ServiceImpl extends ServiceImpl<${table_nameUpper}Mapper, ${table_nameUpper}> implements ${table_nameUpper}Service { } ``` Mapper 模板: ```java public interface ${table_nameUpper}Mapper extends BaseMapper<${table_nameUpper}> { } ``` Entity 模板: ```java @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) public class ${table_nameUpper} implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; #foreach($column in $columns) @TableField("${column.column_name}") private ${column.java_type} ${column.column_name}; #end } ``` DTO 模板: ```java @Data public class ${table_nameUpper}DTO { #foreach($column in $columns) private ${column.java_type} ${column.column_name}; #end } ``` VO 模板: ```java @Data public class ${table_nameUpper}VO { private Long id; #foreach($column in $columns) private ${column.java_type} ${column.column_name}; #end } ``` 其中,$table_name 表示表名,$table_nameUpper 表示表名的首字母大写形式,$columns 表示表的所有列信息。需要在模板中使用 Velocity 模板引擎进行解析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值