<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>alin_ass</title>
    <description>想比说重要，做比想重要</description>
    <link>http://alin-ass.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>no sql jdbc orm[5-18]</title>
        <author>alin_ass</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://alin-ass.javaeye.com">alin_ass</a>&nbsp;
          链接：<a href="http://alin-ass.javaeye.com/blog/80268" style="color:red;">http://alin-ass.javaeye.com/blog/80268</a>&nbsp;
          发表时间: 2007年05月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近几天在写的一个jdbc orm, 放上来交流学习~~<br /><br /><strong>目标:</strong><br />no sql, no map , no sql, no map...............................(省略一百遍<img src="/images/smiles/icon_wink.gif"/>).<br /><br /><strong>约束&特点:</strong><br />显示代理<br />操纵proxy domain getter/setter等于构建sql, 重构对象即重构sql<br />domain对象属性和column名字相同<br />domain有接口<br />domain是javabean<br />某些dao接口参数需要beanproxy(主要是update的接口)<br />基本没有级联orm<br /><br /><br /><strong>待实现:</strong><br />多表查询<br />稍微复杂的sql生成<br />考虑local&remote Object cache,query cache...<br /><br />dao example:<br /><pre name="code" class="java">
	**
 * @version 2007-5-4
 * @author xalinx at gmail dot com
 * 
 */
public class UserDaoImpl extends DaoSupport&lt;User, Long> implements UserDao {
	private final ParameterizedRowMapper&lt;UserImpl> rowMapper = new AutoRowMapper&lt;UserImpl>() {
	};

	public void deleteById(Long id) {
		// create proxy
		BeanMonitor&lt;User> monitor = new BeanMonitor&lt;User>();
		User proxy = monitor.proxy(new UserImpl());

		// proxy where
		proxy.setId(id);
		monitor.eq();

		getSimpleDaoTemplate().proxyDelete(monitor);
	}

	public User findById(Long id) {
		// create proxy
		BeanMonitor&lt;User> monitor = new BeanMonitor&lt;User>();
		User proxy = monitor.proxy(new UserImpl());

		// proxy select
		proxy.getId();
		proxy.getUsername();
		proxy.getPassword();
		proxy.getNickname();
		proxy.getCity();
		proxy.getProv();
		proxy.getUserStatus();
		proxy.getCreateTime();
		proxy.getModifyTime();

		// proxy where
		proxy.setId(id);
		monitor.eq();

		return getSimpleDaoTemplate().proxyQueryObject(monitor, rowMapper);
	}

	public int findCount() {
		return getSimpleDaoTemplate().findCount(UserImpl.class);
	}

	public void store(User u) {
		// integrity validate
		if (u == null || u.getId() &lt;= 0 || u.getUserStatus() &lt; 0 || u.getUsername() == null || u.getPassword() == null
				|| u.getNickname() == null || u.getCreateTime() == null || u.getModifyTime() == null) {
			throw new DataIntegrityViolationException(u.toString());
		}

		BeanMonitor&lt;User> monitor = new BeanMonitor&lt;User>();
		User proxy = monitor.proxy(new UserImpl());

		// proxy insert
		proxy.setId(u.getId());
		proxy.setUsername(u.getUsername());
		proxy.setPassword(u.getPassword());
		proxy.setNickname(u.getNickname());
		proxy.setCity(u.getCity());
		proxy.setProv(u.getProv());
		proxy.setUserStatus(u.getUserStatus());
		proxy.setCreateTime(u.getCreateTime());
		proxy.setModifyTime(u.getModifyTime());

		// store
		getSimpleDaoTemplate().proxyStore(monitor);
	}

	public void updateById(BeanMonitor&lt;User> monitor) {
		User u = monitor.getBean();
		// integrity validate
		if (u == null || u.getId() &lt;= 0) {
			throw new DataIntegrityViolationException(u.toString());
		}

		// proxy where
		User proxy = monitor.getProxy();
		monitor.where();
		proxy.setId(u.getId());
		monitor.eq();

		// update
		getSimpleDaoTemplate().proxyUpdate(monitor, u.getId());
	}

	public BasePage&lt;User> findPage(UserPageQuery pageQuery) {
		// create proxy
		BeanMonitor&lt;User> monitor = new BeanMonitor&lt;User>();
		User proxy = monitor.proxy(new UserImpl());

		// proxy select
		proxy.getId();
		proxy.getUsername();
		proxy.getCreateTime();

		// proxy where
		if (null != pageQuery.getUser().getCity()) {
			proxy.setCity(pageQuery.getUser().getCity());
			monitor.eq();
		}
		if (null != pageQuery.getEndCreateTime()) {
			proxy.setCreateTime(pageQuery.getEndCreateTime());
			monitor.and().leeq();
		}
		if (null != pageQuery.getStartCreateTime()) {
			proxy.setCreateTime(pageQuery.getStartCreateTime());
			monitor.and().gteq();
		}
		if (null != pageQuery.getUser().getUsername()) {
			proxy.setUsername(pageQuery.getUser().getUsername());
			monitor.and().like();
		}

		// query & orm & page
		return getSimpleDaoTemplate().proxyQueryPage(monitor, rowMapper, pageQuery);
	}

}

</pre>
          <br/>
          <span style="color:red;">
            <a href="http://alin-ass.javaeye.com/blog/80268#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 May 2007 09:49:19 +0800</pubDate>
        <link>http://alin-ass.javaeye.com/blog/80268</link>
        <guid>http://alin-ass.javaeye.com/blog/80268</guid>
      </item>
      <item>
        <title>交流下hibernate的新项目shards</title>
        <author>alin_ass</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://alin-ass.javaeye.com">alin_ass</a>&nbsp;
          链接：<a href="http://alin-ass.javaeye.com/blog/68406" style="color:red;">http://alin-ass.javaeye.com/blog/68406</a>&nbsp;
          发表时间: 2007年04月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          不知道shards是否能有效简化多数据库(无跨库事务)开发，还在学习中，翻译一段前言，欢迎大家交流。<br /><br /><br />http://www.hibernate.org/hib_docs/shards/reference/en/html/preface.html<br /><br />你不能总是把你所有的关系数据放在一个单独的关系数据库里。有时候你只是有太多的数据。有时候你有一个分布式的部署体系（如果使用单一数据库可能导致从加州到印度的网络延迟太大）。甚至可能是非技术理由（一个潜在的客户根本不做交易除非她公司的数据存在自己的数据库里）。无论你的理由是什么，在多重数据库之间对话无疑会让你的程序开发变得复杂。hibernate shards是被设计来封装和最小化这种复杂性的一个框架，它在hibernate core上提供了水平分割的支持。简单的来说，我们的目标是通过hibernate在多重数据库上提供一个统一的视图。<br /><br />那么，shard是什么?好问题。"shard"是"部分"或"分割"的另一种说法,但是在google,它专指选择权。hibernate shards源自google的一个工程师小团队的<strong>20%项目</strong>（译注:google员工有20%的工作时间可以从事非工作事件），因此这个项目的命名从一开始就考虑到shards。把目前的工作成果开源是因为我们想让hibernate社区能尽可能快的从我们的努力中获益，同时相比私有化，我们期望社区能更快的帮助我们达到稳定的发布版本。我们迫切的希望在设计和实现里找出问题，同时在完善的过程中，我们也感激你的耐心。
          <br/>
          <span style="color:red;">
            <a href="http://alin-ass.javaeye.com/blog/68406#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 05 Apr 2007 22:45:15 +0800</pubDate>
        <link>http://alin-ass.javaeye.com/blog/68406</link>
        <guid>http://alin-ass.javaeye.com/blog/68406</guid>
      </item>
      <item>
        <title>Chapter 3. Beans, BeanFactory and the ApplicationContext</title>
        <author>alin_ass</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://alin-ass.javaeye.com">alin_ass</a>&nbsp;
          链接：<a href="http://alin-ass.javaeye.com/blog/22598" style="color:red;">http://alin-ass.javaeye.com/blog/22598</a>&nbsp;
          发表时间: 2004年08月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          3.1介绍<br />spring里最基础最重要的两个包是org.springframework.beans和org.springframework.context。<br />这几个包提供了spring中的Inversion of Control(又称为Dependency Injection)特性的基础。<br />BeanFactory提供了一种有能力管理各种bean(object)的高级的配置机制,潜在性的使用任一个存储程序。<br />ApplicationContext构筑在BeanFactory上层,并且添加了其他功能，如更容易的与spring AOP特性<br />集成，信息资源处理(为了使用i18n),事件传播,创建ApplicationContext和可选的父上下文和程序级<br />指定的上下文比如WebApplicationContext,还有些其他的增强.<br /><br />简略的说,BeanFactory提供配置框架和基本功能,同时ApplicationContext给它添加了一些增强的功能,<br />some of them perhaps more J2EE and enterprise-centric.概括一下,一个ApplicationContext<br />就是一个BeanFactory的完整的父集,同时任何关于BeanFactory能力和行为的描述同样适用于<br />ApplicationContext.<br /><br />用户有时候不能确定BeanFactory和ApplicationContext哪个更适合某个特定的情形.通常在j2ee环境<br />中撰写大部分application的最佳选择是使用ApplicationContext,因为它提供了BeanFactory的所有特性<br />and adds on to it in terms of features,while also allowing a more declarative <br />approach to use of some functionality, which is generally desirable.<br />你更乐意使用BeanFactory的主要情形可能是当内存使用成为最大的关注点(such as in an applet <br />where every last kilobyte counts)并且你并不需要ApplicationContext的所有特性.<br /><br />这章粗略的分成两部分,第一部分涉及了同样适用于BeanFactory和ApplicationContext的基本法则.<br />第二部分将涉及某些仅适用于ApplicationContext的特性.
          <br/>
          <span style="color:red;">
            <a href="http://alin-ass.javaeye.com/blog/22598#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 17 Aug 2004 11:53:47 +0800</pubDate>
        <link>http://alin-ass.javaeye.com/blog/22598</link>
        <guid>http://alin-ass.javaeye.com/blog/22598</guid>
      </item>
      <item>
        <title>current</title>
        <author>alin_ass</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://alin-ass.javaeye.com">alin_ass</a>&nbsp;
          链接：<a href="http://alin-ass.javaeye.com/blog/22519" style="color:red;">http://alin-ass.javaeye.com/blog/22519</a>&nbsp;
          发表时间: 2004年07月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          continue...
          <br/>
          <span style="color:red;">
            <a href="http://alin-ass.javaeye.com/blog/22519#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 21 Jul 2004 21:23:57 +0800</pubDate>
        <link>http://alin-ass.javaeye.com/blog/22519</link>
        <guid>http://alin-ass.javaeye.com/blog/22519</guid>
      </item>
  </channel>
</rss>