写点什么

JavaOrm 框架 - 基础文档

作者:demo123567
  • 2023-06-15
    重庆
  • 本文字数:3396 字

    阅读完需:约 11 分钟

基础文档

使用简介

项目地址: https://github.com/hyutils/hyorm


简介地址:https://mp.weixin.qq.com/s/QypOXRgCnt7e6Znig_89rQ


使用方法:引入 maven


<dependency>        <groupId>com.hyutils</groupId>        <artifactId>core</artifactId>        <version>1.0-SNAPSHOT</version></dependency>
复制代码

前提

所有的操作都需要创建一个简单 Query 对象,在并发环境中,请确保不同的查询语句创建不同的 Query 对象


SimpleQuery query = new SimpleQuery(CrawlTaskHistory.class);
复制代码

注意事项

本框架使用“约定大于配置”思想进行设计,所以有一些默认的数据库建表约定 1、删除标记和删除时间使用 deleted_mark/deleted_datetime2、自增 id 为 long 型 id,其他类型未进行测试

查询

以下方法均有各自情况下的重载方法 page 方法 pageReturnListMap 方法 findByCondition 方法 findByConditionReturnListMap 方法

简单的调用例子

SimpleQuery query = new SimpleQuery(CrawlTaskHistory.class);List<CrawlTaskHistory> ans = query.page(Json.toMap(Json.toJson(CrawlTaskHistory.builder().taskNameLike("数据库层测试").build())), 1, 10);
复制代码

更新

updateById 方法 update 方法 updateByCondition 方法

删除

delete 方法

插入

insert 方法 batchInsert 方法

where 中字段支持的查询方式

查询操作首先使用一个 hashmap 作为入参(您可以使用简单对象,然后利用 Json 转 map 的方式转成 map)


Map<String,Object> condition = new HashMap<>();Map<String,Object> condition = Json.toMap(Json.toJson(object));
复制代码

字段的等值操作

设数据库字段名为 a,则在入参 map 中放入 a 的值则可以进行等值操作


condition.put("a","1");
复制代码

字段 in 操作

设数据库字段为 a,则在 map 中放入 a_list 即可以对字段进行 in 操作


condition.put("a_list",new ArrayList<String>(){            {                add("1");                add("2");            }        });
复制代码

字段 like 操作

设数据库字段名为 a,如果是左 Like,则在字段值左边加上 LikeParamExtension.PARAM_LEFT_LIKE;如果是右 Like,则在字段值右边加上 LikeParamExtension.PARAM_RIGHT_LIKE;


public Builder cronPeriodLike(String cronPeriod) {            if (Objects.isNull(cronPeriod)) {                this.target.setCronPeriod(cronPeriod);                return this;            }            this.target.setCronPeriod(LikeParamExtension.PARAM_LEFT_LIKE + cronPeriod + LikeParamExtension.PARAM_RIGHT_LIKE);            return this;        }
public Builder cronPeriodLeftLike(String cronPeriod) { if (Objects.isNull(cronPeriod)) { this.target.setCronPeriod(cronPeriod); return this; } this.target.setCronPeriod(LikeParamExtension.PARAM_LEFT_LIKE + cronPeriod); return this; }
public Builder cronPeriodRightLike(String cronPeriod) { if (Objects.isNull(cronPeriod)) { this.target.setCronPeriod(cronPeriod); return this; } this.target.setCronPeriod(cronPeriod + LikeParamExtension.PARAM_RIGHT_LIKE); return this; }
复制代码


注意:like 操作是改值而不是改字段的名字

字段不等于操作

设数据库字段为 a,如果 a 为数字类型,则将该字段的值乘以-1 即可


public Builder linkTypeNot(Integer linkType) {            if (Objects.isNull(linkType)) {                this.target.setLinkType(linkType);                return this;            }            this.target.setLinkType(-1 * linkType);            return this;        }
复制代码


如果 a 为字符串类型,则在值前面加上“-1*”


public Builder nameNot(String name) {            if (Objects.isNull(name)) {                this.target.setName(name);                return this;            }            this.target.setName("-1*" + name);            return this;        }
复制代码

字段不在某个列表中(not in)

设数据库字段为 a,则在字段的末尾加上_not_list 即可


condition.put("a_not_list",new ArrayList<String>(){            {                add("1");                add("2");            }        });
复制代码

时间类型字段的大于小于操作

设字段为 a,如果是大于某个时间,则在 a 后面加上_bigger_than,如果是小于某个时间,则加上_lower_than


condition.put("a_lower_than",LocalDateTime.now());condition.put("a_bigger_than",LocalDateTime.now());
复制代码

只查询某些字段的方式

在查询里面加入一个 select_fields 的字段,该字段是一个符合字段,结构如下


public class SelectFields {    private List<String> fields;
public SelectFields() { this.fields = new ArrayList<>(); }
public List<String> getFields() { return fields; }
public void setFields(List<String> fields) { this.fields = fields; }
public SelectFields select(String field){ this.fields.add(field); return this; }}
复制代码


使用的方法为


condition.put("select_fields",new SelectFields().select("a").select("b"));
复制代码

查询时排序操作

在查询里面加入一个 select_orders 的字段,该字段是一个符合字段,结构如下


public class SelectOrders {    private List<SelectOrder> orders;
public SelectOrders() { this.orders = new ArrayList<>(); }
public List<SelectOrder> getOrders() { return orders; }
public void setOrders(List<SelectOrder> orders) { this.orders = orders; }
public SelectOrders then(String key, String order) { this.orders.add(new SelectOrder(key, order)); return this; }}public class SelectOrder { private String key; private String order;
public SelectOrder() { }
public SelectOrder(String key, String order) { this.key = key; this.order = order; }
public String getKey() { return key; }
public void setKey(String key) { this.key = key; }
public String getOrder() { return order; }
public void setOrder(String order) { this.order = order; }}
复制代码


使用的方法为


condition.put("select_orders",new SelectOrders()                .then("max_reliability", "desc")                .then("link_father", "desc")                .then("link", "desc")                .then("id", "desc"));
复制代码

最佳实践

在上述的文档中,我们在使用的时候都是手动去创建和添加 map 里面的变量,这对于我们的使用来说都不太方便。基于此,框架也提供了基于简单对象的模式的方法。只需要在简单对象中生成 getter、setter 和 builder 方法,就可以直接将上述代码转化为 java 对象的编程方式。


query.page(Json.toMap(Json.toJson(TaskBadMessage.builder()                .selectFields(new SelectFields().select("id").select("task_id"))                .selectOrders(new SelectOrders()                        .then("modified_time","desc")                        .then("created_time","desc"))                .idList(new ArrayList<Long>(){                    {                        add(1L);                        add(2L);                        add(3L);                    }                })                .idNot(1L)                .pageTitleLike("测试")                .contentNot("123")                .createdTimeBiggerThan(LocalDateTime.now().minusMonths(2L))                .build())),1,10);
复制代码


最终便达到了可以使用直观的方式写结构化单表 SQL 的目的。对于上述简单对象的生成,可以使用 GenerateOrm 对象里面的 getSimpleModel 生成 model 对象。从而快速进行使用

用户头像

demo123567

关注

还未添加个人签名 2018-05-03 加入

还未添加个人简介

评论

发布
暂无评论
JavaOrm框架-基础文档_Java ORM_demo123567_InfoQ写作社区