Redkale 功能

-

        Redkale虽然不到1M大小,但是麻雀虽小五脏俱全。既可作为服务器使用,也可当工具包使用。作为独立的工具包提供以下功能:
+

        Redkale虽然只有1M左右大小,但是麻雀虽小五脏俱全。既可作为服务器使用,也可当工具包使用。作为独立的工具包提供以下功能:
                1、convert包提供JSON的序列化和反序列化功能,类似Gson、Jackson。
                2、convert包提供Java对象二进制的序列化和反序列化功能,类似Protobuf。
                3、source包提供很简便的数据库操作功能,类似JPA、Hibernate。
diff --git a/source.html b/source.html index ebf274d2a..598b926cb 100644 --- a/source.html +++ b/source.html @@ -71,7 +71,7 @@ find查找单个对象 queryList查询对象的List集合 querySheet查询对象的Sheet页式集合 - directXXX直接运行SQL语句,用于复杂的关联查询与更新 + directXXX直接运行SQL语句,用于复杂的关联查询与更新(仅限DataSqlSource)

        以上接口除了directXXX,其他都有等同的异步接口。insert、delete、update接口与JPA同名接口用法一样。DataSource提供了丰富的查询接口,且有独特的翻页查询功能。每以系列的方法主要重载三类: 单个字段过滤、FilterBean过滤和FilterNode过滤。
@@ -193,57 +193,56 @@ public class LoginRecord extends BaseEntity { @Id - @Column(comment = "主键ID; 值=UUID+create36time") - private String loginid = ""; //主键ID; 值=UUID+create36time + @Column(comment = "主键ID; 值=create36time(9位)+'-'+UUID(32位)") + private String loginid = ""; //主键ID; 值=create36time(9位)+'-'+UUID(32位) - @Column(updatable = false, comment = "C端用户ID") + @Column(updatable = false, comment = "C端用户ID") private long userid; //C端用户ID - @Column(updatable = false, comment = "登录网络类型; wifi/4g/3g") - private String netmode = ""; //登录网络类型; wifi/4g/3g + @Column(updatable = false, comment = "登录网络类型; wifi/4g/3g") + private String netmode = ""; //登录网络类型; wifi/4g/3g - @Column(updatable = false, comment = "APP版本信息") - private String appversion = ""; //APP版本信息 + @Column(updatable = false, comment = "APP版本信息") + private String appversion = ""; //APP版本信息 - @Column(updatable = false, comment = "APP操作系统信息") - private String appos = ""; //APP操作系统信息 + @Column(updatable = false, comment = "APP操作系统信息") + private String appos = ""; //APP操作系统信息 - @Column(updatable = false, comment = "登录时客户端信息") - private String loginagent = ""; //登录时客户端信息 + @Column(updatable = false, comment = "登录时客户端信息") + private String loginagent = ""; //登录时客户端信息 - @Column(updatable = false, comment = "登录时的IP") - private String loginaddr = ""; //登录时的IP + @Column(updatable = false, comment = "登录时的IP") + private String loginaddr = ""; //登录时的IP - @Column(updatable = false, comment = "创建时间") + @Column(updatable = false, comment = "创建时间") private long createtime; //创建时间 /** 以下省略getter setter方法 */ - + //创建对象 public static void main(String[] args) throws Throwable { LoginRecord record = new LoginRecord(); long now = System.currentTimeMillis(); record.setCreatetime(now); //设置创建时间 - String create36time = Long.toString(now, 36); //时间的36进制 - if (create36time.length() < 9) create36time = "0" + create36time; //当前时间值的36进制只可能是8位或9位,不足9位填充0 - record.setLoginid(Utility.uuid() + create36time); //主键的生成规则 + record.setLoginid(Utility.format36time(now) + "-" + Utility.uuid()); //主键的生成规则 //.... 填充其他字段 source.insert(record); } + public static class TableStrategy implements DistributeTableStrategy<LoginRecord> { - private static final String dayformat = "%1$tY%1$tm%1$td"; + private static final String dayformat = "%1$tY%1$tm%1$td"; //一天一个表 - private static final String yearformat = "%1$tY"; + private static final String yearformat = "%1$tY"; //一年一个库 //过滤查询时调用本方法 @Override public String getTable(String table, FilterNode node) { - Serializable day = node.findValue("#day"); + Serializable day = node.findValue("#day"); //LoginRecord没有day字段,所以前面要加#,表示虚拟字段, 值为yyyyMMdd格式 if (day != null) getTable(table, (Integer) day, 0L); //存在#day参数则直接使用day值 - Serializable time = node.findValue("#createtime"); //存在createtime则使用最小时间,且createtime的范围必须在一天内,因为本表以天为单位建表 + Serializable time = node.findValue("createtime"); //存在createtime则使用最小时间,且createtime的范围必须在一天内,因为本表以天为单位建表 return getTable(table, 0, (time == null ? 0L : (time instanceof Range ? ((Range.LongRange) time).getMin() : (Long) time))); } @@ -256,15 +255,14 @@ //根据主键ID查询单个记录时调用本方法 @Override public String getTable(String table, Serializable primary) { - String loginid = (String) primary; - String create36time = loginid.substring(loginid.length() - 9); //固定最后9位为创建时间的36进制值 - return getTable(table, 0, Long.parseLong(create36time, 36)); + String id = (String) primary; + return getTable(table, 0, Long.parseLong(id.substring(0, 9), 36)); } - private String getTable(String table, int day, long createtime) { - int pos = table.indexOf('.'); - String year = (day > 0 ? "" + day / 10000 : String.format(yearformat, createtime)); - return "platf_login_" + year + "." + table.substring(pos + 1) + "_" + (day > 0 ? day : String.format(dayformat, createtime)); + private String getTable(String table, int day, long createtime) { //day为0或yyyyMMdd格式数据 + int pos = table.indexOf('.'); + String year = day > 0 ? String.valueOf(day / 10000) : String.format(yearformat, createtime); //没有day取createtime + return "platf_login_" + year + "." + table.substring(pos + 1) + "_" + (day > 0 ? day : String.format(dayformat, createtime)); } } }