开源ORM工具,请高手指点

09-07-21 cloud21
利用闲暇时间写了一个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;
	}

	

}
<p>

主测试类

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;
				}
			}

		});
	}
}

<p>

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的实现。你看如何?

猜你喜欢