论坛首页 Java企业应用论坛

字节码工具asm使用的一个例子

浏览 13957 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-05-11  
正在想办法抛弃反射使用asm,看到后面竟然看到了!
0 请登录后投票
   发表时间:2012-05-12  
mashengchao 写道
正在想办法抛弃反射使用asm,看到后面竟然看到了!


稍后会写个文章来说明一下,我是如何使用asm替代反射的。
0 请登录后投票
   发表时间:2012-05-15   最后修改:2012-05-15
ak478288 写道
mashengchao 写道
正在想办法抛弃反射使用asm,看到后面竟然看到了!


稍后会写个文章来说明一下,我是如何使用asm替代反射的。


正在拜读你的开源代码。有个问题问一下。你的代码中对数据的操作是封闭到Query类中,数据操作类似:
public <T> void insert(T t) throws QueryException {
        EntityTableInfo<T> info = this.getEntityTableInfo(t.getClass());
        SQLMapper<T> mapper = this.getSqlMapper(t.getClass());
        this.jdbcSupport.insertBySQL(info.getInsertSQL(),
                mapper.getParamsForInsert(t));
    }


如果我遇到了一对一,一对多这样的情况,Query的操作没有添加这样的支持。最近正在搞这些东西,望指点一二,不胜感激

PS:我比较关注cursor与bean的相互转换
0 请登录后投票
   发表时间:2012-05-15   最后修改:2012-05-15
mashengchao 写道
ak478288 写道
mashengchao 写道
正在想办法抛弃反射使用asm,看到后面竟然看到了!


稍后会写个文章来说明一下,我是如何使用asm替代反射的。


正在拜读你的开源代码。有个问题问一下。你的代码中对数据的操作是封闭到Query类中,数据操作类似:
public <T> void insert(T t) throws QueryException {
        EntityTableInfo<T> info = this.getEntityTableInfo(t.getClass());
        SQLMapper<T> mapper = this.getSqlMapper(t.getClass());
        this.jdbcSupport.insertBySQL(info.getInsertSQL(),
                mapper.getParamsForInsert(t));
    }


如果我遇到了一对一,一对多这样的情况,Query的操作没有添加这样的支持。最近正在搞这些东西,望指点一二,不胜感激

PS:我比较关注cursor与bean的相互转换


目前我没有对于一对一,一对多这样的情况进行处理,你可以看看,我里面的一个多表关联查询的一个例子。用法就是这样。如果我处理了 一对一,一对多 ,那我就是另外一个hibernate,但是我又没他做的好,那就成了一个失败的轮子。所以我只做点简单的事情,由于目前我做的大多都是互联网的项目,所以我们尽量都是避免多表连接型的操作。

如果你要实现的话,可以参考hibernate的方式,具体我也是不太了解吧,抱歉没能帮上你。

谢谢你关注我的项目。
0 请登录后投票
   发表时间:2012-05-15  
ak478288 写道
mashengchao 写道
ak478288 写道
mashengchao 写道
正在想办法抛弃反射使用asm,看到后面竟然看到了!


稍后会写个文章来说明一下,我是如何使用asm替代反射的。


正在拜读你的开源代码。有个问题问一下。你的代码中对数据的操作是封闭到Query类中,数据操作类似:
public <T> void insert(T t) throws QueryException {
        EntityTableInfo<T> info = this.getEntityTableInfo(t.getClass());
        SQLMapper<T> mapper = this.getSqlMapper(t.getClass());
        this.jdbcSupport.insertBySQL(info.getInsertSQL(),
                mapper.getParamsForInsert(t));
    }


如果我遇到了一对一,一对多这样的情况,Query的操作没有添加这样的支持。最近正在搞这些东西,望指点一二,不胜感激

PS:我比较关注cursor与bean的相互转换


目前我没有对于一对一,一对多这样的情况进行处理,你可以看看,我里面的一个多表关联查询的一个例子。用法就是这样。如果我处理了 一对一,一对多 ,那我就是另外一个hibernate,但是我又没他做的好,那就成了一个失败的轮子。所以我只做点简单的事情,由于目前我做的大多都是互联网的项目,所以我们尽量都是避免多表连接型的操作。

如果你要实现的话,可以参考hibernate的方式,具体我也是不太了解吧,抱歉没能帮上你。

谢谢你关注我的项目。



多谢。另外还有个问题:
public class UserMapper implements RowMapper<User> {

    public UserMapper() {
    }

    public User mapRow(ResultSet rs, int rowNum) throws SQLException {
        User user = new User();
        user.setAddr(RowMapperUtil.getString(rs, "addr"));
        user.setUserid(RowMapperUtil.getLong(rs, "userid"));
        user.setUuid(RowMapperUtil.getBigInteger(rs, "uuid"));
        return user;
    }
}


你所实现的RowMapper,依然是需要人肉对应表与bean字段。
这个地方是可以使用反射来实现赋值的,但是可以不可以使用asm来代替反射来进行?对asm感觉两眼一黑
0 请登录后投票
   发表时间:2012-05-15  
mashengchao 写道
ak478288 写道
mashengchao 写道
ak478288 写道
mashengchao 写道
正在想办法抛弃反射使用asm,看到后面竟然看到了!


稍后会写个文章来说明一下,我是如何使用asm替代反射的。


正在拜读你的开源代码。有个问题问一下。你的代码中对数据的操作是封闭到Query类中,数据操作类似:
public <T> void insert(T t) throws QueryException {
        EntityTableInfo<T> info = this.getEntityTableInfo(t.getClass());
        SQLMapper<T> mapper = this.getSqlMapper(t.getClass());
        this.jdbcSupport.insertBySQL(info.getInsertSQL(),
                mapper.getParamsForInsert(t));
    }


如果我遇到了一对一,一对多这样的情况,Query的操作没有添加这样的支持。最近正在搞这些东西,望指点一二,不胜感激

PS:我比较关注cursor与bean的相互转换


目前我没有对于一对一,一对多这样的情况进行处理,你可以看看,我里面的一个多表关联查询的一个例子。用法就是这样。如果我处理了 一对一,一对多 ,那我就是另外一个hibernate,但是我又没他做的好,那就成了一个失败的轮子。所以我只做点简单的事情,由于目前我做的大多都是互联网的项目,所以我们尽量都是避免多表连接型的操作。

如果你要实现的话,可以参考hibernate的方式,具体我也是不太了解吧,抱歉没能帮上你。

谢谢你关注我的项目。



多谢。另外还有个问题:
public class UserMapper implements RowMapper<User> {

    public UserMapper() {
    }

    public User mapRow(ResultSet rs, int rowNum) throws SQLException {
        User user = new User();
        user.setAddr(RowMapperUtil.getString(rs, "addr"));
        user.setUserid(RowMapperUtil.getLong(rs, "userid"));
        user.setUuid(RowMapperUtil.getBigInteger(rs, "uuid"));
        return user;
    }
}


你所实现的RowMapper,依然是需要人肉对应表与bean字段。
这个地方是可以使用反射来实现赋值的,但是可以不可以使用asm来代替反射来进行?对asm感觉两眼一黑


真可惜,你看错了,这只是我的一个rowmapper的例子,并没有实际应用。实际应用中是不需要人肉mapper的。好好看看RowMapperCreater吧,这就是rowmapper如何生成的
0 请登录后投票
   发表时间:2012-05-15  
ak478288 写道
mashengchao 写道
ak478288 写道
mashengchao 写道
ak478288 写道
mashengchao 写道
正在想办法抛弃反射使用asm,看到后面竟然看到了!


稍后会写个文章来说明一下,我是如何使用asm替代反射的。


正在拜读你的开源代码。有个问题问一下。你的代码中对数据的操作是封闭到Query类中,数据操作类似:
public <T> void insert(T t) throws QueryException {
        EntityTableInfo<T> info = this.getEntityTableInfo(t.getClass());
        SQLMapper<T> mapper = this.getSqlMapper(t.getClass());
        this.jdbcSupport.insertBySQL(info.getInsertSQL(),
                mapper.getParamsForInsert(t));
    }


如果我遇到了一对一,一对多这样的情况,Query的操作没有添加这样的支持。最近正在搞这些东西,望指点一二,不胜感激

PS:我比较关注cursor与bean的相互转换


目前我没有对于一对一,一对多这样的情况进行处理,你可以看看,我里面的一个多表关联查询的一个例子。用法就是这样。如果我处理了 一对一,一对多 ,那我就是另外一个hibernate,但是我又没他做的好,那就成了一个失败的轮子。所以我只做点简单的事情,由于目前我做的大多都是互联网的项目,所以我们尽量都是避免多表连接型的操作。

如果你要实现的话,可以参考hibernate的方式,具体我也是不太了解吧,抱歉没能帮上你。

谢谢你关注我的项目。



多谢。另外还有个问题:
public class UserMapper implements RowMapper<User> {

    public UserMapper() {
    }

    public User mapRow(ResultSet rs, int rowNum) throws SQLException {
        User user = new User();
        user.setAddr(RowMapperUtil.getString(rs, "addr"));
        user.setUserid(RowMapperUtil.getLong(rs, "userid"));
        user.setUuid(RowMapperUtil.getBigInteger(rs, "uuid"));
        return user;
    }
}


你所实现的RowMapper,依然是需要人肉对应表与bean字段。
这个地方是可以使用反射来实现赋值的,但是可以不可以使用asm来代替反射来进行?对asm感觉两眼一黑


真可惜,你看错了,这只是我的一个rowmapper的例子,并没有实际应用。实际应用中是不需要人肉mapper的。好好看看RowMapperCreater吧,这就是rowmapper如何生成的

万分感谢,期待你的asm替代反射的文章
0 请登录后投票
   发表时间:2012-05-16   最后修改:2012-05-16
ak478288 写道
mashengchao 写道
正在想办法抛弃反射使用asm,看到后面竟然看到了!


稍后会写个文章来说明一下,我是如何使用asm替代反射的。


期待,楼主强大啊,昨天看了一下你的dal的改进,感觉解析器还是没有优化,呵呵我现在满脑子sql解析器的想法,楼主真的可以看看阿里的druid的sql解析器的代码,效率很高,复杂度基本上跟sql的长度正线性关系。而且通过vistor模式可以改写源sql。
0 请登录后投票
   发表时间:2012-05-16  
rain2005 写道
ak478288 写道
mashengchao 写道
正在想办法抛弃反射使用asm,看到后面竟然看到了!


稍后会写个文章来说明一下,我是如何使用asm替代反射的。


期待,楼主强大啊,昨天看了一下你的dal的改进,感觉解析器还是没有优化,呵呵我现在满脑子sql解析器的想法,楼主真的可以看看阿里的druid的sql解析器的代码,效率很高,复杂度基本上跟sql的长度正线性关系。而且通过vistor模式可以改写源sql。


目前还真没时间看,刚刚把antlr的解析器写好,还没发布。工作上事情多。只是加了缓存,至少不用每次去解析。你推荐的,我一定会看的,哈哈
0 请登录后投票
   发表时间:2012-05-16  
rain2005 写道
ak478288 写道
mashengchao 写道
正在想办法抛弃反射使用asm,看到后面竟然看到了!


稍后会写个文章来说明一下,我是如何使用asm替代反射的。


期待,楼主强大啊,昨天看了一下你的dal的改进,感觉解析器还是没有优化,呵呵我现在满脑子sql解析器的想法,楼主真的可以看看阿里的druid的sql解析器的代码,效率很高,复杂度基本上跟sql的长度正线性关系。而且通过vistor模式可以改写源sql。


自己测试了一下,我的解析器,解析一条select sql时,1000次耗时500-650毫秒,虽然这个测试没什么指标,但是大概知道了目前解析器的性能,做完antlr,然后再做个对比
0 请登录后投票
论坛首页 Java企业应用版

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