mybatis3中增加了使用注解来配置mapper的新特性,本篇文章主要介绍其中几个@provider的使用方式,他们是:@lectprovider、@updateprovider、@inrtprovider和@deleteprovider。
@lectprovider是声明在方法基本上的,这个方法定义在mapper对应的的interface上。
public interface urmapper { @lectprovider(type = sqlprovider.class, method = "lectur") @resultmap("urmap") public ur getur(long urid); }
上例中是个很简单的mapper接口,其中定义了一个方法:getur,这个方法根据提供的用户id来查询用户信息,并返回一个ur实体bean。
这是一个很简单很常用的查询场景:根据key来查询记录并将结果封装成实体bean。其中:
@lectprovider注解用于生成查询用的sql语句,有别于@lect注解,@lectprovide指定一个class及其方法,并且通过调用class上的这个方法来获得sql语句。在我们这个例子中,获取查询sql的方法是sqlprovider.lectur。
@resultmap注解用于从查询结果集recordt中取数据然后拼装实体bean。
@lectprovide中type参数指定的class类,必须要能够通过无参的构造函数来初始化。
@lectprovide中method参数指定的方法,必须是public的,返回值必须为string,可以为static。
public class sqlprovider { public string lectur(long urid) { return "lect * from ur where urid=" + urid; } }
在mapper接口方法上和@lectprovide指定类方法上,均无参数:
urmapper.java: @lectprovider(type = sqlprovider.class, method = "lectallur") @resultmap("urmap") public list<ur> getallur();
sqlprovider.java: public string lectallur() { return "lect * from ur"; }
对于只有一个参数的情况,可以直接使用,参见前面的getur和lectur。
但是,如果在getur方法中,对urid方法使用了@param注解的话,那么相应lectur方法必须接受map<string, object>做为参数:
urmapper.java: @lectprovider(type = sqlprovider.class, method = "lectur2") @resultmap("urmap") public ur getur2(@param("urid") long urid);
sqlprovider.java: public string lectur2(map<string, object> para) { return "lect * from ur where urid=" + para.get("urid"); }
在超过一个参数的情况下,@lectprovide方法必须接受map<string, object>做为参数,
如果参数使用了@param注解,那么参数在map中以@param的值为key,如下例中的urid;
如果参数没有使用@param注解,那么参数在map中以参数的顺序为key,如下例中的password:
urmapper.java: @lectprovider(type = sqlprovider.class, method = "lecturcheck") @resultmap("urmap") public ur geturcheck(@param("urid") long urid, string password);
sqlprovider.java: public string lecturcheck(map<string, object> para) { return "lect * from ur where urid=" + para.get("urid") + " and password='" + para.get("1") + "'"; }
在mapper接口和@lectprovide方法类中,不要使用重载,也就是说,不要使用方法名相同参数不同的方法,以避免发生诡异问题。
@repositor党政机关公文ypublic interface fqzrlmapinfomapper { @lectprovider(type = fqzrlmapinfopr如流ovider.class, method = "findrelationinfos") list<relationinfo> findrelationinfos(collecpe英语tion<string> flags); class fqzrlmapinfoprovider { public string findrelationinfos(collection<string> flags) { string instr = string.join("','", flags); stringbuilder sb = new stringbuilde糖是碳水化合物吗r(); sb.append("lect * from dm_screen_fqz_mapdata_2_b where 1=1 "); if (null == flags || flags.size() == 0) { sb.append(" and 1<>1 "); } el { sb.append(" and relate_flag in ('").append(instr).append("')"); } return sb.tostring(); } }}
到此这篇关于mybatis3中@lectprovider的使用技巧的文章就介绍到这了,更多相关mybatis3中@lectprovider使用内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 04:17:08,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/64f655a7cc16966a12815045cbb47686.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:关于mybatis3中@SelectProvider的使用问题.doc
本文 PDF 下载地址:关于mybatis3中@SelectProvider的使用问题.pdf
留言与评论(共有 0 条评论) |