# myfat
**Repository Path**: drinkjava2/myfat
## Basic Information
- **Project Name**: myfat
- **Description**: MyFat是MyBatis的DAO功能增强插件
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 45
- **Forks**: 9
- **Created**: 2018-12-03
- **Last Updated**: 2021-12-21
## Categories & Tags
**Categories**: database-dev
**Tags**: None
## README
MyFat让MyBatis更胖
## 简介 | Intro
MyFat是MyBatis的DAO功能增强插件,利用全功能持久层工具jSqlBox来补足MyBatis的短板。
## 优点 | Advantages
1. 无侵入性,对于使用MyBatis的项目唯一要做的只是添加MyFat依赖即可,不用更改任何其它配置文件和代码。
2. 功能全,补足了MyBatis不提供CRUD的短板,以下为增强后的功能:
跨数据库分页、DDl生成、实体源码生成、函数变换、主键生成、多种SQL写法、DataMapper、ActiveRecord、Tail、实体越级关联查询、主从、分库分表、分布式事务等。
3. 架构更合理,它不是基于MyBatis内核开发,而是整合了jSqlBox的功能,项目本身是模块式开发,可维护性好。
## 与其它Mybatis插件如Mapper或MyBatis-Plus的区别
1. 源码少,MyFat本身不提供DAO功能,源码只有7个类,起到粘合剂的作用,jar包大小25k。
2. 由jSqlBox提供的ActiveRecord可以只声明接口(Java8),不一定需要继承类,也不需要定义Mapper,更无侵入性。
3. 它没有专门的分页方法,但是所有SQL查询都可以分页,无侵入性。
4. 支持的SQL写法更多,如参数内嵌式SQL写法、实体越级关联查询等,实体类更符合JPA注解。
## 文档 | Documentation
[中文](https://gitee.com/drinkjava2/myfat/wikis/pages) | [English](https://github.com/drinkjava2/myfat/wiki) | [JavaDoc](http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22myfat%22)
## 配置 | Configuration
在pom.xml中加入以下内容即可,注意MyFat必须先于MyBatis加载:
```xml
com.github.drinkjava2
myfat
3.0.0
org.mybatis
mybatis
3.5.2
```
如果在Spring环境下,则上面的第二项要改成Spring的包,如:
```
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.0
```
## 入门 | First Example
以下示例演示了myfat的基本配置和使用:
```
public class HelloWorld implements ActiveEntity {
private String name;
public String getName() {return name; }
public void setName(String name) {this.name = name; }
public static void main(String[] args) {
DataSource ds = JdbcConnectionPool
.create("jdbc:h2:mem:DBName;MODE=MYSQL;DB_CLOSE_DELAY=-1;TRACE_LEVEL_SYSTEM_OUT=0", "sa", "");
SqlBoxContext ctx = new SqlBoxContext(ds);
SqlBoxContext.setGlobalSqlBoxContext(ctx);
String[] ddls = ctx.toCreateDDL(HelloWorld.class);
for (String ddl : ddls)
ctx.nExecute(ddl);
new HelloWorld().putField("name", "Hello myfat").insert();
System.out.println(ctx.iQueryForString("select name from HelloWorld"));
}
}
```
## 范例 | Demo
* [myfat-springboot](../../tree/master/demo/myfat-springboot) 演示myfat在SpringBoot环境下的配置和使用。
* [myfat-springboot-mp](../../tree/master/demo/myfat-springboot-mp) 演示在SpringBoot环境下myfat对MyBatis-plus的功能增强。
* [myfat-java8-demo](../../tree/master/demo/myfat-java8-demo) 主要演示myfat的两个特点:实体类也可以只声明接口、利用Lambda来写SQL。
## 作者其它开源项目 | Other Projects
- [Java持久层工具 jSqlBox](https://gitee.com/drinkjava2/jSqlBox)
- [数据库方言工具 jDialects](https://gitee.com/drinkjava2/jdialects)
- [一个独立的声明式事务工具 jTransactions](https://gitee.com/drinkjava2/jTransactions)
- [一个微型IOC/AOP工具 jBeanBox](https://gitee.com/drinkjava2/jBeanBox)
- [一个服务端布局工具 jWebBox](https://gitee.com/drinkjava2/jWebBox)
## 期望 | Futures
欢迎发issue提出更好的意见或提交PR,帮助完善myfat
## 版权 | License
[Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0)
## 关注我 | About Me
[Github](https://github.com/drinkjava2)
[码云](https://gitee.com/drinkjava2)