<small id='jaKMZEzo40'></small> <noframes id='8kWJx'>

  • <tfoot id='93zb7v'></tfoot>

      <legend id='UL9rG8YceH'><style id='IXPzSg3H2'><dir id='8KSps'><q id='8EHdQN'></q></dir></style></legend>
      <i id='7NetG'><tr id='0Nt7cVs'><dt id='oS07g8'><q id='3tj8S'><span id='skT6mAWG1'><b id='Xtv6'><form id='4AJcZWr5'><ins id='IcMuG'></ins><ul id='3q2sxWYJ'></ul><sub id='I9h4Vl'></sub></form><legend id='AeFwj'></legend><bdo id='OoCyNf'><pre id='TKhZEeflpo'><center id='EHB0'></center></pre></bdo></b><th id='hnaFSv'></th></span></q></dt></tr></i><div id='MmpPidF'><tfoot id='4jCYSgv'></tfoot><dl id='mx79'><fieldset id='DqfUp'></fieldset></dl></div>

          <bdo id='SWVY0vLXD'></bdo><ul id='kDSrC'></ul>

          1. <li id='Flpig9Y0'></li>
            登陆

            mybatis运用注解代替xml装备,动态生成Sql

            admin 2019-09-06 112人围观 ,发现0个评论

            mybatis运mybatis运用注解代替xml装备,动态生成Sql用注解代替xml装备时,遇到判别条件是否为null或许为空时,@Select很难搞定,不知道怎么办?

            mybatis3中增加了运用注解来装备Mapper的新特性,运用 SelectProvider来动态生成sql。

            典型的运用场景

            1. 无参数@SelectProvide办法

            在Mapper接口办法上和@SelectProvide指定类办法上,均无参数:

            UserMapper.java:

             @SelectProvider(type = SqlProvider.clas高铁商务座s, method = "selectAllUsmybatis运用注解代替xml装备,动态生成Sqler")
            @ResultMap("userMap")
            public List getAllUser();

            SqlProvider.java:

             public String selectAllUser() {
            return "select * from user";
            }

            2.单个参数运用@SelectProvider

            2.1.没有@Param注解的单个参数运用@SelectProvider

            @SelectProvider是声明在办法基本上的,这个办法界说在Mapper对应的的interface上。

             public interface UserMapper {
            @SelectProvider(type = SqlProvider.class, method = "selectUser")
            @ResultMap("userMap")
            public User getUser(long userId);
            }

            上例中是个很简单的Mapper接口,其间界说了一个办法:getUser,这个办法依据供给的用户id来查询用户信息,并回来一个User实体bean。

            这是一个很简单很常用的查询场景:依据key来查询记载并将成果封装成实体bean。其间:

            @SelectProvider注解用于生成查询用的sql句子,有别于@Select注解,@SelectProvide指定一个Class及其办法,而且经过调用Class上的这个办法来取得sql句子。在咱们这个比如中,获取查询sql的办法是SqlProvider.selectUser。

            @ResultMap注解用于从查询成果集RecordSet中取数据然后组装实体bean。

            @SelectProvide中type参数指定的Class类,有必要要能够经过无参的结构函数来初始化。

            @SelectProvide中method参数指定的办法,有必要是public的,回来值有必要为String,可认为static。

             public class SqlProvider {
            public String selectUser(long userId) {
            return "select * from user where userId=" + userId;
            }
            }

            2.2.带有@Param注解一个参数的@SelectProvide办法

            关于只要一个参数的状况,能够直接运用,拜见前面的getUser和selectUser。

            可是,假如在getUser办法中,对userId办法运用了@Param注解的话,那么相应selectUser办法有必要承受Map做为参数:

            UserMapper.java:

             @SelectProvider(type = SqlProvider.class, method = "selectUser2")
            @ResultMap("userMap")
            public User getUser2(@Param("userId") long userId);

            SqlProvider.java:

             public String selectUser2(Map para) {
            return "select * from user where userId=" + para.get("userId");
            }

            3.多参数的@SelectProvide办法

            在超越一个参数的状况下,@SelectProvide办法有必要承受Map做为参数,

            假如参数运用了@Param注解,那么参数在Map中以@Param的值为key,如下例中的userId;

            假如参数没有运用@Param注解,那么参数在Map中以参数的次序为key,如下例中的password:

            UserMapper.java:

             @SelectProvider(type = SqlProvider.class, method = "selectUserCheck")
            @ResultMap("userMap")
            public User getUserCheck(@Param("userId") long userId, String password);

            SqlProvider.java:

             public String selectUserCheck(Map para) {
            return "select * from user where userId=" + para.get(mybatis运用注解代替xml装备,动态生成Sql"userId") + " and password='" + para.get("1") + "'";
            }

            4.一些约束

            在Mapper接口和@SelectProvide办法类中,不要运用重载,也就是说,不要运用办法名相同参数不同的办法,以防止发作怪异问题。

            参考文献:

            【1】http://www.blogjava.net/dbstar/archive/2011/08/08/355825.html

            请关注微信公众号
            微信二维码
            不容错过
            Powered By Z-BlogPHP