论坛首页 Java企业应用论坛

关于dao-zero的版本升级(以后dao-zero的消息)

浏览 19694 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-06-02  
主要是sql statement需要处理一下。
0 请登录后投票
   发表时间:2006-06-02  
dwangel 写道
主要是sql statement需要处理一下。

?不明白。详细说说
0 请登录后投票
   发表时间:2006-06-05  
Hi suntoe,
很不错的想法,我用Spring提供的代码库写了一个非常简化的Hibernate DAO Zero
其实就写了一个类:
public class GenericInterceptor implements MethodInterceptor {

    public Object invoke(MethodInvocation invocation); throws Throwable {
        HibernateDaoSupport dao = (HibernateDaoSupport); invocation.getThis();;

        String methodName = invocation.getMethod();.getName();;
        Object[] arguments = invocation.getArguments();;

        if (methodName.startsWith("find");); {
            return dao.getHibernateTemplate();.findByNamedQuery(methodName, arguments);;
        } else if (methodName.startsWith("create");); {
            return dao.getHibernateTemplate();.save(arguments[0]);;
        } else if (methodName.startsWith("update");); {
            dao.getHibernateTemplate();.update(arguments[0]);;
            return null;
        } else if (methodName.startsWith("delete");); {
            dao.getHibernateTemplate();.delete(arguments[0]);;
            return null;
        }
        return invocation.proceed();;
    }

}


配置文件:
    <bean id="abstractDao" class="daozero.dao.GenericHibernateDao">
        <property name="sessionFactory"><ref local="sessionFactory"></ref></property>
    </bean>
    
    <bean id="genericInterceptor" class="daozero.aop.GenericInterceptor"/>
        
    <bean id="accountDao" class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="proxyInterfaces"><value>daozero.sample.dao.AccountDao</value></property>
        <property name="target"><ref local="abstractDao"></ref></property>
        <property name="interceptorNames">
            <list>
                <value>genericInterceptor</value>
            </list>
        </property>
    </bean>


测试代码:
    public void test(); {
        ApplicationContext context = new ClassPathXmlApplicationContext("daozero/sample/application_context.xml");;

        AccountDao dao = (AccountDao); context.getBean("accountDao");;
        Account account = new Account();;
        account.setUserName("quake");;
        account.setPassword("123456");;
        account.setEmail("quake_wang@iteye.com");;

        dao.createAccount(account);;
        assertNotNull(account.getId(););;

        account.setPassword("111111");;
        dao.updateAccount(account);;

        Account loaded = (Account); dao.findAccountsByName("quake");.get(0);;
        assertEquals("111111", loaded.getPassword(););;
        assertEquals("quake_wang@iteye.com", loaded.getEmail(););;
    }


还没有仔细看过你的代码,但是觉得也可以像这个简单的例子,用spring提供的SqlMapSupport和interceptor一样搞定,不需要像你的代码里面写那么多,附件是源代码和测试例子,抛砖了...
0 请登录后投票
   发表时间:2006-06-05  
很棒啊,我也考虑着怎么支持hibernate,好像用ibatis的人和hibernate比实在不成比例。
解释一下daozero(for ibatis)的做法,现在的实现也可以用spring interceptor做,之所以自己直接去使用cglib/jdk proxy,有那么1000多行代码,目的是为了简化配置,也就是说把这种可以固定下来的aop配置写死在代码里了,这样就不需要使用者去理解spring aop(我实在不满意spring aop那种绕来绕去的配置方法)。
讨论下把你的东东放进daozero怎么样(强烈期待)?
0 请登录后投票
   发表时间:2006-06-12  
Quake Wang 写道
Hi suntoe,
很不错的想法,我用Spring提供的代码库写了一个非常简化的Hibernate DAO Zero
其实就写了一个类:
public class GenericInterceptor implements MethodInterceptor {

    public Object invoke(MethodInvocation invocation); throws Throwable {
        HibernateDaoSupport dao = (HibernateDaoSupport); invocation.getThis();;



配置文件:
    <bean id="abstractDao" class="daozero.dao.GenericHibernateDao">
        <property name="sessionFactory"><ref local="sessionFactory"></ref></property>
    </bean>
    
    <bean id="genericInterceptor" class="daozero.aop.GenericInterceptor"/>
        
 


...


public class GenericInterceptor implements MethodInterceptor {
    private String C_METHOD = "create";
    private String R_METHOD = "find";
    private String U_METHOD = "update";
    private String D_METHOD = "delete";

    <bean id="genericInterceptor" class="daozero.aop.GenericInterceptor">
<property name="C_METHOD" value="create" />
<property name="R_METHOD" value="find" />
<property name="U_METHOD" value="update" />
<property name="D_METHOD" value="delete" />
0 请登录后投票
   发表时间:2006-06-13  
挺点建议,
可以判断一下返回值,如果是数组的话可以把 queryforlist的结果转成强类型的数组,
另外,parameterMap的长度和args的长度一样也挺不爽的,部分情况下不能满足需求,
看到32版本的代码风格有些变化,赞一个,呵呵(个人不太喜欢用c的命名风格写java程序)
0 请登录后投票
   发表时间:2006-06-14  
heaven 写道
挺点建议,
可以判断一下返回值,如果是数组的话可以把 queryforlist的结果转成强类型的数组,

很棒的想法,下个版本争取加进去。

heaven 写道

另外,parameterMap的长度和args的长度一样也挺不爽的,部分情况下不能满足需求,

这个......按目前的思路恐怕难做,因为除非代码是debug编译,否则得不到method的argument的名字,没法按名字将argument和parameterMap的某个parameter对应起来。
不过,也可以按以下3个方法依次试,尽量取:
1.如果是debug模式编译的,就用method的argument的名字作为parameterMap的某个parameter的名字;
2.如果1不行,再加段XML,即要求手工配置argument的名字(缺点是使用复杂化了)
3.如果2也不行,就看annotation里是否定义了argument的名字(缺点是虽然比2要简单,但还不够)


heaven 写道

看到32版本的代码风格有些变化,赞一个,呵呵(个人不太喜欢用c的命名风格写java程序)

.3.2的代码风格没变化呀?“c的命名风格“是指什么?
0 请登录后投票
   发表时间:2006-06-14  
引用
不过,也可以按以下3个方法依次试,尽量取:
1.如果是debug模式编译的,就用method的argument的名字作为parameterMap的某个parameter的名字;
2.如果1不行,再加段XML,即要求手工配置argument的名字(缺点是使用复杂化了)
3.如果2也不行,就看annotation里是否定义了argument的名字(缺点是虽然比2要简单,但还不够)

2 着实麻烦了点,3不错,能利用的资源也就这么多了...

引用
“c的命名风格“是指什么?

这个....
就是变量名有好多下划线的,AutoProxy里是有些变化的,
我有代码洁癖,表见怪,hehe
0 请登录后投票
   发表时间:2006-06-14  
heaven 写道
suntoe 写道
不过,也可以按以下3个方法依次试,尽量取:
1.如果是debug模式编译的,就用method的argument的名字作为parameterMap的某个parameter的名字;
2.如果1不行,再加段XML,即要求手工配置argument的名字(缺点是使用复杂化了)
3.如果2也不行,就看annotation里是否定义了argument的名字(缺点是虽然比2要简单,但还不够)

2 着实麻烦了点,3不错,能利用的资源也就这么多了...

补充一点,用了3就不支持jdk1.4了

heaven 写道

suntoe 写道
“c的命名风格“是指什么?

这个....
就是变量名有好多下划线的,AutoProxy里是有些变化的,
我有代码洁癖,表见怪,hehe

惭愧,那些有好变化的却不是我写的,是squall贡献的代码
0 请登录后投票
   发表时间:2006-06-14  
突然发觉做的这个东西的查询部分有那么点CMP EJB的finder的味道:
(1)EJB QL &lt;--&gt; SQL in iBatis XML;
(2)EJB finder &lt;--&gt; interface,finder也无需写实现类!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics