锁定老帖子 主题:字节码工具asm使用的一个例子
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-05-11
正在想办法抛弃反射使用asm,看到后面竟然看到了!
|
|
返回顶楼 | |
发表时间:2012-05-12
mashengchao 写道 正在想办法抛弃反射使用asm,看到后面竟然看到了!
稍后会写个文章来说明一下,我是如何使用asm替代反射的。 |
|
返回顶楼 | |
发表时间: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的相互转换 |
|
返回顶楼 | |
发表时间: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的方式,具体我也是不太了解吧,抱歉没能帮上你。 谢谢你关注我的项目。 |
|
返回顶楼 | |
发表时间: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感觉两眼一黑 |
|
返回顶楼 | |
发表时间: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如何生成的 |
|
返回顶楼 | |
发表时间: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替代反射的文章 |
|
返回顶楼 | |
发表时间:2012-05-16
最后修改:2012-05-16
ak478288 写道 mashengchao 写道 正在想办法抛弃反射使用asm,看到后面竟然看到了!
稍后会写个文章来说明一下,我是如何使用asm替代反射的。 期待,楼主强大啊,昨天看了一下你的dal的改进,感觉解析器还是没有优化,呵呵我现在满脑子sql解析器的想法,楼主真的可以看看阿里的druid的sql解析器的代码,效率很高,复杂度基本上跟sql的长度正线性关系。而且通过vistor模式可以改写源sql。 |
|
返回顶楼 | |
发表时间:2012-05-16
rain2005 写道 ak478288 写道 mashengchao 写道 正在想办法抛弃反射使用asm,看到后面竟然看到了!
稍后会写个文章来说明一下,我是如何使用asm替代反射的。 期待,楼主强大啊,昨天看了一下你的dal的改进,感觉解析器还是没有优化,呵呵我现在满脑子sql解析器的想法,楼主真的可以看看阿里的druid的sql解析器的代码,效率很高,复杂度基本上跟sql的长度正线性关系。而且通过vistor模式可以改写源sql。 目前还真没时间看,刚刚把antlr的解析器写好,还没发布。工作上事情多。只是加了缓存,至少不用每次去解析。你推荐的,我一定会看的,哈哈 |
|
返回顶楼 | |
发表时间:2012-05-16
rain2005 写道 ak478288 写道 mashengchao 写道 正在想办法抛弃反射使用asm,看到后面竟然看到了!
稍后会写个文章来说明一下,我是如何使用asm替代反射的。 期待,楼主强大啊,昨天看了一下你的dal的改进,感觉解析器还是没有优化,呵呵我现在满脑子sql解析器的想法,楼主真的可以看看阿里的druid的sql解析器的代码,效率很高,复杂度基本上跟sql的长度正线性关系。而且通过vistor模式可以改写源sql。 自己测试了一下,我的解析器,解析一条select sql时,1000次耗时500-650毫秒,虽然这个测试没什么指标,但是大概知道了目前解析器的性能,做完antlr,然后再做个对比 |
|
返回顶楼 | |