{"id":16411400,"url":"https://github.com/kingschan1204/jfastquery","last_synced_at":"2025-04-22T16:31:59.187Z","repository":{"id":82558311,"uuid":"82250792","full_name":"kingschan1204/jfastquery","owner":"kingschan1204","description":"一个用java实现的快速查询组件:whale: ,支持mysql,oracle,sqlserver","archived":false,"fork":false,"pushed_at":"2019-05-16T10:26:06.000Z","size":94,"stargazers_count":7,"open_issues_count":0,"forks_count":7,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-02T01:41:29.815Z","etag":null,"topics":["freemarker","java","jsqlparser","sql"],"latest_commit_sha":null,"homepage":"https://kingschan1204.github.io/jfastquery/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kingschan1204.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-02-17T02:59:09.000Z","updated_at":"2025-01-28T04:30:50.000Z","dependencies_parsed_at":"2023-06-18T11:03:05.296Z","dependency_job_id":null,"html_url":"https://github.com/kingschan1204/jfastquery","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kingschan1204%2Fjfastquery","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kingschan1204%2Fjfastquery/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kingschan1204%2Fjfastquery/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kingschan1204%2Fjfastquery/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kingschan1204","download_url":"https://codeload.github.com/kingschan1204/jfastquery/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250277244,"owners_count":21404015,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["freemarker","java","jsqlparser","sql"],"created_at":"2024-10-11T06:45:23.734Z","updated_at":"2025-04-22T16:31:59.181Z","avatar_url":"https://github.com/kingschan1204.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# jfastQuery\n\n\u003e 一个用java实现的快速查询组件,支持三种数据库\n\n- mysql\n- oralce\n- sqlserver\n\n### 背景\n\u003e 解决在java jdbc 开发中拼接sql语句的情景，通常sql会和java代码混在一起可读性差，像古代妇女的裹脚布一样，又长又臭。\n\n### 特性\n\n- 分页\n- 排序\n- 动态传参\n- 动态组合where条件\n- 支持freemarker表达式（在sql里写ftl指令）\n- `让Java和sql语句分离`\n\n### 查询条件关键字\n\n|关键字|说明|\n|-|-|\nlogic|and or 运算符\noperator|对应下方表格 where 操作符\ntable|sql表别名\nfield| 字段名称或者括号( )\nvalue|值\nvalue2|日期字段下的第2个值\ntype|字段类型：TEXT,NUMBER,DATE,STRING,SELECT,DATETIME,BOOLEAN\n\n### where 操作符\n\n|类型|jfastQuery|英文|\n|-|-|-|\n等于|eq|equals\n不等于|neq| not equals\n大于|gt| greater than\n小于|lt|less than\n大于等于|gte|Greater than or equal to\n小于等于|lte|Less than equal\n介于|bw|between\n包含|c|Contain\n左包含|sw| start with\n右包含|ew|end with \n集合|...| in \n空|nl|is null\n非空|nnl|is not null\n\n### 配置文件`fastquery.properties`\n```\n#jfastquery默认数据源实现类\napp.default.datasource=com.kingschan.fastquery.test.DruidDatasourceConfigure\n#对应pageindex关键字\napp.keyword.page.index=offset\n#对应pagesize关键字\napp.keyword.page.size=limit\n#对应where 条件组合json字符串关键字\napp.keyword.filter=filter\n# 对应排序字段\napp.keyword.sort=sort\n# 对应排序方式关键字\napp.keyword.order=order\n```\n\n### 默认数据源实现\n实现类：`com.kingschan.fastquery.conf.Configure`\n```\npublic class DruidDatasourceConfigure implements Configure{\n\n\t@Override\n\tpublic DataSource getDataSource() throws Exception {\n\t\tMap\u003cString, String\u003e properties = new HashMap\u003cString, String\u003e();\n\t\tproperties.put(\"url\", \"jdbc:mysql://ip:端口/数据库名\");\n\t\tproperties.put(\"username\", \"用户名\");\n\t\tproperties.put(\"password\", \"密码\");\n\t\tproperties.put(\"filters\", \"stat\");\n\t\tproperties.put(\"maxActive\", \"20\");\n\t\tproperties.put(\"initialSize\", \"1\");\n\t\tproperties.put(\"maxWait\", \"60000\");\n\t\tproperties.put(\"minIdle\", \"1\");\n\t\tproperties.put(\"timeBetweenEvictionRunsMillis\", \"60000\");\n\t\tproperties.put(\"minEvictableIdleTimeMillis\", \"300000\");\n\t\tproperties.put(\"testWhileIdle\", \"true\");\n\t\tproperties.put(\"testOnBorrow\", \"false\");\n\t\tproperties.put(\"testOnReturn\", \"false\");\n\t\tproperties.put(\"poolPreparedStatements\", \"true\");\n\t\tproperties.put(\"maxOpenPreparedStatements\", \"20\");\n\t\treturn DruidDataSourceFactory.createDataSource(properties);\n\t}\n\n}\n```\n\n\n## java运行demo参考\n```\npublic class QueryDispacherTest {\n    private static Logger log = LoggerFactory.getLogger(QueryDispacherTest.class);\n\n    public static void main(String[] args) {\n        List\u003cSqlCondition\u003e conditions=new ArrayList\u003cSqlCondition\u003e();\n        conditions.add(new SqlCondition(\"and\",\"a.req_datetime\",\"DATE\",\"bw\",\"2017-01-01\",\"2017-02-01\"));\n        String filter=JSONArray.fromObject(conditions).toString();\n        //查询方案所有传入参数\n        Map\u003cString,Object\u003e map = new HashMap\u003cString, Object\u003e();\n        map.put(\"filter\",filter);//查询条件\n        map.put(\"sort\",\"req_datetime\");//排序字段\n        map.put(\"order\",\"desc\");//排序的方式\n        map.put(\"limit\",\"10\");//显示条数\n        map.put(\"offset\",\"1\");//第几页\n\n        map.put(\"blog\",\"kingschan\");//传入变量blog\n\n\n        SqlCommand cmd = new SqlCommand();\n        cmd.setSql(\"select req_ip,count(1) total from blog_request_log a where a.req_blog='${blog}'  group by req_ip\");\n        cmd.setDBtype(DbType.MYSQL);\n        DataTransfer dt=  new LogicHandleDispacher().handleDispacher(map,cmd,new Class[]{\n                BuildConditionLogicHandle.class,\n                BuildVariableLogicHandle.class,\n                BuildPagingLogicHandle.class,\n                ExecuteTotalLogicHandle.class,\n                ExecuteMapQueryLogicHandle.class\n        });\n        log.info(\"{}\", JSONObject.fromObject(dt));\n    }\n}\n```\n\n## servlet 运行demo参考类\n```\npublic class ServletTest extends HttpServlet{\n\n    private static final long serialVersionUID = 1L;\n\n    //http://localhost/jfastquery/test?offset=1\u0026limit=30\u0026sort=req_datetime\u0026order=desc\n    @Override\n    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,\n            IOException {\n        //查询方案所有传入参数\n        Map\u003cString,Object\u003e map =ServletUtil.getParameterMap(req);\n        List\u003cSqlCondition\u003e conditions= new ArrayList\u003cSqlCondition\u003e();\n        conditions.add( new SqlCondition(\"and\",\"a.req_datetime\",\"DATE\",\"bw\",\"2017-01-01\",\"2017-02-01\"));\n        conditions.add( new SqlCondition(\"and\",\"a.req_blog\",\"STRING\",\"eq\",\"kingschan\",null));\n        JSONArray jons=JSONArray.fromObject(conditions);\n        map.put(\"filter\",jons);//查询条件\n        map.put(\"sort\",\"id\");//排序字段\n        map.put(\"order\",\"desc\");//排序的方式\n        map.put(\"limit\",\"10\");//显示条数\n        map.put(\"offset\",\"1\");//第几页\n\n\n        WebLogicHandleDispacher dispa = new WebLogicHandleDispacher(req, resp);\n        SqlCommand cmd = new SqlCommand();\n        cmd.setSql(\"select * from blog_request_log a limit 10\");\n        cmd.setDBtype(DbType.MYSQL);\n        dispa.handleDispacher(map,cmd, new StandardOutPut(),\n            new Class[]{\n                BuildConditionLogicHandle.class,\n                BuildVariableLogicHandle.class,\n                BuildPagingLogicHandle.class,\n                ExecuteTotalLogicHandle.class,\n                ExecuteMapQueryLogicHandle.class\n            });\n    }\n}\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkingschan1204%2Fjfastquery","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkingschan1204%2Fjfastquery","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkingschan1204%2Fjfastquery/lists"}