精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-28
最后修改:2010-08-28
题记: “低碳从拔下插头做起”,开源,从关注产品社区做起:) 发这个贴的的缘由是看了jnn大哥发的一篇关于开源软件的帖子http://www.iteye.com/topic/277696,虽然是08年写的,但里面说到follow社区的mail list的建议是不错的,想想自己还未奉献过代码,于是去ibaits的google社区瞅了一眼,其实只要你行动,提交一个被accepted的issue并不是那么困难。
以下就是展现一个最新被ibatis3.x接受的建议。(当然不是我commit的,希望以后有机会吧)
Reported by clinton.begin, May 17, 2010 Would it be possible to create a new annotation (or does one exist already 可以不可以为@select新增一个注解用于重用resultMap配置中定义的map。
比如: Consider a "country" table, CREATE TABLE COUNTRY ( ID bigint PRIMARY KEY NOT NULL, CODE varchar(2) NOT NULL, ISO_CODE varchar(3) NOT NULL, NAME varchar(2147483647), COUNTRY_CODE varchar(10), ACTIVE boolean DEFAULT TRUE NOT NULL );
And the java Bean, public class Country { Long id; String code; // 2 digit ISO country code String isoCode; // 3 digit ISO country code String name; // string name String countryCode; // the telephone dialing prefix (e.g. +1) boolean active = true; // and all the get() set() methods for these bean properties }
public interface CountryDAO { /** * Selects all country entries. * Though it appears when we use the annotations, we need to specify the results every time ? */ @Select( value = { "select * from country where active = true" }) @Results(value = { @Result(property="id"), @Result(property="code"), @Result(property="isoCode", column="iso_code"), @Result(property="name", column="name"), @Result(property="countryCode", column="country_code"), @Result(property="active", column="active") }) List<Country> getAllActive(); // TODO: all these methods would also be select queries, where I would want the same results map as above Country getById(Long id); Country getByCode(String code); Country getByIsoCode(String isoCode); }
这里每个方法都需要重复添加如上返回的map定义,就显的很冗余了。 @ResultMap(value="myMapperID") 作者想添加这个注解,替代上面的重复定义。 annotation, where the myMapperID would be the ID of a <resultMap> I have Where in this example, I already have a <mapper namespace="CountryDAO"> <resultMap type="Country" id="countryResult"> <result property="id" column="id"/> <result property="code" column="code"/> <result property="isoCode" column="iso_code"/> <result property="name" column="name"/> <result property="countryCode" column="country_code"/> <result property="active" column="active"/> </resultMap>
修改后的代码变为:
public interface CountryDAO { @Select( value = { "select * from country where active = true" }) @ResultMap(value = "countryResult") List<Country> getAllActive(); // and now other things that want to select into this map can do so, re-using the single map declaration // that is referenced in the xml. @Select( value = { "select * from country where id = #{id} }) @ResultMap(value = "countryResult") Country getById(Long id); @Select( value = { "select * from country where code = #{code} }) @ResultMap(value = "countryResult") Country getByCode(String code); @Select( value = { "select * from country where isoCode = #{isoCode} }) @ResultMap(value = "countryResult") Country getByIsoCode(String isoCode); }
看到countryResult这个map已经在xml文件中定义好了,无需再每个方法前面重复定义了,只要声明就ok了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-08-31
没用过ibatis的annotation
|
|
返回顶楼 | |
发表时间:2010-08-31
很好的改进,不过话说回来,mybatis用annotation是走上邪路了。sql又跑回java代码里,那我还不如用sql template
|
|
返回顶楼 | |
发表时间:2010-08-31
tedeyang 写道 很好的改进,不过话说回来,mybatis用annotation是走上邪路了。sql又跑回java代码里,那我还不如用sql template
值得深思。 |
|
返回顶楼 | |
发表时间:2010-09-01
annotation是复古式风格..哈哈
|
|
返回顶楼 | |
发表时间:2011-02-14
tedeyang 写道 很好的改进,不过话说回来,mybatis用annotation是走上邪路了。sql又跑回java代码里,那我还不如用sql template
也不一定 封装好了是为了积累更好的性能优化 总比你写了SQL再去调优强吧?annotation用过后都觉得好 省事+效率 是 CODE的主旨. |
|
返回顶楼 | |
发表时间:2011-04-26
tedeyang 写道 很好的改进,不过话说回来,mybatis用annotation是走上邪路了。sql又跑回java代码里,那我还不如用sql template
同意。 |
|
返回顶楼 | |
浏览 3876 次