You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-java@ibatis.apache.org by Jiming Liu <ji...@gmail.com> on 2008/11/06 02:44:42 UTC
Re: Interface binding
ibatis dynamic proxy
On Wed, Sep 10, 2008 at 5:06 AM, Ron Chan <rc...@i-tao.com> wrote:
>
> Here's a quick and dirty DynamicMapper I created
>
> MyDao myDao = dynamicMapper.daoProxy(MyDao.class)
> creates the proxy implementation
>
> I use Guice for DI and have a Guice provider for this and that makes it
> even
> simpler
>
> public class DynamicMapper {
> private SqlMapClient sqlMap;
>
> public void setSqlMap(SqlMapClient sqlMap) {
> this.sqlMap = sqlMap;
> }
>
> public <T> T daoProxy(Class<T> clazz) {
> InvocationHandler handler = new InvocationHandler() {
> @Override
> public Object invoke(Object proxy, Method method,
> Object[] args)
> throws Throwable {
> Class<?> resultClazz =
> method.getReturnType();
> String methodName = method.getName();
>
> Object param = null ;
> if (args!=null) param = args[0];
>
> if (methodName.startsWith("insert")) {
> return sqlMap.insert(methodName,
> param);
> }
> else if (methodName.startsWith("update")) {
> return sqlMap.update(methodName,
> param);
> }
> else if (methodName.startsWith("delete")) {
> return sqlMap.delete(methodName,
> param);
> }
> else if
> (java.util.List.class.isAssignableFrom(resultClazz)) {
> return
> sqlMap.queryForList(methodName, param);
> }
> else if
> (java.util.Map.class.isAssignableFrom(resultClazz)) {
> String key;
> if (args.length==1) {
> param = null;
> key = (String)args[0];
> }
> else {
> key = (String)args[1];
> }
> return
> sqlMap.queryForMap(methodName, param, key);
> }
> else {
> return
> sqlMap.queryForObject(methodName, param);
> }
> }
> };
>
> return (T)Proxy.newProxyInstance(clazz.getClassLoader(),
> new Class[]
> {clazz},
> handler);
> }
>
> }
>
>
>
> Ronald Borman wrote:
> >
> > I got started with iBATIS this week. I bought 'iBATIS in Action'
> > (finishing the last chapter tomorrow), did some tests and browsed through
> > the mailing lists. It looks like a compact, comprehensible and fun to use
> > framework. Kudos to the team!
> >
> > On the incubator mailing list I found a May 2005 announcement which
> caught
> > my attention: interface binding
> > (
> http://www.mail-archive.com/ibatis-user-java@incubator.apache.org/msg02403.html
> ).
> > It reminded me of an IBM DeveloperWorks article about Generic DAOs and I
> > was eager to try it out. Unfortunately SqlMapClientImpl.getMapper()
> hasn't
> > survived (although it is still listed in the online dev Javadoc).
> >
> > The 2.1.7 source code only calls the static method
> > MapperProxy.newMapperProxy(), so perhaps I could compile/externalize the
> > missing classes. Is this feasable?
> >
> > The 3.0 whiteboard discussion also mentions interface binding. Is it
> > likely that this functionality will return in a future version?
> >
> > Thanks
> >
> >
> > Ronald
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/Interface-binding-tp19352392p19401342.html
> Sent from the iBATIS - User - Java mailing list archive at Nabble.com.
>
>