• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

fast-dao: 快速ORM开发框架

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

fast-dao

开源软件地址:

https://gitee.com/fast-product/fast-dao

开源软件介绍:

Java 极·简ORM框架

Github: https://github.com/kaixinzyw/fast-dao

Gitee: https://gitee.com/fast-product/fast-dao

作者: 张亚伟

邮箱: [email protected]


  • 极简化SQL操作
  • 支持链式语法操作
  • 全自动对象映射
  • 支持多表查询
  • 支持分布式缓存和内存缓存
  • 支持自定义SQL查询
  • 支持逻辑删除
  • 支持切面
  • 数据源切换
  • 支持手动事务管理

示例

User user = UserFastDao.create().dao().insert(user); //增,新增成功后主键会在对象中设置Integer delCount = UserFastDao.create().dao().delete(); //删,可以选择逻辑删除和物理删除Integer updateCount = UserFastDao.create().dao().update(user); //改,操作简单,条件丰富PageInfo<User> page = UserFastDao.create().dao().findPage(1, 10); //查,分页查询

快速入门

测试表

create table user(    id          bigint auto_increment comment '主键' primary key,    type_id     bigint null comment '用户类型',    user_name   varchar(255) null comment '用户名',    age         int(10) null comment '年龄',    create_time datetime null comment '创建时间',    update_time datetime null comment '更新时间',    deleted     bit null comment '是否删除') comment '用户';create table user_log(    id          bigint auto_increment comment '主键' primary key,    user_id     bigint null comment '用户ID',    log_info    varchar(255) null comment '日志内容',    create_time datetime null comment '创建时间',    update_time datetime null comment '更新时间',    deleted     bit null comment '是否删除') comment '用户日志';create table user_type(    id          bigint auto_increment comment '主键' primary key,    type_name   varchar(255) null comment '用户名',    create_time datetime null comment '创建时间',    update_time datetime null comment '更新时间',    deleted     bit null comment '是否删除') comment '用户类型';INSERT INTO user(`id`, `type_id`, `user_name`, `age`, `create_time`, `update_time`, `deleted`)VALUES (1, 1, 'User1', 1, '2021-09-14 16:46:11', '2021-09-14 16:46:11', false),       (2, 1, 'User2', 2, '2021-09-14 16:46:11', '2021-09-14 16:46:11', false),       (3, 2, 'User3', 3, '2021-09-14 16:46:11', '2021-09-14 16:46:11', false);INSERT INTO user_type    (`id`, `type_name`, `create_time`, `update_time`, `deleted`)VALUES (1, 'Type1', '2021-09-14 16:46:11', '2021-09-14 16:46:11', false),       (2, 'Type2', '2021-09-14 16:46:11', '2021-09-14 16:46:11', false);INSERT INTO user_log    (`id`, `user_id`, `log_info`, `create_time`, `update_time`, `deleted`)VALUES (1, 1, 'Log1', '2021-09-14 16:46:11', '2021-09-14 16:46:11', false),       (2, 1, 'Log2', '2021-09-14 16:46:11', '2021-09-14 16:46:11', false);

Maven安装

<dependency>    <groupId>com.fast-dao</groupId>    <artifactId>fast-dao</artifactId>    <version>9.9.3</version></dependency>

文件生成

public static void main(String[] args) {    //数据库连接 --改为自己数据库的连接    String mysqlUrl ="jdbc:mysql://127.0.0.1:3306/my_test?useUnicode=true&characterEncoding=utf-8";    //数据库用户名 --改为自己数据库用户名    String userName = "root";    //数据库密码 -改为自己数据库密码    String password = "kaixinzyw";    //数据库驱动 --改为自己数据库驱动    String drive = "com.mysql.cj.jdbc.Driver";    //文件生成的包路径 --改为自己项目包路径    String packagePath = "com.fast.test";    //生成的表名 --改为自己所需要生成的表    String[] tableNames = {"user","user_log","user_type"};    FileCreateConfig config = new FileCreateConfig();    //数据库连接    config.setDBInfo(mysqlUrl,userName,password,drive);    //文件生成的包路径    config.setBasePackage(packagePath);    //选择生成的文件    config.setNeedModules(FileCreateConfig.CodeCreateModule.Base);    //需要生成的表名    config.setCreateTables(tableNames);    //生成代码    TableFileCreateUtils.create(config);}

其他配置

生成DTO

//生成DTOconfig.setNeedModules(FileCreateConfig.CodeCreateModule.DTO);//DOT是否继承POJOconfig.setDtoExtendsPOJO(true);

表前缀设置

//是否生成表前缀config.setPrefix(false,false,null);

lombok注解

//是否使用lombok插件,默认falseconfig.setUseLombok(true);

Swagger2注解

//是否在DTO上使用Swagger2注解,默认falseconfig.setUseDTOSwagger2(true);//是否在POJO上使用Swagger2注解,默认falseconfig.setUsePOJOSwagger2(true);

框架配置

Spring环境

Spring环境下无需任何配置即可使用,框架可自动识别Spring配置的数据源信息

非Spring环境

public static void fastDaoConfig() {    /**     * 数据源配置     */    FastDaoConfig.dataSource(getDataSource());}//数据源信息private static DataSource getDataSource() {    //数据库连接 -改为自己数据库的连接    String mysqlUrl ="jdbc:mysql://127.0.0.1:3306/my_test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&useOldAliasMetadataBehavior=true";    //数据库用户名 -改为自己数据库用户名    String userName = "root";    //数据库密码 -改为自己数据库密码    String password = "kaixinzyw";    //数据库驱动 改为自己数据库驱动    String drive = "com.mysql.cj.jdbc.Driver";    DruidDataSource dataSource = new DruidDataSource();    dataSource.setUrl(mysqlUrl);    dataSource.setUsername(userName);    dataSource.setPassword(password);    dataSource.setDriverClassName(drive);    return dataSource;}

其他配置

日志输出

/** * 设置SQL日志打印,默认关闭 * 参数1: 日志打印级别 DEBUG,INFO,OFF * 参数2: 是否打印详细SQL日志 * 参数3: 是否打印SQL执行结果 */FastDaoConfig.openSqlPrint(SqlLogLevel.INFO,true, true);

逻辑删除

/** * 开启逻辑删除功能,开启后会对逻辑删除标记的数据在 更新|删除|查询 时进行保护,可通过模板进行单次操作逻辑删除保护的关闭 * 参数1:  逻辑删除字段名 * 参数2:  逻辑删除标记默认值 */FastDaoConfig.openLogicDelete("deleted", Boolean.TRUE);

自动设置时间

/** * 开启自动对数据 新增操作 进行创建时间设置 * 参数1: 需要设置创建时间的字段名 */FastDaoConfig.openAutoSetCreateTime("create_time");/** * 开启自动对数据 更新操作/逻辑删除操作 进行更新时间设置 * 参数1: 需要设置更新时间的字段名 */FastDaoConfig.openAutoSetUpdateTime("update_time");

示例

新增

注意:主键如果为数字类型默认自增,自增后ID会Set到新增的对象中主键如果为字符串框架会自动进行设置ObjectId 设置后的ID会Set到新增的对象中ObjectId由以下几部分组成:1. Time 时间戳。2. Machine 所在主机的唯一标识符,一般是机器主机名的散列值。3. PID 进程ID。确保同一机器中不冲突4. INC 自增计数器。确保同一秒内产生objectId的唯一性。
User user = new User();user.setUserName("张三");user.setAge(20);user.setDeleted(false);UserFastDAO.create().dao().insert(user);

SQL输出

INSERT INTO user SET user_name = '张三' , age = 20 , deleted = false

执行结果

[{"age":20,"deleted":false,"id":189,"userName":"张三"}]

批量新增

User user1 = new User();user1.setUserName("张三");user1.setAge(20);user1.setDeleted(false);User user2 = new User();user2.setUserName("李四");user2.setAge(30);user2.setDeleted(false);List<User> userList = new ArrayList<>();userList.add(user1);userList.add(user2);List<User> ls = UserFastDAO.create().dao().insertList(userList);

SQL输出

INSERT INTO user(`id`,`type_id`,`user_name`,`age`,`create_time`,`update_time`,`deleted`) VALUES(null , null , '张三' , 20 , null , null , false ),(null , null , '李四' , 30 , null , null , false )

删除

注意如果设置逻辑删除则调用Updata如果没设置逻辑删除则会调用Delete返回值为删除条目数

通过主键删除

UserFastDAO.create().dao().deleteByPrimaryKey(1L);

SQL输出-物理删除

DELETE FROM user WHERE `id` = 1

SQL输出-逻辑删除

UPDATE user SET `deleted` = true WHERE `deleted` = false AND `id` = 1

通过条件删除

Integer delete = UserFastDAO.create().userName("张三").dao().delete()

SQL输出-物理删除

DELETE FROM user WHERE `user_name` = '张三'

SQL输出-逻辑删除

UPDATE user SET  `deleted` = true  WHERE `deleted` = false AND `user_name` = '张三'

更新

更新最少必须设置一个条件无论是通过主键更新或条件更新 一但更新的对象主键字段不为空则优先将主键参数设为条件返回值为更新条目数

通过主键更新

字段参数为空则不更新

User user = new User();user.setId(1L);user.setUserName("更新姓名");UserFastDAO.create().dao().updateByPrimaryKey(user);

SQL输出

UPDATE user SET  `id` = 1 , `user_name` = '更新姓名' WHERE `id` = 1

通过主键全字段更新

字段参数为空也进行更新

User user = new User();user.setId(1L);user.setUserName("更新姓名");UserFastDAO.create().dao().updateByPrimaryKeyOverwrite(user);

SQL输出

UPDATE user SET`id` = 1 , `type_id` = null , `user_name` = '更新姓名' , `age` = null , `create_time` = null , `update_time` = null , `deleted` = nullWHERE `id` = 1

通过条件更新

User user = new User();user.setUserName("更新姓名");UserFastDAO.create().age().less(10).dao().update(user);

SQL输出

UPDATE user SET`user_name` = '更新姓名'WHERE `age` < 10

查询

通过ID查询

User user = UserFastDAO.create().dao().findByPrimaryKey(1L);

SQL输出

SELECT `id`,`type_id`,`user_name`,`age`,`create_time`,`update_time`,`deleted`FROM userWHERE `id` = 1LIMIT 1

执行结果

[{"age":10,"createTime":1632150396000,"deleted":true,"id":1,"typeId":1,"updateTime":1632150399000,"userName":"张三"}]

通过条件查询

List<User> userList = UserFastDAO.create().userName().like("张").dao().findAll();

SQL输出

SELECT `id`,`type_id`,`user_name`,`age`,`create_time`,`update_time`,`deleted`FROM userWHERE `user_name` LIKE '%张%'

执行结果

[{"age":10,"createTime":1632150396000,"deleted":true,"id":1,"typeId":1,"updateTime":1632150399000,"userName":"张三"}]

分页查询

PageInfo<User> pageInfo = UserFastDAO.create().userName().like("张").dao().findPage(1, 10);

SQL输出

SELECT `id`,`type_id`,`user_name`,`age`,`create_time`,`update_time`,`deleted`FROM userWHERE `user_name` LIKE '%张%'LIMIT 0 , 10

执行结果

{	"endRow":1,	"hasNextPage":false,	"hasPreviousPage":false,	"isFirstPage":true,	"isLastPage":true,	"list":[		{			"age":10,			"createTime":1632150396000,			"deleted":true,			"id":1,			"typeId":1,			"updateTime":1632150399000,			"userName":"张三"		}	],	"navigateFirstPage":1,	"navigateLastPage":1,	"navigatePages":9,	"navigatepageNums":[1],	"nextPage":0,	"pageNum":1,	"pageSize":10,	"pages":1,	"prePage":0,	"size":1,	"startRow":1,	"total":1}

自定义SQL

String sql = "SELECT u.id,u.user_name,u.type_id,t.id,t.type_name FROM user u LEFT JOIN user_type t on u.type_id = t.id where u.id=${id}";Map<String, Object> data = new HashMap<>();data.put("id", 1);List<CustomSqlUserDTO> all = FastCustomSqlDao.create(CustomSqlUserDTO.class, sql, data).findAll();

SQL输出

SELECT u.id,u.user_name,u.type_id,t.id,t.type_name FROM user u LEFT JOIN user_type t on u.type_id = t.id where u.id=1

执行结果

[	{		"id":1,		"typeId":1,		"userName":"User1",		"userType":{			"id":1,			"typeName":"Type1"		}	}]
/** * 自定义SQL测试DTO */@Table(name = 
                      

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap