首页 > 作文

关于mybatis3中@SelectProvider的使用问题

更新时间:2023-04-04 04:17:09 阅读: 评论:0

mybatis3中增加了使用注解来配置mapper的新特性,本篇文章主要介绍其中几个@provider的使用方式,他们是:@lectprovider、@updateprovider、@inrtprovider和@deleteprovider。

1.使用@lectprovider

@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。

2.定义拼装sql的类

@lectprovide中type参数指定的class类,必须要能够通过无参的构造函数来初始化。

@lectprovide中method参数指定的方法,必须是public的,返回值必须为string,可以为static。

  public class sqlprovider {    public string lectur(long urid) {      return "lect * from ur where urid=" + urid;    }  }

3.无参数@lectprovide方法##

在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";  }

4.一个参数的@lectprovide方法

对于只有一个参数的情况,可以直接使用,参见前面的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");  }

5.更多参数的@lectprovide方法

在超过一个参数的情况下,@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") + "'";  }

6.一些限制

anq

在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 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图