mybatisplus的使用

mybatisplus使用代码

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.FileType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.assertj.core.util.Lists;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * mybatis plus代码生成器
 */
public class MybatisGenerate {

    //作者
    private static String author = "xxx";
    //输出路径
    private static String out_put_dir = "D:\\";

    // 数据库配置
    private static String username = "PS_BONDED_GOVERNMENT";
    private static String password = "123456";
    private static String url = "xxx";
    private static DbType db_type = xxx;
    private static String driverClassName = "oracle.jdbc.driver.OracleDriver";

    //生成的实体类时,忽略表的前缀名: 不需要则置空
    private static String[] entity_ignore_prefix = {""};
    //需要生成的表名
    private static String[] tables = {
            "SYS_USER",
            "SYS_MENU",
            "SYS_ROLE",
            "SYS_ROLE_PERMISSION",
            "SYS_DICT"



    };

    //需要排除的表名
    private static String[] excludes = {
            "SYS_USER"
    };
    //自定义实体类父类
    private static String super_entity = "com.xxx.xxx.module.TestEntity";
    //自定义实体类父类的公共字段
    private static String[] super_entity_columns = {"test_id"};
    // 自定义需要填充的字段
    private static List<TableFill> table_fill_list = new ArrayList<>();

    //包名,导入使用
    private static String package_path = "/com/xxx/xxx";

    //文件输出路径
    private static String project_path = System.getProperty("user.dir");

    private static String java_path = project_path + "/src/main/java" + package_path;
    private static String resource_path = project_path + "/src/main";

    private static String entity_path = java_path + "/entity";
    private static String mapper_path = java_path + "/mapper";
    private static String service_path = java_path + "/service";
    private static String service_impl_path = java_path + "/service/impl";
    private static String controller_path = java_path + "/controller";
    private static String xml_path = resource_path + "/resources/mybatis-mapper" + package_path + "/mapper";

//模板位置
    private static String entity_template = "templates/freemarker/entity.java.ftl";
    private static String xml_template = "templates/freemarker/mapper.xml.ftl";
    private static String mapper_template = "templates/freemarker/mapper.java.ftl";
    private static String service_template = "templates/freemarker/service.java.ftl";
    private static String service_impl_template = "templates/freemarker/serviceImpl.java.ftl";
    private static String controller_template = "templates/freemarker/controller.java.ftl";


    public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator()
                .setGlobalConfig(globalConfig())
                .setDataSource(dataSourceConfig())
                .setStrategy(strategyConfig())
                .setPackageInfo(packageConfig())
                // 因为使用了自定义模板,所以需要把各项置空否则会多生成一次
                .setTemplate(templateConfig())
                // 使用的模板引擎,如果不是默认模板引擎则需要添加模板依赖到pom
                .setTemplateEngine(new FreemarkerTemplateEngine())
                .setCfg(injectionConfig());
        mpg.execute();
        // 打印注入设置,这里演示模板里面怎么获取注入内容【可无】
        System.err.println(mpg.getCfg().getMap().get("abc"));

    }

    /**
     * 全局配置
     */
    private static GlobalConfig globalConfig() {
        return new GlobalConfig()
                .setAuthor(author) // 作者
                .setOutputDir(out_put_dir)//输出目录
                .setOpen(false)// 生成文件后打开目录
                .setFileOverride(true)// 文件覆盖
                .setActiveRecord(true)// 开启activeRecord模式
                .setEnableCache(false)// XML 二级缓存
                .setBaseResultMap(true)// XML ResultMap: mapper.xml生成查询映射结果
                .setBaseColumnList(true)// XML ColumnList: mapper.xml生成查询结果列
                .setSwagger2(true)// swagger注解; 须添加swagger依赖
                .setKotlin(false) //是否生成 kotlin 代码
                /*
                    自定义文件命名,注意 %s 会自动填充表实体属性!
                 */
                // .setEntityName("%sEntity");
                // .setMapperName("%sDao")
                // .setXmlName("%sDao")
                .setServiceName("%sService");//默认是I%sService
        // .setServiceImplName("%sServiceDiy")
        // .setControllerName("%sAction")
    }

    /**
     * 数据源配置
     */
    private static DataSourceConfig dataSourceConfig() {
        return new DataSourceConfig()
                .setDbType(db_type)// 数据库类型
                .setDriverName(driverClassName)// 连接驱动
                .setUrl(url)// 地址
                .setUsername(username)// 用户名
                .setPassword(password);// 密码
        //.setTypeConvert(new MySqlTypeConvert() {
        //    // 自定义数据库表字段类型转换【可选】
        //    @Override
        //    public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
        //        System.out.println("转换类型:" + fieldType);
        //        // if ( fieldType.toLowerCase().contains( "tinyint" ) ) {
        //        //    return DbColumnType.BOOLEAN;
        //        // }
        //        return super.processTypeConvert(globalConfig, fieldType);
        //    }
        //})
    }

    /**
     * 生成策略配置,自定义命名,生成结构
     */
    private static StrategyConfig strategyConfig() {
        return new StrategyConfig()
                // .setCapitalMode(true)// 全局大写命名
                // .setDbColumnUnderline(true)//全局下划线命名
                .setNaming(NamingStrategy.underline_to_camel)// 表名生成策略:下划线连转驼峰
                .setColumnNaming(NamingStrategy.underline_to_camel)// 表字段生成策略:下划线连转驼峰
                .setInclude(tables)// 需要生成的表
                // .setExclude(EXCLUDES)// 需要排除生成的表
                .setTablePrefix(entity_ignore_prefix) // 去除表前缀,此处可以修改为您的表前缀
                //.setSuperEntityClass(super_entity) // 自定义实体父类
                //.setSuperEntityColumns(super_entity_columns)// 自定义实体父类:公共字段
                //.setTableFillList(table_fill_list)//自定义实体父类:私有字段
                // .setSuperMapperClass("com.baomidou.demo.TestMapper") // 自定义 mapper 父类
                // .setSuperServiceClass("com.baomidou.demo.TestService") // 自定义 service 父类
                // .setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl")// 自定义 service 实现类父类
                // .setSuperControllerClass("com.baomidou.demo.TestController") // 自定义 controller 父类
                // .setEntityColumnConstant(true) // 【实体】是否生成字段常量(默认 false)
                // Boolean类型字段是否移除is前缀处理
                // .setEntityBooleanColumnRemoveIsPrefix(true)
                // 是否启用builder 模式:public User setName(String name) {this.name = name; return this;}
                .setEntityBuilderModel(true)
                // 是否为lombok模型; 需要lombok依赖
                //.setEntityLombokModel(true)
                // 生成实体类字段注解
                .setEntityTableFieldAnnotationEnable(true)
                // controller映射地址:驼峰转连字符
                .setControllerMappingHyphenStyle(false)
                // 生成RestController
                .setRestControllerStyle(true);
    }

    /**
     * 包配置,设置包路径用于导包时使用,路径示例:com.path
     */
    private static PackageConfig packageConfig() {
        String parent = package_path.replace('/', '.').substring(1);
        String entity = entity_path.substring(java_path.length()).replace('/', '.').substring(1);
        String mapper = mapper_path.substring(java_path.length()).replace('/', '.').substring(1);
        String xml = xml_path.substring(resource_path.length()).replace('/', '.').substring(1);
        String service = service_path.substring(java_path.length()).replace('/', '.').substring(1);
        String service_impl = service_impl_path.substring(java_path.length()).replace('/', '.').substring(1);
        String controller = controller_path.substring(java_path.length()).replace('/', '.').substring(1);
        return new PackageConfig()
                //父包名
                .setParent(parent)
                .setModuleName("")
                //结构包
                .setEntity(entity)
                .setMapper(mapper)
                .setXml(xml)
                .setService(service)
                .setServiceImpl(service_impl)
                .setController(controller);
    }

    /**
     * 模板配置
     */
    private static TemplateConfig templateConfig() {
        // 自定义模板配置,模板可以参考源码 /mybatis-plus/src/main/resources/template
        // 使用 copy至您项目 src/main/resources/template 目录下,模板名称也可自定义如下配置:
        // 置空后方便使用自定义输出位置
        return new TemplateConfig()
                .setEntity(null)
                .setXml(null)
                .setMapper(null)
                .setService(null)
                .setServiceImpl(null)
                .setController(null);
    }

    /**
     * 自定义配置
     */
    private static InjectionConfig injectionConfig() {
        return new InjectionConfig() {
            @Override
            public void initMap() {
                // 注入配置
                Map<String, Object> map = new HashMap<>();
                map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
                this.setMap(map);
            }
        }.setFileCreate(new IFileCreate() {
            // 自定义输出文件
            @Override
            public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
                // 检查文件目录,不存在自动递归创建
                File file = new File(filePath);
                if (!file.exists()) {
                    file.getParentFile().mkdirs();
                }
                //自定义指定需要覆盖的文件 - 文件结尾名字参照 全局配置 中对各层文件的命名,未修改为默认值

                if (new File(filePath).exists() &&
                        (filePath.endsWith("Controller.java") || filePath.endsWith("Service.java") || filePath.endsWith("ServiceImpl.java"))) {
                    return false;
                }
                return true;
            }
        }).setFileOutConfigList(
                //指定模板、输出路径
                Lists.newArrayList(
                        new FileOutConfig(entity_template) {
                            @Override
                            public String outputFile(TableInfo tableInfo) {
                                return entity_path + File.separator + tableInfo.getEntityName() + StringPool.DOT_JAVA;
                            }
                        }, new FileOutConfig(xml_template) {
                            @Override
                            public String outputFile(TableInfo tableInfo) {
                                return xml_path + File.separator + tableInfo.getMapperName() + StringPool.DOT_XML;
                            }
                        }, new FileOutConfig(mapper_template) {
                            @Override
                            public String outputFile(TableInfo tableInfo) {
                                return mapper_path + File.separator + tableInfo.getMapperName() + StringPool.DOT_JAVA;
                            }
                        }, new FileOutConfig(service_template) {
                            @Override
                            public String outputFile(TableInfo tableInfo) {
                                return service_path + File.separator + tableInfo.getServiceName() + StringPool.DOT_JAVA;
                            }
                        }, new FileOutConfig(service_impl_template) {
                            @Override
                            public String outputFile(TableInfo tableInfo) {
                                return service_impl_path + File.separator + tableInfo.getServiceImplName() + StringPool.DOT_JAVA;
                            }
                        }, new FileOutConfig(controller_template) {
                            @Override
                            public String outputFile(TableInfo tableInfo) {
                                return controller_path + File.separator + tableInfo.getControllerName() + StringPool.DOT_JAVA;
                            }
                        })
        );
    }
}

模板:https://download.csdn.net/download/yanzanjie2018/18544027

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MybatisPlus 是一个 Mybatis 的增强工具,它简化了 Mybatis 的开发流程,提供了许多实用的功能,如自动生成 SQL、分页、逻辑删除等。下面是 MybatisPlus使用方法: 1. 引入 MybatisPlus 通过 Maven 引入 MybatisPlus 的依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis-plus.version}</version> </dependency> ``` 2. 配置 MybatisPlus 在 Spring Boot 项目中配置 MybatisPlus,需要在 application.yml 文件中添加以下配置: ```yaml mybatis-plus: # mapper.xml 所在路径 mapper-locations: classpath:/mapper/*.xml # 实体类所在包 typeAliasesPackage: com.example.entity ``` 3. 定义实体类 实体类需要使用 MybatisPlus 提供的注解来标记字段,如 @Table、@Id、@TableField 等。例如: ```java @Data @TableName("user") public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.UPDATE) private Date updateTime; @TableLogic private Integer deleted; } ``` 4. 定义 Mapper Mapper 接口需要继承 MybatisPlus 提供的 BaseMapper 接口,例如: ```java public interface UserMapper extends BaseMapper<User> { } ``` 5. 使用 MybatisPlus 使用 MybatisPlus 的查询、插入、更新、删除等操作,只需要调用 BaseMapper 接口提供的方法即可,例如: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public User getUserById(Long id) { return userMapper.selectById(id); } @Override public boolean addUser(User user) { return userMapper.insert(user) > 0; } @Override public boolean updateUser(User user) { return userMapper.updateById(user) > 0; } @Override public boolean deleteUserById(Long id) { return userMapper.deleteById(id) > 0; } } ``` 以上就是 MybatisPlus 的基本使用方法。除了上述功能,MybatisPlus 还提供了许多其他实用的功能,如分页、逆向工程、多租户、动态表名等,可以根据具体需求进行使用

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yzzzjj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值