发表于: 2017-08-13 21:54:31

1 962


今天完成的事情:学习Mybatis-Plus

什么是Mybatis-Plus

mybatis-plus 是一款 mybatis 动态 SQL 自动注入 mybatis 增删改查 CURD 操作中间件。让 mybatis 拥有 hibernate 的单表高效,也保留 xml sql 的灵动。


Mybatis-Plus优点

无侵入:Mybatis-Plus 在 Mybatis 的基础上进行扩展,只做增强不做改变,引入 Mybatis-Plus 不会对您现有的 Mybatis 构架产生任何影响,而且 MP 支持所有 Mybatis 原生的特性

依赖少:仅仅依赖 Mybatis 以及 Mybatis-Spring

损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作

预防Sql注入:内置Sql注入剥离器,有效预防Sql注入攻击

通用CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求

多种主键策略:支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题

支持热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动

支持ActiveRecord:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可实现基本 CRUD 操作

支持代码生成:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎(比 Mybatis 官方的 Generator 更加强大!)

支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )

支持关键词自动转义:支持数据库关键词(order、key......)自动转义,还可自定义关键词

内置分页插件:基于Mybatis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于写基本List查询

内置性能分析插件:可输出Sql语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询

内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,预防误操作


使用教程

maven依赖

<dependency>

    <groupId>com.baomidou</groupId>

    <artifactId>mybatis-plus</artifactId>

    <version>2.1.0</version>

</dependency>


配置生成器

public class MpGenerator {

/**
    * <p>
    * MySQL 生成演示
    * </p>
    */
   public static void main(String[] args) {
AutoGenerator mpg = new AutoGenerator();

       // 全局配置
       GlobalConfig gc = new GlobalConfig();
       gc.setOutputDir("D://");
       gc.setFileOverride(true);
       gc.setActiveRecord(true);
       gc.setEnableCache(false);// XML 二级缓存
       gc.setBaseResultMap(true);// XML ResultMap
       gc.setBaseColumnList(false);// XML columList
       gc.setAuthor("Yanghu");

       // 自定义文件命名,注意 %s 会自动填充表实体属性!
       // gc.setMapperName("%sDao");
       // gc.setXmlName("%sDao");
       // gc.setServiceName("MP%sService");
       // gc.setServiceImplName("%sServiceDiy");
       // gc.setControllerName("%sAction");
       mpg.setGlobalConfig(gc);

       // 数据源配置
       DataSourceConfig dsc = new DataSourceConfig();
       dsc.setDbType(DbType.MYSQL);
       dsc.setTypeConvert(new MySqlTypeConvert(){
// 自定义数据库表字段类型转换【可选】
           @Override
           public DbColumnType processTypeConvert(String fieldType) {
System.out.println("转换类型:" + fieldType);
               // 注意!!processTypeConvert 存在默认类型转换,如果不是你要的效果请自定义返回、非如下直接返回。
               return super.processTypeConvert(fieldType);
           }
});
       dsc.setDriverName("com.mysql.jdbc.Driver");
       dsc.setUsername("root");
       dsc.setPassword("521");
       dsc.setUrl("jdbc:mysql://127.0.0.1:3306/mybatis-plus?characterEncoding=utf8");
       mpg.setDataSource(dsc);

       // 策略配置
       StrategyConfig strategy = new StrategyConfig();
       // strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意
       strategy.setTablePrefix(new String[] { "tlog_", "tsys_" });// 此处可以修改为您的表前缀
       strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
       // strategy.setInclude(new String[] { "user" }); // 需要生成的表
       // strategy.setExclude(new String[]{"test"}); // 排除生成的表
       // 自定义实体父类
       // strategy.setSuperEntityClass("com.baomidou.demo.TestEntity");
       // 自定义实体,公共字段
       // strategy.setSuperEntityColumns(new String[] { "test_id", "age" });
       // 自定义 mapper 父类
       // strategy.setSuperMapperClass("com.baomidou.demo.TestMapper");
       // 自定义 service 父类
       // strategy.setSuperServiceClass("com.baomidou.demo.TestService");
       // 自定义 service 实现类父类
       // strategy.setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl");
       // 自定义 controller 父类
       // strategy.setSuperControllerClass("com.baomidou.demo.TestController");
       // 【实体】是否生成字段常量(默认 false)
       // public static final String ID = "test_id";
       // strategy.setEntityColumnConstant(true);
       // 【实体】是否为构建者模型(默认 false)
       // public User setName(String name) {this.name = name; return this;}
       // strategy.setEntityBuilderModel(true);
       mpg.setStrategy(strategy);

       // 包配置
       PackageConfig pc = new PackageConfig();
       pc.setParent("com.baomidou");
       pc.setModuleName("test");
       mpg.setPackageInfo(pc);

       // 注入自定义配置,可以在 VM 中使用 cfg.abc 【可无】
       InjectionConfig cfg = new InjectionConfig() {
@Override
           public void initMap() {
Map<String, Object> map = new HashMap<String, Object>();
               map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
               this.setMap(map);
           }
};

       // 自定义 xxList.jsp 生成
       List<FileOutConfig> focList = new ArrayList<FileOutConfig>();
       focList.add(new FileOutConfig("/template/list.jsp.vm") {
@Override
           public String outputFile(TableInfo tableInfo) {
// 自定义输入文件名称
               return "D://my_" + tableInfo.getEntityName() + ".jsp";
           }
});
       cfg.setFileOutConfigList(focList);
       mpg.setCfg(cfg);

       // 调整 xml 生成目录演示
       focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
@Override
           public String outputFile(TableInfo tableInfo) {
return "/develop/code/xml/" + tableInfo.getEntityName() + ".xml";
           }
});
       cfg.setFileOutConfigList(focList);
       mpg.setCfg(cfg);

       // 关闭默认 xml 生成,调整生成 至 根目录
       TemplateConfig tc = new TemplateConfig();
       tc.setXml(null);
       mpg.setTemplate(tc);

       // 自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/templates 下面内容修改,
       // 放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也可以自定义模板名称
       // TemplateConfig tc = new TemplateConfig();
       // tc.setController("...");
       // tc.setEntity("...");
       // tc.setMapper("...");
       // tc.setXml("...");
       // tc.setService("...");
       // tc.setServiceImpl("...");
       // 如上任何一个模块如果设置 空 OR Null 将不生成该模块。
       // mpg.setTemplate(tc);

       // 执行生成
       mpg.execute();

       // 打印注入设置【可无】
       System.err.println(mpg.getCfg().getMap().get("abc"));
   }

}


使用感受,生成之后使用贼快,感觉和复盘中的公司框架差不多,只用写写controller,简单的CURD操作直接帮你生成

明天计划的事情:整合到自己项目

遇到的问题:无(志勇回来了有啥问题可以直接问了)

收获:学习mybatisplus


返回列表 返回列表
评论

    分享到