Mybatis的@Select注解怎么在没有xml文件时使用in查询,

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis的@Select注解怎么在没有xml文件时使用in查询,相关的知识,希望对你有一定的参考价值。

不一定非要用in查询,一般情况用=就可以查询出需要的数据。追问

你答非所问啊,我现在问的就是用in

追答

你要用in直接用就是了啊,条件里面加上。
@Select("select * from t_sys_operation_log where id in #ids")

参考技术A 仿照这个,在sql语句中这么写
status in <foreach collection='includeStatus' item='status' open='(' separator=',' close=')'> #status </foreach>
参考技术B

@Select("select * from t_sys_operation_log where id in $ids")

String ids = "1,2,3";

mybatis中xml映射和方法注解两种配置sql语句的方式是不是可以同时存在

假如使用接口映射器的方式来执行sql语句,对于某个方法,是否允许添加注解和在对应的xml配置文件中配置sql语句两种方式同时存在,比如对于DBMapper接口的selectAll()方法,我既在该方法上添加了@Select("select * from db_param"),又在对应的xml配置文件中配置了<select id="kd">select * from db_param</select>,这样是否允许?如果这样配的话,系统会报错,还是会优先用一种方式替换另一种方式?我自己测试的时候,mapper元素的namespace属性和接口的完整路径名相同的时候,而且使用接口的方式执行sql语句,同时配置会提示错误,但是我看到某篇文章中讲到Configuration对象的addMappers(String path)方法扫描指定包路径下的接口并注册,同时扫描该路径下的mapper配置文件并解析。而且该方法除了解析mapper配置文件,还会解析路径下的接口的注解,同时注解的sql语句会覆盖mapper文件的sql语句。

我因此感到比较困惑,所以想请教mybatis对于同一个接口的同一个方法,是否允许注解和mapper配置两种方式同时存在?

不能进行同时设置。执行会找不到接口的mapper代理工厂。mybatis会先解析xml文件,将解析后的sql封装在mapperstament中并放进Configuration的mappedStatements中,将命名空间和方法名(也就是id)作为key,mappedStatements是个自定义map。然后生成接口的代理工程,生产代理工厂后会解析注解,解析完注解,也会生成mapperstament,也会往统一的Configuration大对象里面放,但是放的时候自定义map会先判断是否存在,此时已经存在了,存在就会抛出IllegalArgumentException(name + " already contains value for " + key)。但是创建代理工厂的时候把异常吃掉了,所以加载的时候不会报错,但是不会给接口生成代理工厂。没有代理工厂,接口就没有实现类去操作。 参考技术A 当你程序需要执行的时候,系统会去寻找对应的sql语句,你如果存在两个 那么系统就会迷茫 不知道该选择哪一个 所以就报错了 xml格式最后在编译的时候也是存放在内存中,相当于一段代码 所以他和注解表示的作用是一样的 两个一样的东西 最后系统选择的时候肯定会报错的 因为不知道选哪一个本回答被提问者和网友采纳 参考技术B 这个问题 ,我们可以看下mybatis的配置文档
在SqlMapConfig中有俩种配置分别为注解配置 和 xml文档配置
在我们为一个dao接口注册了俩种配置的时候,源码里会进行判断首先进行判断使用的哪种属性配置,如果俩种配置都写了将会抛出
Cause: org.apache.ibatis.binding.BindingException: Type interface IUserDao is already known to the MapperRegistry.

以上是关于Mybatis的@Select注解怎么在没有xml文件时使用in查询,的主要内容,如果未能解决你的问题,请参考以下文章

mybatis java注解怎么加判断

SpringBoot 快速整合Mybatis(去XML化+注解进阶)

Mybatis在接口上使用注解配置SQL语句以及接口与xml一起使用

MyBatis-进阶

java 怎么使用注解操作mybatis

Mybatis 教程之Mybatis注解开发