1 Star 0 Fork 1

诚夏徕 / happiness

forked from 微徕soft / happiness 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

框架介绍

  • 在QueryDSL这个可以适配各类ORM框架的一个通用的查询框架基础之上进行二次封装。
  • 大量封装了满足实际业务场景的CRUD方法;后端尽可能不去面对数据库操作dao层代码;
   // QuseyDSL是专注于通过Java API构建类型安全的SQL查询。
  queryFactory.select(qBlogInfo.blogTitle,qBlogInfo.blogContent.from(qBlogInfo)

一 理念:面向POJO进行研发

  • 慢病管理平台借助queryDSL这个查询能力以及我们对于前后端交互的一些痛点的理解;
  • 按照框架约定的规则来对DO、VO、DTO、QUERY的类及类属性进行命名或采用指定的接口;
  • 将外部、内部产生的各类POJO数据传入对QueryDSL框架二次封装的CRUD方法里,数据操作的处理逻辑交封装的各类方法处理就能直接返回需要的视图;
    // 查询 vo查询结果 query 查询条件
    List<T> query(Class<T> voClass, Request query){
    //编辑  dto 保存对象  t 返回的对象类型
    public <T extends IdBean> T save(E dto, Class<T> t);

二 目标

  1. 产出符合前端需求的接口数据格式;
  2. 封装的方法能够覆盖85%以上业务的CRUD代码;
  3. 让前后端配合更融洽,都能专注把更多精力投入到各自的领域里;
  4. 成为生产力工具,提升基础研发效率;

三 数据查询

  1. 对查询方法入参VO的Class类信息进行分析,完成相关select语句的创建和执行,将查询结果封装到VO对象上返回;
  2. 框架对查询方法里的查询条件Query对象进行where条件的解析,支持常用的in,like,between等;
  3. 支持对query对象能够用链式调用的方式对从视图层传入query进行系统预设条件的设置;
    userService.query(UserVo.class,userQuery);
    userQuery.and("username").eq("test");

3.1 VO返回给视图的对象

  • 返回视图层需要的数据结构
  1. 多对一,查询多的一方数据,将1方的数据打平一起展示
public class UserVo extends TogetherDslVo<SysUser> {
    String username; // SysUser的字段
    String orgname; //机构表(1方)机构名称
    @Override
    public Class[] togetherItemClazz() {
        return togetherItemClazz(SysOrg.class);
    }
}
  1. 一对多和多对多
  • 将多方数据封装到本方,一次返回给前端
public class GroupVo extends IdDto<SysGroup> {
    public String groupName; //组名称
    public List<RoleVo> roles; //角色组集合 多对多 级联关系表
    public List<UserVo> users; //角色组用户 1对多,在多方维护关系
}

3.2 QUERY对象

  1. 完成查询对象的定义,即完成查询语句的封装
  • 支持各种查询条件
public class UserQuery extends CustomQuery implements IPage {
    public Like areacode; //like 模糊匹配查询
    public In<String> orgcode; // 范围查询接收数组
    public Bettween<Integer> age;  // 上下限范围查询
    public Like deptName; // 能支持关联表的属性查询条件
	public String idno; // eq 查询
}

四 数据编辑

   class UserDto extend IdDto<SysUser>{
        String userName;
        String pwd;
        List<Role>
   }
    // api save 
    save(userDto);
	save(user,entity->{
      if(entity.getId()==null){
          ((SysUser)entity).setPassword(new BCryptPasswordEncoder().encode(user.getPwd()));
      }
      return entity;
  });
  1. 支持1对多,多对多的数据封装到一个DTO,可以保存完成多表数据的新增或修改。
  2. 保存方法第2个参数传入回调函数,将在保存前可以对数据进行逻辑处理。
  3. 多表关联保存通常会遇见的问题
  • 子表数据级联保存时没有给全,没有给的这部分数据是删除还是保留?
  • 关联保存时,部分子表数据删除、部分新增、部分修订、部分不更改如何一次提交后端处理?

五 数据删除

  • 支持对删除对象的级联对象进行操作,以及级联对象进行的递归删除操作;
  • DO实体类继承指定接口;
public class SysGroup extends BaseBean implements DelConf {
   public String name;// 角色组名称
   @Override
   public DelRs[] delRs() {
      return new DelRs[]{
              DelRs.ofClear(SysUser.class) //级联清空 ofDel()  级联清除
      };
   }
}

六 和JPA(HIbernate)对比

  1. 贴近前端
  • 虽然都支持级联查询和写入,hibernate是对数据库关联实体类全量字段的操作,不易用和实际业务场景有差距;
  • 本框架查询和写入的级联操作都可以是对封装后的DTO(部分字段)进行级操作,
  • 能直接把前端提交的dto数据传入封装的方法,无需多层转换;
  1. 灵活性高:
  • 在实体类里(entity)不需要hibernate里的配置表关系注解代码,也不需在要有外键关系。
  • 框架按照命名约定即可取到关联关系。所以适合在新系统上引入该框架

七 其它方面

  1. 查询统计 (50%)
  • 一般查询语句+聚合函数= 统计语句
  • 将有相同维度(地区、机构、时间)的统计语句进行行级叠加以及列级叠加形成统计报表;
  1. 权限处理 (20%)
  • 能够实现同一角色的不同用户的权限差异
  • 同一角色不同地区的用户权限差异
  • 差异体现在操作权限、查询权限、字段权限

空文件

简介

对前端最友好的后端API框架,提升开发幸福感 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/vlifepro/happiness.git
git@gitee.com:vlifepro/happiness.git
vlifepro
happiness
happiness
master

搜索帮助