mybatis-metamodel

mybatis 元数据模型生成插件
授权协议 Apache
开发语言 Java
所属分类 数据库相关、 数据库管理工具
软件类型 开源软件
地区 国产
投 递 者 佘修为
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

mybatis-metamodel 是 mybatis-plus 和 tk mapper 的元数据模型生成插件,目的是解决它们在复杂场景下自定义 SQL 时的紧耦合问题。

用途

我们都知道 mybatis-plus 和 tk mapper 开源项目是 mybatis 优秀的增强插件,它们通过重定义 MappedStatement 实现了通用增删改查。它们所提供的增删改查的功能,极大提高了开发者的开发效率。

但是,在一些复杂的应用场景下,它们的通用增删改查不能满足我们的开发需求,为了实现需求,需要通过它们内置的条件查询组件自定义查询语句。在这种复杂场景下,就无法避免使用字符串表示表名或者字段名,这在复杂的项目中如果修改了字段名,很容易造成后期运行时错误。

为了避免应用在运行时发生错误,本项目将在编译期提供数据库的元数据,可以帮助应用在编译期就感知原有数据库元数据的修改。

举个li'zi:    
我们需要自定义 SQL 查询用户信息。引入本项目后,可以在编译期自动生成元数据模型 UserInfo_.class,元数据模型里面包含每个 table field 的信息,除此之外,还可以通过 MetaModelContext 获取对应的表信息。

Mapper

// 根据 example 条件查询
String queryUserName = "hugo_1";
Example userInfoQueryExample = new Example(UserInfo.class);
Example.Criteria criteria = userInfoQueryExample.createCriteria();
criteria.andEqualTo(UserInfo_.username.getColumn(), queryUserName);
List<UserInfo> userInfosByQuery = userInfoMapper.selectByExample(userInfoQueryExample);
Assert.assertEquals(1, userInfosByQuery.size());

//获取table名
String tableName = metaModelContext.getTableName(UserInfo_.class);
Assert.assertEquals("user_info", tableName);

mybatis-plus



 // 根据 map 查询
// 查询username为hugo_1的数据
Map<String, Object> map = new HashMap<>();
map.put(UserInfo_.username.getColumn(), "hugo_1"); //获取元数据
userInfo = userInfoMapper.selectByMap(map).get(0);

// wrapper查询
// 查询address为中国的列表
List<UserInfo> userList = userInfoMapper.selectList(
        new QueryWrapper<UserInfo>().eq(UserInfo_.address.getColumn(), "中国")
);

//获取table名
String tableName = metaModelContext.getTableName(UserInfo_.class);


支持特性

mapper

支持MAPPER版本1.1.5+
1. 支持是否使用原语类型配置usePrimitiveType,默认为false,建议不要开启,没有意义
2. 支持配置useSimpleType,默认为true
3. 支持配置enumAsSimpleType
4. 支持数据库的catalog和schema配置
5. 支持全局字段转换方式style
6. 支持@Table注解
7. 支持@NameStyle注解
8. 支持@Transient、@Column、@ColumnType注解
9. 支持忽略static/transient修饰词的字段

mybatis-plus

支持mybatis-plus版本3.2.0+
1. 支持全局配置tableUnderline、capitalMode
2. 支持忽略static/transient修饰词的字段
3. 支持@TableName注解
4. 支持@TableId、@TableField注解


不支持特性

mapper

1. 不支持动态表名 IDynamicTableName
2. 不支持方法上使用注解, 即 enableMethodAnnotation 全局配置

TODO    

mapper   

 

mybatis-plus   

1. 支持配置keepGlobalFormat
2. 支持配置tablePrefix
3. 支持配置columnFormat
4. 支持配置propertyFormat

使用说明

参考下面的wiki
gitee

  •          以前再github上写过一个做数据抽取的一些功能,只是用mybatis写了一些SQL,用最后更新时间做数据抽取的条件,从而达到拿到数据然后序列化,压缩,加密,上传到FTP上,客户端下载解密,解压,反序列化,插入到数据库里。但是那会总再想,这个数据抽取除了JDBC连接的,一般的项目还有导入excel或者从CSV文件里拿到数据,然后继续执行以上情况。               最近

  • 往期热门文章: 1、程序在计算机中是如何运行起来的2、动静分离 与 热点缓存3、聊聊前后端分离接口规范4、生成订单30分钟未支付,则自动取消,该怎么实现?5、浅析 VO、DTO、DO、PO 的概念、区别和用处! 来源:segmentfault.com/a/1190000018472572 因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框架,对于复杂业务系统,最终的结论是,JO

  • 问题 Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2018-09-18 17:38:51.481 ERROR 5248 --- [           main] o.s.boot.SpringApplication

  • 因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框架,对于复杂业务系统,最终的结论是,JOOQ是总体上最好的,可惜不是完全免费,最终选择JDBC Template。 Hibernate和Mybatis是使用最多的两个主流框架,而JOOQ、Ebean等小众框架则知道的人不多,但也有很多独特的优点;而JPA则是一组Java持久层Api的规范,Spring Data JPA是JPA Re

  • 因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框架,对于复杂业务系统,最终的结论是,JOOQ是总体上最好的,可惜不是完全免费,最终选择JDBC Template。 Hibernate和Mybatis是使用最多的两个主流框架,而JOOQ、Ebean等小众框架则知道的人不多,但也有很多独特的优点; 而JPA则是一组Java持久层Api的规范,Spring Data JPA是JPA R

  • 因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框架,对于复杂业务系统,最终的结论是,JOOQ是总体上最好的,可惜不是完全免费,最终选择JDBC Template。 Hibernate和Mybatis是使用最多的两个主流框架,而JOOQ、Ebean等小众框架则知道的人不多,但也有很多独特的优点;而JPA则是一组Java持久层Api的规范,Spring Data JPA是JPA Re

  • 由于我司整合了用spring boot 整合mybatis和jpa,本地跑得飞起,一发布线上,直接熄火。 这个坑太大了… 线上运行报错: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' .... 解决方法: 由于我们不使用jp

  • 因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框架,对于复杂业务系统,最终的结论是,JOOQ是总体上最好的,可惜不是完全免费,最终选择JDBC Template。 Hibernate和Mybatis是使用最多的两个主流框架,而JOOQ、Ebean等小众框架则知道的人不多,但也有很多独特的优点; 而JPA则是一组Java持久层Api的规范,Spring Data JPA是JPA R

 相关资料
  • 我有2个文件,一个ecore实现元模型和一个电子存储库。电子存储库以EMF格式与ecore实现元模型一起提供。我想浏览这个存储库的内容,我所知道的是我必须从实现元模型生成一个Eclipse插件,通过这个插件,我可以打开存储库并浏览它的内容。但我不知道如何生成插件并继续它。 ecore实现元模型是使用Eclipse Indigo SR2中的EMF版本2.7开发的,e-Repository是在相同的环

  • 创建插件自定义模型 在插件model目录下创建PluginDemoModel.php文件,内容如下: <?php // +---------------------------------------------------------------------- // | ThinkCMF [ WE CAN DO IT MORE SIMPLE ] // +---------------------

  • 创建插件自定义模型 <?php namespace plugins\Demo\Model;//Demo插件英文名,改成你的插件英文就行了 use Common\Model\CommonModel;//继承CommonModel class PluginDemoModel extends CommonModel{ //Demo插件英文名,改成你的插件英文就行了,插件数据表最好加个plugin前缀再加

  • 创建插件自定义模型 在插件model目录下创建PluginDemoModel.php文件,内容如下: <?php // +---------------------------------------------------------------------- // | ThinkCMF [ WE CAN DO IT MORE SIMPLE ] // +---------------------

  • 生成数据库中所有表的模型文件,如果设置了include或exclude,则按照相应规则过滤表。 必选参数: -namespace 生成的Model所在命名空间 可选参数: -database 数据库名,不传则取连接池默认配置的库名 -baseClass 生成时所继承的基类(自行实现务必继承框架的模型类),默认Imi\Model\Model,可选 -poolName 连接池名称,不传则取默认连接池

  • 问题内容: 本着与CriteriaQuery关联的类型安全的精神,JPA 2.0还具有一个API,用于支持实体的元模型表示。 是否有人知道此API的完整功能实现(生成元模型,而不是手动创建元模型类)?如果有人也知道在Eclipse中进行设置的步骤,那将是非常棒的(我认为这与设置注释处理器一样简单,但你永远不会知道)。 编辑:偶然发现了Hibernate JPA 2元模型生成器。但是问题仍然存在,因

  • 问题内容: 本着与CriteriaQuery关联的类型安全的精神,JPA 2.0还具有一个API,用于支持实体的元模型表示。 是否有人知道此API的完整功能实现(生成元模型,而不是手动创建元模型类)?如果有人也知道在Eclipse中进行设置的步骤,那将是非常棒的(我认为它与设置注释处理器一样简单,但您永远不会知道)。 编辑:偶然发现了HibernateJPA2元模型生成器。但是问题仍然存在,因为我

  • 问题内容: 我遵循了JPA modelgen 指南,并且能够生成所需的规范元模型。通过此pom设置: 生成的源已在指定目录中正确创建,我必须手动将其指定为eclipse项目类路径中的源才能使用它。当我触发Maven时,日志显示或,并且我仍然可以成功构建。所以我的问题是,在创建元模型时这种预期/正确的行为吗?还是我错过了cofig中的某些内容?谢谢 问题答案: 我也在使用JPA Metamodel