HS4J Kit 介绍
浏览:2718次 出处信息
HS4J Kit是HS4J的贡献项目, 它的灵感来自ORM(对象关系映射), 通过使用Annotation(注解)对领域对象进行声明, 即可实现对HS4J的调用, 省去编写和维护较为底层的模板式代码.
举例而言, 在一个管理用户信息的业务场景中通常都会有:
01 class User { 02 Long id; 03 String name; 04 Integer age; 05 } 06 07 interface UserRepository { 08 void add(User user); 09 void delete(User user); 10 User findBy(long id); 11 void update(User user); 12 }
01 CREATE TABLE `user_t` ( 02 `id` int(10) unsigned NOT NULL, 03 `name` varchar(50) DEFAULT NULL, 04 `age` int(3) DEFAULT NULL, 05 PRIMARY KEY (`id`), 06 KEY `NAME` (`name`), 07 KEY `AGE` (`age`) 08 ) ENGINE=InnoDB
若直接使用HS4J提供的API, 代码会如HS4J Getting Started的示例一样, 模式化的重复. 对象结构简单还不是问题, 一旦对象字段十多个, 而且还老是要变化, 可想而知噩梦才刚刚开始.
使用Kit提供的注解来声明的话, 一切HS4J的调用操作全部将透明化:
01 @Repository(database="test", table="user_t") 02 interface UserRepository { 03 @HandlerSocket(INSERT) 04 @EntityClass(User.class) 05 void add(User user); 06 ... 07 }
接下来要写的代码就是:
01 HSClient hsClient = new HSClientImpl(new InetSocketAddress(9999)); 02 ProxyFactory proxyFactory = new HandlerSocketProxyFactory(hsClient); 03 UserRepository proxy = proxyFactory.newProxyOf(UserRepository.class); 04 05 proxy.add(new User(1L, "killme2008", 18)); 06 07 hsClient.shutdown();
抛开必要的初始化和销毁的代码, 除了一行必须的业务代码没有任何多余的.
这里没有配置表的列(Columns), 而是通过EntityClass来告诉Kit默认使用User的所有字段映射为表的所有列, 前提是User的字段名与表列名一致.
若列名与字段名无法一致的时候, 可以ColumnName来声明:
01 class User { 02 @ColumnName("uid") 03 Long id; 04 ... 05 }
查询方法怎么声明呢?
01 @HandlerSocket(FIND) 02 @EntityClass(User.class) 03 ResultIteratorfindBy(@Operator(EQ) long id);
业务代码会是:
01 ResultIteratoritr = proxy.findBy(1L); 02 while (itr.next()) { 03 User user = itr.get(); 04 ... 05 }
缺省情况下, 使用表的主键作为Index的key. 与add不同的是:
查询场景通常会有分页的需求, 这就会使用到Offset和Limit两个注解:
01 @HandlerSocket(FIND) 02 @Index("AGE") 03 @EntityClass(User.class) 04 ResultIteratorfindUserAgeGreaterThan(@Operator(GT) int age, @Offset int offset, @Limit int limit);
上面都是全字段写入或读取, 在部分修改的场景中如何注解呢?
01 @HandlerSocket(UPDATE) 02 @Columns("age") 03 @Index("NAME") 04 void updateUserAge(@Operator(EQ) String name, int age);
通过Colunms告诉HS4J打开的Index仅对age进行操作, 并以name为key, 是用age参数作为value.
修改多值的情况下, 请保证参数声明的顺序和Columns定义的顺序一致:
01 @HandlerSocket(UPDATE) 02 @Columns({"name", "age"}) 03 void updateUserNameAndAge(@Operator(EQ)long id, String name, int age);
主要的用法介绍到此, 还其他的用法就不再累述了, 请参看单元测试代码举一反三吧!
建议继续学习:
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:如何萃取海量数据的价值
后一篇:趣题:公司应该雇用多少员工? >>
文章信息
- 作者:聚石 来源: 淘宝数据平台与产品部官方博客 tbdata.org
- 标签: HS4J Kit
- 发布时间:2011-06-14 13:48:57
建议继续学习
近3天十大热文
- [56] IOS安全–浅谈关于IOS加固的几种方法
- [55] 图书馆的世界纪录
- [55] 如何拿下简短的域名
- [55] android 开发入门
- [53] Oracle MTS模式下 进程地址与会话信
- [53] Go Reflect 性能
- [50] 【社会化设计】自我(self)部分――欢迎区
- [49] 读书笔记-壹百度:百度十年千倍的29条法则
- [41] 程序员技术练级攻略
- [35] 视觉调整-设计师 vs. 逻辑