general-biz 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
general-biz 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
授权协议 Apache
开发语言 Java
操作系统 跨平台
软件类型 开源软件
开发厂商
地区 国产
提 交 者 sharelords
适用人群 未知
收录时间 2019-12-13

软件简介

general-biz是基于通用mapper的通用biz基础业务实现技术

0. 技术概述

        一般而言,java项目一般都会有controller、service和Dao层,根据业务复杂度加大,service层我们又可以细分为复杂业务层(facade层,将多个简单业务组合成复杂业务功能)和基础业务层(biz层,提供单一基础业务实现)。general-biz技术就是面向基础业务层,提供的统一解决方案。

        general-biz技术底层依赖通用mapper,所以仅适用于Dao层使用mybatis的项目体系。

项目运行环境支持jdk1.7更高版本。

确保项目所在依赖仓库中安装了tools.jar。

如未安装tools.jar,请在jdk安装包中的/lib目录下获取,远程仓库安装自行搜索并参考网上教程,以下是本地maven仓库安装tools.jar依赖:

  1. 本地配置好maven环境(可在cmd小黑窗通过 mvn -v 查看maven版本信息);
  2. 执行以下命令添加依赖(除-Dfile的值替换成自己本地的tools.jar路径,其他项请勿改动):

mvn install:install-file -Dfile=D:\java\jdk1.8.0_66\lib\tools.jar -DgroupId=com.sun.tools -DartifactId=tools -Dversion=1.0 -Dpackaging=jar

由于动态编译,省去接口实现类,为防止springboot项目打包报错,需要去掉springboot的test,pom.xml文件添加如下插件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20.1</version>
    <configuration>
        <skipTests>true</skipTests>
    </configuration>
</plugin>

1. 技术目标

        简化biz层基础业务开发,实现单表基础业务代码简洁易读,通过注解方式实现基础业务实现类“托管”,丢弃基础业务层代码实现,使接口功能更直观,代码量更少,维护更容易。

        项目启动时通过动态编译技术(可选择是否保留java源文件),基于内存字节码动态加载class文件,并注册到spring的ioc容器中。

2. 下载地址

   1)general-biz开源技术Git下载地址

        https://gitee.com/sharelords/general-biz.git

  2)测试案例Git下载地址

       https://gitee.com/sharelords/demo.git

       测试案例使用详见改地址目录下的《测试案例使用教程》文件。

3. 配置方式

    1)所有使用到general-biz技术的biz接口(例如demo-biz中的DemoTestRoleBiz和DemoTestBiz接口)都必须继承Biz接口。

    Biz接口有四个泛型参数<Bo, Entity, D, Dao extends Mapper<Entity>>:

            Bo —— 基础业务模型(用于业务数据输出,可与Entity相同)

            Entity —— 数据模型(用于Dao层数据交互)

            D —— 主键对应的java类型

            Dao —— 数据交互接口(需继承通用mapper的Mapper接口)

    例如:

    

    2)路径扫描

    Springboot项目建议采用 @BizScan 注解式配置biz扫描路径。

    例如:

    

    或

    

    也可在spring的xml配置文件中配置bean,引入BizScannerConfigurer。

    例如:

    

    3)参数说明:

     有以下三个参数:

            basePackages:要扫描的biz接口路径

            remainJavaSrcFile:是否保留java实现类源文件,默认不保留(false),可不配置

            srcFilePath:java实现类源文件保存路径,默认存放在项目同级目录下,自动生成的bizTempJavaFile文件夹内,可不配置。

4. 默认内置的多个方法说明

    Biz基础业务接口继承general-biz中的Biz接口,则具备了以下方法:

        1)新增(保存所有字段)

                Integer save(T var1);

        2)新增(仅保存非null字段)

                Integer saveSelective(T var1);

        3)更新(更新所有字段)

                Integer update(T var1);

        4)更新(更新非null参数)

                Integer updateSelective(T var1);

        5)根据主键id物理删除

                Integer deletePhysically(D var1);

        6)根据主键查询

                T queryByPrimaryKey(D var1);

        7)根据业务模型中非null参数多条件查询

                List<T> queryByBo(T var1);

        8)查询所有

                List<T> queryAll();

        9)根据主键id批量查询

                List<T> queryReCordsByIdList(List<D> var1);

        10)根据业务模型中非null参数查询数量

                Integer queryCountByBo(T var1);

 

5. 自定义biz接口说明

       暂时只支持自定义的查询,自定义biz接口内的方法需以queryBy、queryOneBy、queryPageBy、queryCountBy其中一个开头开头,否则抛出异常提醒。

       除了分页的Page对象,最多只能出现一个自定义对象,各裸露的参数需以@Prop注解声明属性名称(属性名称必须和Entity数据模型中的字段属性名相同),自定义对象的field如果没有@Prop声明,默认与field名称相同。

        继承Biz的接口不能写实现类。

        例如:

        自定义对象:

        

        Biz接口自定义方法:

        

 

6.  general-biz注解说明:

    所在路径:com.sharelords.biz.annotation

    1)check包:参数检查,默认不检查

                CHKBlank:参数校验注解,检查是否为空(包括null和空值)

    2)param包:参数属性包

                Prop:参数名(条件属性名称)

    3)global包:全局控制包,作用于方法

                QueryAllWhileParamAllSkip:条件注解,当所有查询条件都跳过时,使用该注解, 展示所有记录。

    4)join包:条件连接方式,默认以and(并且)连接

                Or:条件连接注解,或

    5)sort包:排序包

                Sort:排序注解,作用于方法上,value指定数据库字段名和排序规则

    6)skip包:条件空跳过包

                NullSkip:条件注解,参数为null,不进行条件组装

                BlankSkip:条件注解,参数为空(null或者”“),不进行条件组装

    7)value包:条件值比较包。默认equal(等于),同类型注解只能出现一个

                Gt:条件注解,大于

                GtEqual:条件注解,大于等于

                Lt:条件注解,小于

                LtEqual:条件注解,小于等于

                NotEqual:条件注解,不等于

                In:条件注解,value在某个集合中

                Like:条件注解,模糊匹配--像(默认左右侧均以%连接)

                NotLike:条件注解,模糊匹配--不像(默认左右侧均以%连接)

    8)extra包:参数条件额外的包(条件为null、空相关),同类型注解只能出现一个,method路径下可多个注解配合使用

                NullOr:条件注解,null或者参数值

                NotNullAnd:条件注解,非null并且参数值

                EmptyOr:条件注解,null或无值或者参数值

                NotEmptyAnd:条件注解,非空并且参数值

          method路径下:

                NotNull:条件注解,数组,非null(该注解存在时,对应名称参数值失效)

                NotEmpty:条件注解,数组,非空(该注解存在时,对应名称参数值失效)

 

附:

经过多项测试,general-biz在idea环境、eclipse环境、tomcat环境、docker环境,对于Maven工程和Springboot工程的支持均表现优异。

测试用例如下:

  1. Maven工程 + Eclipse环境运行:

2. Maven工程 + tomcat环境运行

3. Springboot工程 + IDEA环境运行

4. Springboot工程 + JDK环境运行(jar包启动)

5. Springboot工程 + Docker环境运行

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (1)

加载中
很不错
2019/12/14 19:42
回复
举报
更多评论
暂无内容
发表于软件架构专区
2019/12/12 22:00

general-biz使用教程

general-biz使用教程 准备 项目运行环境支持jdk1.7更高版本。 确保项目所在依赖仓库中安装了tools.jar。 如未安装tools.jar,请在jdk安装包中的/lib目录下获取,远程仓库安装自行搜索并参考网上教程,以下是本地m...

0
0
发表了博客
2018/08/28 15:04

biz

package com.sendinfo.ski.biz; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.g......

0
0
发表了博客
11/21 08:24

https://mp.weixin.qq.com/s?__biz=MzIzNzA5NzM3Ng==&

近日,BoCloud博云推出 BeyondDevOps 产品 v3.4 正式版本,该版本提供端到端 DevOps 的最佳实践落地平台,构建从需求到开发、测试、上线的可视化、自动化的研发过程管理和持续反馈度量体系,帮助企业打造标准化、规范化的研发流水线,实现业务稳定高效的持续运营。 新增亮点 项目管理全新升级 工作项支持多达10种灵活可配...

0
0
发表了博客
2012/06/05 16:28

General Networking

Introduction A network is simply a group of two or more Personal Computers linked together. Many types of networks exist, but the most common types of networks are Local-Area Networks (LANs), and Wide-Area Networks (WANs). In a LAN, computers are connected together within a "local" area (for exam...

0
0
发表了博客
2016/11/09 10:12

java解压biz格式文件

protected void unzip(File root, File zipfile) throws Exception { // 解压文件不存在时返回 if (!zipfile.exists()) { return; } // 释放目录不存时创建 if (!root.exists()) { root.mkdirs(); } // 释放目录不为目录时返回 if (!root.isDirectory()) { return; } FileInputStream fin = new FileInputStream(zipfile...

0
0
发表于数据库专区
2015/07/02 23:19

MySQL general_log

常常遇到这样的问题:数据库访问量很大,想要从SQL方面进行优化。往往开发同学会问:能看到哪些SQL执行比较频繁吗?回道:不能哦,只能看到当前正在运行的SQL和慢日志里记录的SQL。 常常遇到这样的问题:数据库访问量很大,想要从SQL方面进行优化。往往开发同学会问:能看到哪些SQL执行比较频繁吗?回道:不能哦,只能看...

0
6
发表了博客
2018/06/09 13:47

C - Arrival of the General

Problem description A Ministry for Defense sent a general to inspect the Super Secret Military Squad under the command of the Colonel SuperDuper. Having learned the news, the colonel ordered to all n squad soldiers to line up on the parade ground. By the military charter the soldiers should stand...

0
0
发表了博客
2019/08/01 19:52

mysql之general log 日志

开启 general log 将所有到达MySQL Server的SQL语句记录下来。 一般不会开启开功能,因为log的量会非常庞大。但个别情况下可能会临时的开一会儿general log以供排障使用。 相关参数一共有3:general_log、log_output、general_log_file show variables like 'general_log'; -- 查看日志是否开启 set global general_log...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
1 评论
6 收藏
分享
返回顶部
顶部