开源ORM工具,请高手指点

cloud21
09-07-21 3 283

利用闲暇时间写了一个ORM工具,例子代码如下。


import com.prime.orm.annotations.Column;
import com.prime.orm.annotations.GeneratedValue;
import com.prime.orm.annotations.GenerationType;
import com.prime.orm.annotations.Id;
import com.prime.orm.annotations.Table;
import com.prime.orm.annotations.Type;

/**
* * * 项目名称:orm * 类名称:User * 类描述:实体类 * 创建人:YinHao * 创建时间:2009-7-20 下午07:58:29 *
* 修改人:Administrator * 修改时间:2009-7-20 下午07:58:29 * 修改备注: * @version *
*/

@Table(
"tb_user")
// 对应数据库表名称
public class User {

/**
* @Id--->主键ID
* @GneratedValue--->主键生成器
*/

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
long id;

/**
* ip---->基本字段
*
* @Column 为 ORM 字段配置信息 name--->字段名称,insertable--->是否参与添加,unique--->字段是否唯一
*/

@Column(name =
"ip", length = 21, nullable = true, insertable = true, unique = false)
byte ip = 1;

/**
* name--->基本字段,length--->字段长度,nullable--->是否允许为空,updatable--->是否允参与更新
*/

@Column(name =
"name", length = 21, nullable = true, updatable = true, unique = false)
String name =
"尹浩";

/**
* secret--->基本字段
*/

@Column(name =
"secret", length = 22)
String secret =
"prime";

/**
* * 创建一个新的实例 User. * * 默认构造函数必须声明
*/

public User() {

}

public User(String name) {
this.name = name;
}

public User(String name, String secret) {
this.name = name;
this.secret = secret;
}



}



主测试类


import java.util.List;

import com.prime.orm.ORM;
import com.prime.orm.Predicate;

/**
* * * 项目名称:orm * 类名称:MainTest * 类描述:测试类 * 创建人:cloud * 创建时间:2009-7-15 上午10:48:32
* * 修改人:Administrator * 修改时间:2009-7-15 上午10:48:32 * 修改备注: * @version *
*/

public class MainTest {

/**
* * main(这里用一句话描述这个方法的作用) * TODO(这里描述这个方法适用条件 – 可选) * TODO(这里描述这个方法的执行流程 –
* 可选) * TODO(这里描述这个方法的使用方法 – 可选) * TODO(这里描述这个方法的注意事项 – 可选) * @param name * @param @return
* 设定文件 * @return String DOM对象 * @Exception 异常对象 * @since
* CodingExample Ver(编码范例查看) 1.1
*/

public static void main(String[] args) {
/**
* 开启日志记录功能
*/

ORM.openLog();
ORM.setBriefMsg(
"操作员:cloud");
/**
* 开启事务
*/

ORM.beginTransactioin();
/**
* 1、数据表物理操作| 根据实体类生成数据表结构 |根据实体类删除数据表记录
*/

ORM.dropTable(User.class);
ORM.createTable(User.class);
ORM.commit();

/**
* 实例化实体类
*/


User u1 = new User(
"cloud", "prime");
User u2 = null;

/**
* 映射实体到数据库
*/

ORM.beginTransactioin();
ORM.save(u1);
ORM.commit();

/**
* 通过新实例具有的查询条件,从数据库中载入对象到u2
*/

ORM.beginTransactioin();
u2 = (User) ORM.search(new User(
"cloud"));
System.out.println(
"载入新对象后的密码为:" + u2.getSecret());
u2.setName(
"NewName");
u2.setId(new Long(0));
ORM.commit();
ORM.save(u2);

/**
* // * 提供分页功能 //
*/


ORM.setTransactioin(true);
List ls = ORM.load(User.class, 1, 2);
System.out.println(
"实例总数为:" + ls.size());

/**
* 提供批处理功能,此处为批量删除根据查询条件
*/

List<User> l = ORM.search(new Predicate(User.class) {
public boolean match(User u) {
if (
"cloud".equals(u.getName())
||
"prime".equals(u.getSecret())) {
System.out.println(
"删除存在记录为=" + u.getId() + u.getName()
+ u.getSecret());
ORM.remove(u);

return true;
} else {
return false;
}
}

});
}
}

newthinker
2009-07-23 15:05

hibernate?

cloud21
2009-07-24 12:08

不是hibernate,但是 设计零配置的时候用annotation,命名的规则借鉴了 hibernate

该工具主要通过ORM定义了N多的使用接口进行持久化操作,用ThreadLocal进行线程安全。

我现在想吧重心转移,想添加缓存功能,
换句话说,我想将大量的对象保存到缓存中,而非一定要放到数据库中,毕竟内存很快,符合项目的需要,用缓存维护对象的生命周期很理想应该。

不知道谁有这方面经验请提供下。

同时我想了解下,我用Mysql

想实现


Application ORM cache DB

在app运行时候可以通过ORM在缓存中进行CURE 操作。
同时,我的问题是,能否实现在DB中对应的表记录发生变动的时候,从数据库方向更新缓存对象。

谢谢。

newthinker
2009-08-03 17:12

不管你怎么想的,总之在你接下来实现cache之前,我建议你阅读jpa规范。因为我想看到的是你实现了jpa规范的持久化框架,否则不太可能得到用户的。。。jpa1.0是没有二级缓存的,2.0开始有了。所以你设计持久化框架的话,最好能照着jpa2.0的接口实施。这样你可以得到大量用户,对广大用户来说,也多了一种jpa的实现。你看如何?