基于注解的Mybatis mapper 接口功能没有mapper xml配置文件丰富,并且动态sql语句的灵活性不能和xml配置相比。

这里仅仅说一下基于注解的动态sql注意事项:

  • Mybatis提供注解 @InsertProvider, @UpdateProvider,@DeleteProvider和 @SelectProvider来提供动态sql功能。

  • 提供动态sql的方法參数仅仅有2种可能:无參数和一个參数。一个參数又分为2种情况:參数类型和mapper 接口方法參数同样,还有一个就是Map<String,Object>类型參数。这也就是说。你的mapper接口方法參数非常多非常多,而Mybatis会把他们放到map里面。这样提供动态sql的方法中,能够从map里面获取。

  • 提供动态sql的方法和xml配置动态sql非常大差别。提供动态sql的方法,大多是自己组装sql(Mybatis提供的org.apache.ibatis. jdbc.SQL 功能也是非常有限制的),而xml配置的(mybatis有一套自己的动态sql语法)动态sql,Mybatis会解析,自己组装sql。

  • mapper 接口方法的參数假设有多个,须要@Param  注解(没有的话,Mybatis自己主动生成parm{i}等这种名字),由于直到java8
    通过开启编译參数-parameters ,反射才会得到參数名称,所以Mybaitis仅仅有通过方法參数注解获得。Spring MVC里面的方法參数是通过字节码操作的。

  • 尽量用xml配置结合mapper 接口。

  • 假设是动态创建表功能,要用${}。字符串直接替换。而不是用#{}(Mybatis用typeHandlers赋值取值)

  • 假设Mybatis相应的java类型和数据库类型没有相应的映射关系(取值赋值),就仅仅能通过自己写typeHandlers,给Mybatis配置实现。

    比如java8 的新增的时间类型Mybatis如今还没支持。

  • 建议大家多读几遍英文版的Java
    Persistence with MyBatis 3

基于注解的Mybatis mapper 接口注意事项的更多相关文章

  1. Mybatis Mapper接口是如何找到实现类的-源码分析

    KeyWords: Mybatis 原理,源码,Mybatis Mapper 接口实现类,代理模式,动态代理,Java动态代理,Proxy.newProxyInstance,Mapper 映射,Map ...

  2. SpringBoot入门之基于注解的Mybatis

    今天学习下SpringBoot集成mybatis,集成mybatis一般有两种方式,一个是基于注解的一个是基于xml配置的.今天先了解下基于注解的mybatis集成. 一.引入依赖项 因为是mybat ...

  3. AOP之proceedingjoinpoint和joinpoint区别(获取各对象备忘)、动态代理机制及获取原理代理对象、获取Mybatis Mapper接口原始对象

    现在AOP的场景越来越多,所以我们有必要理解下和AOP相关的一些概念和机制. import org.aspectj.lang.reflect.SourceLocation; public interf ...

  4. Mybatis mapper接口与xml文件路径分离

    为什么分离 对于Maven项目,IntelliJ IDEA默认是不处理src/main/java中的非java文件的,不专门在pom.xml中配置<resources>是会报错的,参考这里 ...

  5. 关于Mybatis的@Param注解 及 mybatis Mapper中各种传递参数的方法

    原文:https://blog.csdn.net/mrqiang9001/article/details/79520436 关于Mybatis的@Param注解   Mybatis 作为一个轻量级的数 ...

  6. MyBatis Mapper 接口如何通过JDK动态代理来包装SqlSession 源码分析

    我们以往使用ibatis或者mybatis 都是以这种方式调用XML当中定义的CRUD标签来执行SQL 比如这样 <?xml version="1.0" encoding=& ...

  7. mybatis mapper接口开发dao层

    本文将探讨使用 mapper接口,以及 pojo 包装类进行 dao 层基本开发 mybatis dao 层开发只写 mapper 接口 其中需要 开发的接口实现一些开发规范 1. UserMappe ...

  8. spring中实现基于注解实现动态的接口限流防刷

    本文将介绍在spring项目中自定义注解,借助redis实现接口的限流 自定义注解类 import java.lang.annotation.ElementType; import java.lang ...

  9. myBatis mapper接口方法重载问题

    在mybatis框架中,写dao层的mapper接口时,是不可以进行方法的重载的,下面是截图证明:   当mapper接口中有方法的重载时,会出现异常,   这是mapper接口中定义的两个方法,进行 ...

随机推荐

  1. JDBC操作数据库的基本流程

    所有的JDBC应用程序都具有下面的基本流程: 1.加载数据库驱动并建立到数据库的连接. 2.执行SQL语句. 3.处理结果. 4.从数据库断开连接释放资源. 下面我们就来仔细看一看每一个步骤: 其实按 ...

  2. 利用Java的反射与代理机制实现AOP

    在上一篇文章中,我们讲述了利用Java的反射机制中实现Spring中的IOC,在本文中,我们将更进一步,讲述用Java的反射和动态代理机制来实现Spring的AOP. 一.AOP概述 AOP(Aspe ...

  3. 让你的saga更具有可伸缩性(Scaling NServiceBus Sagas)

    https://lostechies.com/jimmybogard/2013/03/26/scaling-nservicebus-sagas/ 当我们使用NServiceBus sagas (pro ...

  4. SQL Server 事务隔离级别的解析

    近来在项目中遇到的一些有关事务的问题,跟同事间讨论了一下,后面翻看了一些书籍和做了一些测试,趁有点时间把它写下来,一来加深印象,二来希望对大家有所帮助,当然,由于自身水平问题,如理解有误,还请大牛指出 ...

  5. IP windows相关

    nbtstat: 假设 我们  通过net view 获取了 局域网内一些计算机名 如上标红的计算机名称 如何 才能获取计算机的ip呢? 接下来使用  nbtstat -a  列出远程机器的名称表: ...

  6. ubuntu中apt使用以及centos中yum的使用

    centos和ubuntu是两大linux主流阵营 在centos中下载安装软件的方式 rpm rpm命令是RPM软件包的管理工具.rpm原本是Red Hat Linux发行版专门用来管理Linux各 ...

  7. 有关fallback diffuse unity的神奇的事情

    fallback diffuse 导致tris面片增加 double了 等于又画了一遍 很奇怪(只有一台机器是这样的) 这事情真坑我跟到最后 在一个最简测试场景 fallback diffuse替换成 ...

  8. 【angularJS】前后台分离,angularJS使用Token认证

    参考资料: [AngularJS系列(4)] 那伤不起的provider们啊~ (Provider, Value, Constant, Service, Factory, Decorator):htt ...

  9. NFSv4 mount incorrectly shows all files with ownership as nobody:nobody

    NFSv4 mount incorrectly shows all files with ownership as nobody:nobody   https://access.redhat.com/ ...

  10. php中将SimpleXMLElement Object数组转化为普通数组

    做微信开发,鉴于微信POST的消息是XML数据包,通过SimpleXMLElement Object获取的数据不好操作,需要转化为普通数组. 网上找了很多方法都不理想,发现通过json_decode和 ...